リバースプロキシ
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からに見えるので、
アクセス分析や障害対応する際に困ってしまいます