だから私は見つけることができるすべてのサンプル構成を見てきましたが、sslを必要とするページを表示しようとするたびに、リダイレクトループになってしまいます。私はnginx/0.8.53とパッセンジャー3.0.2を実行しています。
これがSSL構成です
server {
listen 443 default ssl;
server_name <redacted>.com www.<redacted>.com;
root /home/app/<redacted>/public;
passenger_enabled on;
Rails_env production;
ssl_certificate /home/app/ssl/<redacted>.com.pem;
ssl_certificate_key /home/app/ssl/<redacted>.key;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_set_header X-Url-Scheme $scheme;
proxy_redirect off;
proxy_max_temp_file_size 0;
location /blog {
rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}
location ~* \.(js|css|jpg|jpeg|gif|png)$ {
if (-f $request_filename) {
expires max;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
これが非SSL設定です
server {
listen 80;
server_name <redacted>.com www.<redacted>.com;
root /home/app/<redacted>/public;
passenger_enabled on;
Rails_env production;
location /blog {
rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}
location ~* \.(js|css|jpg|jpeg|gif|png)$ {
if (-f $request_filename) {
expires max;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
問題の診断に役立つ追加情報があるかどうかをお知らせください。
ここにあなたの行があります:
listen 443 default ssl;
それを次のように変更します。
listen 443;
ssl on;
これを古いスタイルと呼びます。また、それとともに
proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_set_header X-Url-Scheme $scheme;
proxy_redirect off;
proxy_max_temp_file_size 0;
私のためにトリックをしました。今、私はあなたが持っている本当のIP回線を見逃していますが、これまでのところ、これはssl_requirementとssl_enforcerによる私の無限ループ問題を取り除きました。
この線だとわかりました
proxy_set_header Host $http_Host;
どちらに変更する必要があります
proxy_set_header Host $Host;
nginxのドキュメントによると '$ http_Hostを使用して、「変更されていないリクエストヘッダー」を渡します。
X_FORWARDED_PROTOの代わりに「X-Forwarded-Proto」を使用してみましたか?
以前にこのヘッダーで問題が発生しました。リダイレクトの原因ではありませんでしたが、このヘッダーを変更すると修正されました。
Sslセクションとnon-sslセクションの両方にrewriteステートメントがあるので
location /blog {
rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}
Blog..comのサーバーセクションはどこにありますか?それが問題の原因でしょうか?
Symfony2アプリケーションにも同様の問題がありましたが、別の原因はありましたが、fastcgi_param HTTPS off;
もちろん必要なときfastcgi_param HTTPS on;
私のnginx構成で。
location ~ ^/(app|app_dev|config)\.php(/|$) {
satisfy any;
allow all;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
}
他の誰かがこれにつまずく場合に備えて、同じサーバー{}ブロックを介してhttpとhttpsの両方を構成しようとしましたが、「この行はデフォルトであり、暗黙的である」ということは、 80も聴いてください。 "listen 80"行のコメントを外して、両方のlisten行が存在するようにして、無限ループを修正しました。なぜリダイレクトが発生していたのかはわかりませんが、実際にはリダイレクトされていました。
自分のクラウドが良い構成ファイルを持っているにもかかわらずリダイレクトループを作成し続ける理由を必死に検索している人のために、それが機能しない理由を見つけました。
私の構成:nginx + php-fpm + mysqlを新しいCentOS 6.5で
php-fpmおよびnginxをインストールする場合、/ var/lib/php/session /のデフォルトの権限はroot:Apacheです。
nginxにphpセッションを格納するphp-fpmは、ここにphpセッションを格納します。nginxに書き込み権限がない場合、ログインセッションを維持するために無惨に失敗し、無限ループが発生します。
Apacheグループ(usermod -a -G Apache nginx)にnginxを追加するか、このフォルダーの所有権を変更してください。
ごきげんよう。
X_FORWARDED_PROTO
あなたのファイルのようにエラーを引き起こす可能性があり、それは私の場合に起こりました。 X-Forwarded-Proto
は正しいですが、ハイフンは大文字や小文字よりも重要です。
あなたは慣習に固執することでそれらの問題を回避することができます;)
こちらもご覧ください カスタムHTTPヘッダー:命名規則 そしてこちら: http://www.ietf.org/rfc/rfc2047.txt