menu
書いてる野郎
orebike@gmail.com
よくありそうな構成。
AWS ELB に SSL をオフロードして https の通信を行わせて、Nginx をリバースプロキシとして使い Spring Boot の内蔵 Tomcat に横流しする。
この構成の問題として、リクエストが ELB → Nginx → Tomcat(Spring Boot) とバケツリレーされるので、元のリクエスト情報が失われるということにある。情報が失われるのでレスポンスが意図したモノにならない可能性がある。
ELB は元情報を当たり前ながら保持していてそれを下部に流しているのでそれを Nginx でも流すようにする。
/etc/nginx/nginx.conf にこのように設定する。
server { location / { proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:8080/; }
これで Spring Boot 側へ ELB からの情報を流してもらえることになる。
Spring Boot 側はそれを使うという設定を明示的にしなければならず application.yml にこのように書く
server: use-forward-headers: true