読者です 読者をやめる 読者になる 読者になる

mmag

ハマったことメモなど

リバースプロキシ(Nginx)がToo Many Redirects

おはようございます。

SSLの終端はNginxで、その後ろにWebアプリがいる、みたいなよくある構成をやっていたら、「リダイレクトが多すぎます」というようなエラーが出ました。前にも同じような構成をつくったことがあったので、こんなところでハマるとは、という感じでしたが、設定ファイルから1行抜けているのが原因でした。ポカミス。

upstream app {
    server 127.0.0.1:4000;
}

# For WebSocket
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 80;
    listen [::]:80;
    server_name MYDOMAIN.COM;

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

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name MYDOMAIN.COM;

    ssl_certificate     /etc/letsencrypt/live/MYDOMAIN.COM/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/MYDOMAIN.COM/privkey.pem;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;  # これ忘れてた
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;

        proxy_pass http://app;
    }
}

http → httpshttpshttps → ... というリダイレクトがされていたので、443の設定がトチってるんじゃのーと調べていたら見つかったわけです。

/socketへのリクエストのときにしか必要ない設定もあるので、その辺を整理して、あとSSLのランクみたいなの測るやつでAくらいにしときます。


追記

ホントに原因これなのかなという気がしてきた。合わせて使ってるcloudflareの設定が疑わしい。

テーマはFB matteをベースにしてます。作者さんに感謝を込めて。