0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[備忘録] リバースプロキシのNginxの構成について

Posted at

作成したアプリをEC2上にデプロイできたはいいものの、リバースプロキシサーバーとしてのNginxが具体的にどういう役割を担っているのかいまいちわからなかったため、ここで整理します。

プロキシサーバーとリバースプロキシサーバーの違い

プロキシサーバー

クライアント(内から) → プロキシサーバー → インターネット
  • 社内ネットワークが外に直接出られないときに通す道
  • セキュリティ・ログ監視・通信制御などで使用される

→自分の代わりに外へアクセスしてくれる

例: 会社のpcでブラウザの「プロキシ設定」をする場合など

リバースプロキシサーバー

クライアント(外から) → リバースプロキシサーバー(nginxなど) → webアプリ
  • サーバ側からみて、複数のアプリ・APIにルーティングしたり負荷分散する
  • ポート変換などができる

→外から来たアクセスを中継して内部に通してくれる

http://example.com → localhost:8000に中継

全体像(マスキング済)

#1
server {
    listen 80;
    server_name <DOMAIN> www.<DOMAIN>;

    return 301 https://$host$request_uri;
}

#2
server {
     listen 443 ssl http2;
     server_name <DOMAIN> www.<DOMAIN>;

#3  
    ssl_certificate     /etc/letsencrypt/live/<LE_PATH>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<LE_PATH>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

#4    
    location / {
        proxy_pass http://x.x.x.x:<APP_PORT>;
        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;
    }

#5    
        location /static/ {
        alias /var/www/static/;
        autoindex off;
    }
}

①listen80

server {
    listen 80;
    server_name <DOMAIN> www.<DOMAIN>;

    return 301 https://$host$request_uri;
}
内容
listen 80; HTTPのポートでリクエストを受ける
server_name … ドメイン名にマッチした場合にこの設定を適用
return 301 … 受け取ったHTTPリクエストを、HTTPSへリダイレクト

②listen443

server {
     listen 443 ssl http2;
     server_name <DOMAIN> www.<DOMAIN>;
内容
listen 443 ssl; HTTPS(SSL)通信を受け付ける設定
server_name ①と同じ。指定ドメインからのリクエストを対象にする

③SSL証明書設定

ssl_certificate     /etc/letsencrypt/live/<LE_PATH>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<LE_PATH>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
内容
ssl_certificate サーバー証明書本体(ドメイン用)
ssl_certificate_key 秘密鍵(certbotが生成)
include TLSの推奨オプション設定(Let’s Encryptが自動生成)
ssl_dhparam 強い暗号設定用の追加キー(Diffie-Hellman)

④転送処理

proxy_pass http://x.x.x.x:<APP_PORT>;
        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;
内容
location / ルート(トップページ)へのリクエスト
proxy_pass ローカルで動いているアプリケーションのポートへ転送
proxy_set_header 転送先に対して元のリクエスト情報を渡す設定(重要)

⑤静的なファイルの処理

location /static/ {
        alias /var/www/static/;
        autoindex off;
    }
}
内容
location /static/ /static/ にアクセスが来たときの処理
alias 実際のファイルパスにマッピング(aliasは必ず末尾に/必要)
autoindex ディレクトリの中身を一覧表示できるようにする(デバッグ用途)

構成まとめ

機能 動作
HTTPアクセス 自動でHTTPSにリダイレクト
HTTPSアクセス 鍵マーク付きのアプリ(URL)を表示
CSSやJSなどの静的ファイル /static/ 経由で読み込まれる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?