所以我已经看过了我可以find的每个示例configuration,但是每次尝试查看需要ssl的页面时,我都会在redirect循环中结束。 我运行nginx / 0.8.53和乘客3.0.2。
这里是sslconfiguration
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; } }
这里是非sslconfiguration
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的无限循环问题。
您是否尝试过使用“X-Forwarded-Proto”而不是X_FORWARDED_PROTO?
我以前碰到这个头的问题,它不会导致重定向,但改变这个头为我固定。
我发现这是这条线
proxy_set_header Host $http_host;
应该改成哪个
proxy_set_header Host $host;
根据nginx文档使用'$ http_host你传递“不变的请求头”。
既然你在ssl和non-ssl部分都有重写语句
location /blog { rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent; }
博客服务器部分在哪里? 这可能是问题的根源吗?
我的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,但只添加了“listen 443”指令,认为“这一行是默认的和暗示的”,这也意味着它也会也听80,没有。 取消“听80”这一行的注释,使两条听线都存在,纠正了无限循环。 不知道为什么它甚至会得到一个重定向,但它确实。
对于那些正在严格搜索的人来说,为什么他们自己的云不断地做一个重定向循环,尽管有一个很好的配置文件,我发现为什么它不工作。
我的配置:nginx + php-fpm + mysql上新鲜的centos 6.5
当安装php-fpm和nginx时,/ var / lib / php / session /下的默认权限是root:apache
php-fpm通过nginx将php会话存储在这里,如果nginx没有授权写入失败,那么保持任何登录会话都会失败,从而导致无限循环。
所以理由添加nginx在Apache组(usermod -a -G apache nginx)或更改此文件夹的所有权。
祝你今天愉快。
X_FORWARDED_PROTO
和你的文件一样可能会导致错误,而且在我的情况下。 X-Forwarded-Proto
是正确的,而hiphens比大写或小写字母更重要。
你可以通过坚持惯例来避免这些问题;)
另请参阅: 自定义HTTP头文件:命名约定和这里: http : //www.ietf.org/rfc/rfc2047.txt