ホームページ  >  記事  >  バックエンド開発  >  nginx の設定を最初から行う

nginx の設定を最初から行う

WBOY
WBOYオリジナル
2016-08-08 09:27:381006ブラウズ

転載元: http://oilbeater.com/nginx/2014/12/29/nginx-conf-from-zero.html

基本概念

Nginx の最も一般的な用途は、リバース プロキシ サービスを提供することです。エージェントはどうですか?多くの本土の同胞がこの魔法の国でフォワード プロキシを使用していると思います。原理は大まかに次のとおりです。

プロキシ サーバーは、リクエストを受け入れ、実際の顧客を隠し、クライアント側で仲介者として機能します。サーバーリソースからのリクエスト。プロキシ サーバーが万里の長城の外にある場合、万里の長城を越えるという目的を達成するのにも役立ちます。リバースプロキシとはその名のとおり、プロキシサーバーをサーバーの仲介として利用し、実際にサービスを提供するサーバーを隠蔽するというものです。

もちろんこれは目的を達成するためのものではありません。万里の長城を越えますが、セキュリティと負荷分散と一連の機能を実現します。いわゆるセキュリティとは、クライアントのリクエストがイントラネット サーバーに直接送信されず、プロキシを通じて転送されることを意味し、この層ではセキュリティ フィルタリング、フロー制御、DDOS 防止などの一連の戦略を実装できます。負荷分散とは、バックエンドで実際にサービスを提供するサーバーの数を水平方向に拡張できることを意味します。これにより、エージェントはルールに従ってリクエストを各サーバーに転送し、各サーバーの負荷がほぼ均等になるようにします。

そして、nginx は非常に人気のあるリバース プロキシ サービスです。

インストール

Ubuntu では、コンパイルとインストールのプロセスをスキップして、直接 apt-get

<code>sudo apt-get install nginx
</code>

を介して nginx サービスを直接開始できます:

<code>sudo service nginx start
</code>

nginx はポート 80 に設定されています。デフォルトでは、ブラウザで http://locallhost にアクセスして確認できます。

初期設定

nginx のデフォルト設定ファイルは

<code>/etc/nginx/nginx.conf
</code>

にあります。設定を学習する最良の方法は、最初に他の設定を見るのではなく、nginx のデフォルト ページに関連する設定を直接見てみましょう。 。構成ファイルには次の行があります:

<code>include /etc/nginx/sites-enabled/*;
</code>

この行は、サイト対応フォルダーにデフォルトのファイルが 1 つだけあります。この外部構成ファイルは、nginx のデフォルトのプロキシを担当します。構成コンテンツを縮小すると、次の行が得られます。

<code>server {
    server_name localhost;
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
    try_files $uri $uri/ =404;
    }
}
</code>

大規模な Web サイトには通常、多数の下位サイトがあり、独自のサーバーが対応するサービスを提供しています。nginx では、これらの異なるサービス構成を分離するために、仮想ホストと呼ばれる概念を使用できます。 、これは上記の構成におけるサーバーの意味です。たとえば、Google には translation とAcademic という 2 つの製品があります。nginx 構成ファイルで 2 つのサーバーを構成できます。この場合、異なる URL リクエストになります。 nginx の対応する設定に対応し、別のバックエンド サーバーに転送されます。ここ servername は、クライアントの http リクエストの host 行と一致します。

この例では、server_name は localhost であるため、ブラウザーで localhost を介してページ設定にアクセスできます。次の 2 つの listen は、それぞれ ipv4 および ipv6 の listen ポートに対応します。8080 に設定されている場合、localhost:8080 を介してのみデフォルト ページにアクセスできます。

default_server は、nginx に存在しない他の http リクエスト ホスト設定がある場合、このサーバーの設定が使用されることを意味します。たとえば、127.0.0.1 にアクセスすると、このサーバーに転送されて処理されます。

各 URL リクエストは、nginx が処理して転送するサービス (ローカル ファイル パスまたは他のサーバーのサービス パス) に対応します。このパスの照合は、場所を通じて実行されます。サーバーはドメイン名に対応する構成、場所はドメイン名の下でのより詳細なパスの構成と考えることができます。

/ に一致する場所、つまり、localhost の /xxx または /yyy で始まるすべてのリクエストは、この単純で大雑把な一致に加えて、nginx は通常の完全な一致やその他の詳細な一致方法もサポートしています。そして、try

files は、nginx が次の順序でファイルにアクセスし、最初に一致したファイルを返すことを意味します。たとえば、localhost/test をリクエストすると、/test ファイルが検索され、見つからない場合は 404 が返されます。さらに、場所の設定で proxypass を使用することもできます リバース プロキシと負荷分散を実装しますが、この最も単純な構成は関係しません。

ここで、root は、すべての URL リクエストのルート パスとしてローカル フォルダーを使用することを指します。たとえば、ユーザーが localhost/test をリクエストした場合、nginx は /usr/share/nginx/html フォルダーでテスト ファイルを検索して返します。

そして、index はデフォルトのアクセスページです。localhost にアクセスすると、ルートファイルパス内のindex.htmlとindex.htmを順番に自動的に検索し、最初に見つかった結果を返します。

位置情報の詳細設定

上面的配置只是将用户的 url 映射到本地的文件,并没有实现传说中的反向代理和负载均衡(当然 nginx 做静态文件的分发也是想到的厉害),下面我们就来进一步配置 location 看看怎么实现。

配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的 8080 端口,只要这样:

<code>location / {
    proxy_pass 123.34.56.67:8080;
}
</code>

这样所有的请求就都被反向代理到 123.34.56.67 去了。这样我们反向代理的功能是实现了,可是就能代理到一台服务器上哪有什么负载均衡呀?这就要用到 nginx 的 upstream 模块了。

<code>upstream backend {
    ip_hash;    
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}
location / {
    proxy_pass http://backend;
}
</code>

我们在 upstream 中指定了一组机器,并将这个组命名为 backend,这样在 proxypass 中只要将请求转移到 backend 这个 upstream 中我们就实现了在四台机器的反向代理加负载均衡。其中的 iphash 指明了我们均衡的方式是按照用户的 ip 地址进行分配。

要让配置生效,我们不必重启 nginx 只需要 reload 配置即可。

<code>sudo service nginx reload
</code>

总结

以上是最简单的通过 nginx 实现静态文件转发、反向代理和负载均衡的配置。在 nginx 中所有的功能都是通过模块来实现的,比如当我们配置 upstream 时是对 upstream 模块,而 server 和 location 是在 http core 模块,其他的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是类似的可以再 nginx 的模块文档中找到详细的配置说明。


以上就介绍了nginx 配置从零开始,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:php(1) - 基本構文次の記事:php(1) - 基本構文