最近、Nginxを使用してHTTPSにリダイレクトしようとしていますが、ブラウザーで自分のサイトにアクセスしようとすると、リダイレクトループが発生し続けます。これが私の完全なサーバーブロック設定ファイルです:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /var/www;
index index.php index.html index.htm home.html contact.html projects.html;
# Make site accessible from http://localhost/
server_name melone.co;
return 301 https://$Host$request_uri;
ssl_certificate /path/to/ssl;
ssl_certificate_key /path/to/ssl;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
調べてみると、return 301 https://$Host$request_uri;
がこれを行う最も簡単な方法であることがわかりました。
そこで、それを設定ファイルに実装し、Sudo service nginx restart
を実行しました。次にブラウザにアクセスすると、リダイレクトループが発生しました。その1行のコードを削除すると、それはなくなりました。したがって、私が本当に探しているのは、SSLにリダイレクトするためのより効率的な方法です。
どんな助けでもいただければ幸いです。ありがとう
現状では、すべてのトラフィックをhttps
にリダイレクトしています。これは、http
トラフィックには適していますが、https
トラフィックにはまったく意味がなく、リダイレクトループが発生します。現在起こっていることは次のとおりです。http
-> https
-> https
-> https
-> https
-> https
...など、ブラウザが「それで十分です。成功しません」と表示するまで、かなりの時間がかかります。
達成したいのは、http
トラフィックをhttps
にリダイレクトし、https
トラフィックを処理することです(以前にhttp
トラフィックで行ったように)。
したがって、構成を2つのserver
ディレクティブに分割する必要があります。1つはhttp
(リダイレクトを実行する必要があります)用で、もう1つはhttps
用です。トラフィック。
この例を見てください:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name melone.co;
return 301 https://$Host$request_uri;
}
このserver
ブロックを構成に追加し、既存のserver
ブロックの対応する行を削除して、利益を得てください。
わかりました、問題が見つかりました。 2つのサーバーブロックが必要です。ポート80でリッスンし、443にリダイレクトします。
私はこれを私のconfの一番上に追加しました:
server {
listen 80 ;
server_name melone.co;
return 301 https://$server_name$request_uri;
}