Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl Nginx配置导致无休止的重定向循环_Ssl_Nginx_Ruby On Rails 3_Passenger - Fatal编程技术网

Ssl Nginx配置导致无休止的重定向循环

Ssl Nginx配置导致无休止的重定向循环,ssl,nginx,ruby-on-rails-3,passenger,Ssl,Nginx,Ruby On Rails 3,Passenger,因此,我查看了我能找到的每个示例配置,但每次尝试查看需要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; rai

因此,我查看了我能找到的每个示例配置,但每次尝试查看需要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;
  }
}
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;
  }
}
服务器{
监听443默认ssl;
server_name.com www.com;
root/home/app//public;
乘客_开启;
环保生产;;
ssl_certificate/home/app/ssl/.com.pem;
ssl证书密钥/home/app/ssl/.key;
代理集头X-Real-IP$remote\u addr;
代理设置头X转发协议https;
proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For;
代理设置头主机$http\U主机;
代理集标题X-Url-Scheme$Scheme;
代理_重定向关闭;
代理\u最大\u临时\u文件\u大小0;
地点/博客{
重写^/blog(/.*)?$http://blog..com/1美元永久性;
}
位置~*\(js | css | jpg | jpeg | gif | png)${
如果(-f$request\u文件名){
最大值;
打破
}
}
错误\u第500页502 503 504/50x.html;
location=/50x.html{
根html;
}
}
这是非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;
  }
}
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;
  }
}
服务器{
听80;
server_name.com www.com;
root/home/app//public;
乘客_开启;
环保生产;;
地点/博客{
重写^/blog(/.*)?$http://blog..com/1美元永久性;
}
位置~*\(js | css | jpg | jpeg | gif | png)${
如果(-f$request\u文件名){
最大值;
打破
}
}
错误\u第500页502 503 504/50x.html;
location=/50x.html{
根html;
}
}
如果有任何其他信息可以帮助诊断问题,请告诉我。

您是否尝试过使用“X-Forwarded-Proto”而不是“X-Forwarded-Proto”

我以前遇到过此标题的问题,它不会导致重定向,但更改此标题为我解决了此问题。

这里是您的问题:

  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_需求和ssl_enforcer方面的无限循环问题。

因为您在ssl和非ssl部分都找到了重写语句

location /blog {
  rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}
位置/博客{
重写^/blog(/.*)?$http://blog..com/1美元永久性;
}

blog..com的服务器部分在哪里??这可能是问题的根源吗?

如果其他人无意中发现了这一点,我试图通过同一个服务器{}块配置http和https,但只添加了“listen 443”指令,相信“this line是默认的和隐含的”意味着它也会在80上侦听,但没有。取消“listen 80”行的注释,使两个listen行都出现,从而纠正了无限循环。根本不知道为什么它会被重定向,但它确实被重定向了。

我发现是这一行

 proxy_set_header  Host $http_host;
哪个应该改成

 proxy_set_header  Host $host;

通过使用“$http\U主机,您传递的是“未更改的请求头”

我的symfony2应用程序也有类似的问题,尽管原因不同:我关闭了
fastcgi_param HTTPS当我当然需要
fastcgi_param HTTPS打开时在我的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;
    }

对于那些拼命搜索自己的云为什么在拥有良好配置文件的情况下仍继续进行重定向循环的人,我已经找到了它不起作用的原因

我的配置: 全新centos 6.5上的nginx+php fpm+mysql

安装php fpm和nginx时,/var/lib/php/session/上的默认权限为root:apache

php fpm通过nginx将php会话存储在这里,如果nginx没有写入该会话的授权,那么将无法保存任何登录会话,从而导致无限循环

因此,只需在apache组中添加nginx(usermod-a-G apachenginx)或更改此文件夹的所有权即可


祝你有愉快的一天。

X\u PROTO
在你的文件中可能会导致错误,我的情况就是如此
X-Forwarded-Proto
是正确的,而hiphens比大写或小写字母更重要

您可以通过遵守约定来避免这些问题;)


另请参见此处:和此处:

我已经玩弄了一大堆这些答案,但没有一个对我有效。然后我意识到,由于我使用Cloudflare,问题可能不在服务器上,而在Cloudflare上。请注意,当我将SSL设置为
Full(Strict)
时,一切都正常工作


属于布赖恩,这个问题解决了吗?我也是。X-FORWARDED-PROTO对特定应用程序没有任何作用,而X-FORWARDED-PROTO工作得很好。nginx代理到后端的独立rails应用程序。我在rails应用程序中使用了nginx的ssl配置的第一个版本,并在无限循环中结束。将配置更改为将ssl声明放在单独的行上,这为我解决了这个问题。谢谢ssl-on;在新行中,修复了我切换config.ssl=true@Sahil与其在评论中表示感谢,不如投上一票。很高兴有帮助:)这个问题快把我逼疯了!我已经用Let's Encrypt设置了SSL,所以我甚至没有考虑检查Cloudflare的SSL设置。谢谢分享!非常感谢我几乎把头发都拔了!