Server Build Exercises on AWS (Amazon Web Services) 2022 edition

リバースプロキシ

nginx といえばリバースプロキシですね。 本構築ガイドでは、 /etc/nginx/conf.d/ingress.confファイルを作成し、 リバースプロキシの設定をnginxに読みこませています

ちなみにinclude /etc/nginx/conf.d/*.conf

http {
   ...
}

ブロックの中で行われていることに注意してください。 つまり、 このingress.confファイルに書いてよい設定は http をカスタマイズするものだけになります。

/etc/nginx/conf.d/ingress.conf

upstream backend {
    server 127.0.0.1:8080;
}

転送先の設定がupstreamです。 backendの部分は、あとの設定で参照できる名前になるので、わかりやすい名前をつけます。

複数台のサーバへ振り分けるには?

[図(アスキーアート:-)]

                  +----> wwwapp01
user ----> nginx -+----> wwwapp02
                  +----> wwwapp03

この構築ガイドのデフォルト構成では転送先が一つしかないので、一行しかありませんでしたが、 転送先のサーバが複数であれば、複数行サーバ名とポート番号を書いてください。

[設定]

upstream backend {
    server wwwapp01:8080;
    server wwwapp02:8080;
    server wwwapp03:8080;
}

デフォルトではラウンドロビンです。 転送先は wwwapp01 wwwapp02 wwwapp03 と順番に変わっていきます。 この設定項目のオプションで、この割合を変更するなど色々な設定が可能です。 詳細は各自しらべてください。 サーバ名はIPアドレスでもよいのですが、 わかりやすいサーバ名をつけて、それを設定に書くほうがわかりやすいと思います (デフォルト構成では、転送先が一つで、かつ、同じサーバ上で動いているので 127.0.0.1 と書いています)

server セクション

server {
    listen               0.0.0.0:80;
    server_name		 localhost;

    # disable directory listings by default
    autoindex		 off;

    # correct proxy_pass not contain the last "/"
    location / {
        proxy_pass         http://backend;

        proxy_no_cache				1;
	proxy_redirect		      		off;
        proxy_set_header  Host			$http_host;
        proxy_set_header  X-Real-IP		$remote_addr;
        proxy_set_header  X-Forwarded-For	$proxy_add_x_forwarded_for;
    }
}

まぁ、こういうものだと思ってもらえばよいのですが… (あとはオライリーのPDFを読んでもらうか、ぐぐってくれれば解説が出ますわ) それもなんなので少しだけ補足しておきます

/はURLのパスです。 つまりnginxが受けたリクエストをすべてproxy_pass(= http://backend)に転送します

    location / {
        proxy_pass         http://backend;

        proxy_no_cache				1;
	proxy_redirect		      		off;
        proxy_set_header  Host			$http_host;
        proxy_set_header  X-Real-IP		$remote_addr;
        proxy_set_header  X-Forwarded-For	$proxy_add_x_forwarded_for;
    }
}

proxy_なんとかという設定は、 転送先へのHTTPセッションに対する設定です。 最後の3つproxy_set_headerはアクセス元の情報をbackendに伝えるための設定です。 これがないと、 転送先のbackendサーバ群(pythonアプリとかGo言語アプリ)では、 HTTPのアクセス元がnginxからに見えるので、 アクセス分析や障害対応する際に困ってしまいます

Last updated on 17 Dec 2021
Published on 17 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.