アンドロイド

nginxリバースプロキシのセットアップ

Docker and Nginx Reverse Proxy

Docker and Nginx Reverse Proxy

目次:

Anonim

リバースプロキシは、クライアントリクエストを受け取り、1つ以上のプロキシされたサーバーにリクエストを送信し、レスポンスをフェッチして、サーバーのレスポンスをクライアントに配信するサービスです。

NGINXは、そのパフォーマンスとスケーラビリティのために、HTTPサーバーと非HTTPサーバーのリバースプロキシとしてよく使用されます。 典型的なリバースプロキシ構成は、NginxをNode.js、Python、またはJavaアプリケーションの前に配置することです。

Nginxをリバースプロキシとして使用すると、いくつかの追加の利点が得られます。

  • 負荷分散 -Nginxは負荷分散を実行して、プロキシされたサーバーにクライアントの要求を分散し、パフォーマンス、スケーラビリティ、および信頼性を向上させることができます。 キャッシュ -Nginxをリバースプロキシとして使用すると、ページの事前レンダリングバージョンをキャッシュして、ページの読み込み時間を短縮できます。 プロキシされたサーバーの応答から受信したコンテンツをキャッシュし、それを使用して毎回同じコンテンツについてプロキシされたサーバーに接続することなくクライアントに応答することにより機能します。 SSL終了 -Nginxは、クライアントとの接続のSSLエンドポイントとして機能できます。 着信SSL接続を処理および解読し、プロキシサーバーの応答を暗号化します。 圧縮 -プロキシされたサーバーが圧縮された応答を送信しない場合、クライアントに送信する前に応答を圧縮するようにNginxを構成できます。 DDoS攻撃の緩和 -単一のIPアドレスあたりの着信要求と接続数を通常のユーザーに典型的な値に制限できます。 Nginxでは、クライアントの場所、および「User-Agent」や「Referer」などのリクエストヘッダーの値に基づいてアクセスをブロックまたは制限することもできます。

この記事では、Nginxをリバースプロキシとして構成するために必要な手順の概要を説明します。

前提条件

Ubuntu、CentOS、またはDebianサーバーにNginxがインストールされていることを前提としています。

Nginxをリバースプロキシとして使用する

NginxをHTTPサーバーに対するリバースプロキシとして構成するには、ドメインのサーバーブロック構成ファイルを開き、場所とその中のプロキシサーバーを指定します。

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

プロキシサーバーのURLは、 proxy_pass ディレクティブを使用して設定され、プロトコルとして HTTP または HTTPS を使用し、ドメイン名またはIPアドレス、およびオプションのポートとURIをアドレスとして使用できます。

上記の構成では、すべてのリクエストを http://127.0.0.1:8080 プロキシサーバーに /app 場所に渡すようにNginxに指示し http://127.0.0.1:8080

UbuntuおよびDebianベースのディストリビューションでは、サーバーブロックファイルは /etc/nginx/sites-available ディレクトリに保存され、CentOSでは /etc/nginx/conf.d ディレクトリに保存されます。

proxy_pass ディレクティブと proxy_pass ディレクティブの proxy_pass やすく説明するために、次の例を見てみましょう。

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

訪問者が http://example.com/blog/my-post にアクセスすると、Nginxはこのリクエストを http://node1.com:8000/wordpress/my-post プロキシします。

プロキシされるサーバーのアドレスにURI( /wordpress/ )が含まれる場合、プロキシされるサーバーに渡されるリクエストURIは、ディレクティブで指定されたURIに置き換えられます。 プロキシされるサーバーのアドレスがURIなしで指定されている場合、完全なリクエストURIがプロキシされるサーバーに渡されます。

要求ヘッダーを渡す

Nginxがリクエストをプロキシするとき、クライアントからのプロキシされたリクエストの2つのヘッダーフィールド Host Connection 自動的に定義し、空のヘッダーを削除します。 Host $proxy_host 変数に設定され、 Connection は閉じるように設定されます。

プロキシ接続のヘッダーを調整または設定するには、 proxy_set_header ディレクティブとヘッダー値を使用します。 使用可能なすべてのリクエストヘッダーとそれらの許可された値のリストは、ここにあります。 ヘッダーがプロキシサーバーに渡されないようにする場合は、空の文字列 "" 設定します。

次の例では、 Host ヘッダーフィールドの値を $host 変更し、その値を空の文字列に設定して Accept-Encoding ヘッダーフィールドを削除しています。

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

構成ファイルを変更するたびに、変更を有効にするためにNginxサービスを再起動する必要があります。

非HTTPプロキシサーバーへのリバースプロキシとしてNginxを構成する

Nginxを非HTTPプロキシサーバーへのリバースプロキシとして構成するには、次のディレクティブを使用できます。

  • fastcgi_pass -FastCGIサーバーへのリバースプロキシ。 uwsgi_pass -uwsgiサーバーへのリバースプロキシ。 scgi_pass -SCGIサーバーへのリバースプロキシ。 memcached_pass -Memcachedサーバーへのリバースプロキシ。

最も一般的な例の1つは、PHP-FPMのリバースプロキシとしてNginxを使用することです。

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

一般的なNginxリバースプロキシオプション

HTTPSを介したコンテンツの提供は、今日では標準となっています。 このセクションでは、推奨されるNginxプロキシパラメーターとヘッダーを含むHTTPS Nginxリバースプロキシ構成の例を示します。

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 プロキシ用のHTTPプロトコルバージョンを定義します。デフォルトでは1.0に設定されています。 Websocketおよび keepalive 接続の場合、バージョン1.1を使用する必要があります。 proxy_cache_bypass $http_upgrade 応答がキャッシュから取得されない条件を設定します。 Upgrade $http_upgrade および Connection "upgrade" -アプリケーションがWebsocketを使用している場合、これらのヘッダーフィールドは必須です。 Host $host 次の優先順位の $host 変数には、要求行からの Host 名、 Host 要求ヘッダーフィールドからの Host 名、または要求に一致するサーバー名が含まれます。 X-Real-IP $remote_addr 実際の訪問者のリモートIPアドレスをプロキシされたサーバーに転送します。 X-Forwarded-For $proxy_add_x_forwarded_for クライアントがプロキシされたすべてのサーバーのIPアドレスを含むリスト。 X-Forwarded-Proto $scheme -HTTPSサーバーブロック内で使用すると、プロキシサーバーからの各HTTP応答はHTTPSに書き換えられます。 X-Forwarded-Host $host クライアントが要求した元のホストを定義します。 X-Forwarded-Port $server_port クライアントによって要求された元のポートを定義します。

結論

Nginxをリバースプロキシとして使用する方法を学習しました。 また、追加のパラメーターをサーバーに渡し、プロキシされた要求のさまざまなヘッダーフィールドを変更および設定する方法も示しました。

nginx