Nginx,Unicorn,net::ERR_TOO_MANY_REDIRECTS

11 浏览
0 Comments

Nginx,Unicorn,net::ERR_TOO_MANY_REDIRECTS

当我尝试在Digital Ocean Server上访问我的Rails应用程序时,浏览器显示以下错误:重定向次数过多。在控制台中显示的错误为:net::ERR_TOO_MANY_REDIRECTS。\n在这一点上,capistrano成功部署,没有错误。该应用程序在本地运行完美(没有错误)。\n以下是其他相关文件,包括nginx、unicorn和rails的错误日志文件,以及nginx和unicorn的配置文件。\n/etc/defaults/unicorn:\nCONFIGURED=yes\nTIMEOUT=60\nAPP_ROOT=/home/rails/rails_project/current\nCONFIG_RB=/etc/unicorn.conf\nPID=/var/run/unicorn.pid\nRAILS_ENV=\"production\"\nUNICORN_OPTS=\"-D -c $CONFIG_RB -E $RAILS_ENV\"\nPATH=/home/rails/.rvm/gems/ruby-2.2.2/bin:/home/rails/.rvm/gems/ruby-2.2.2@global/bin$\nexport GEM_HOME=/home/rails/.rvm/gems/ruby-2.2.2\nexport GEM_PATH=/home/rails/.rvm/gems/ruby-2.2.2:/home/rails/.rvm/gems/ruby-2.2.2@glo$\nexport HOME=/home/rails\nDAEMON=/home/rails/.rvm/gems/ruby-2.2.2/bin/unicorn\n/var/log/unicorn/unicorn.log:\nI, [2016-05-13T22:26:59.271424 #11584] INFO -- : 重新启动 # worker=0\nI, [2016-05-13T22:26:59.272911 #11584] INFO -- : 重新启动 # worker=1\nI, [2016-05-13T22:26:59.273219 #11584] INFO -- : 重新启动 # worker=2\nI, [2016-05-13T22:26:59.273573 #11584] INFO -- : 重新启动 # worker=3\nI, [2016-05-13T22:26:59.274209 #11584] INFO -- : 主进程完成\nI, [2016-05-13T22:27:00.664033 #12489] INFO -- : 删除现有的socket=/var/run/unicorn.sock\nI, [2016-05-13T22:27:00.664570 #12489] INFO -- : 监听地址=/var/run/unicorn.sock fd=10\nI, [2016-05-13T22:27:00.668023 #12489] INFO -- : worker=0 正在产生...\nI, [2016-05-13T22:27:00.669161 #12489] INFO -- : worker=1 正在产生...\nI, [2016-05-13T22:27:00.670383 #12492] INFO -- : worker=0 产生的pid=12492\nI, [2016-05-13T22:27:00.671245 #12489] INFO -- : worker=2 正在产生...\nI, [2016-05-13T22:27:00.676617 #12489] INFO -- : worker=3 正在产生...\nI, [2016-05-13T22:27:00.680864 #12495] INFO -- : worker=1 产生的pid=12495\nI, [2016-05-13T22:27:00.681924 #12489] INFO -- : 主进程准备就绪\nI, [2016-05-13T22:27:00.689107 #12497] INFO -- : worker=2 产生的pid=12497\nI, [2016-05-13T22:27:00.696755 #12500] INFO -- : worker=3 产生的pid=12500\nI, [2016-05-13T22:27:00.802486 #12492] INFO -- : 刷新Gem列表\nI, [2016-05-13T22:27:00.804209 #12500] INFO -- : 刷新Gem列表\nI, [2016-05-13T22:27:00.807876 #12497] INFO -- : 刷新Gem列表\nI, [2016-05-13T22:27:00.811879 #12495] INFO -- : 刷新Gem列表\nI, [2016-05-13T22:27:10.403242 #12500] INFO -- : worker=3 就绪\nI, [2016-05-13T22:27:10.404469 #12497] INFO -- : worker=2 就绪\nI, [2016-05-13T22:27:10.406947 #12495] INFO -- : worker=1 就绪\nI, [2016-05-13T22:27:10.407474 #12492] INFO -- : worker=0 就绪\n/var/log/nginx/error.log:\n2016/05/13 21:00:18 [error] 31654#0: *1 从上游读取响应头时超时 (110: 连接超时),客户端: 148.75.53.23,服务器: codepajamas.com,请求: \"GET / HTTP/1.1\",上游: \"http://unix:/var/run/unicorn.sock/\",主机: \"codepajamas.com\"\n2016/05/13 21:05:33 [error] 31654#0: *5 从上游读取响应头时超时 (110: 连接超时),客户端: 148.75.53.23,服务器: codepajamas.com,请求: \"GET / HTTP/1.1\",上游: \"http://unix:/var/run/unicorn.sock/\",主机: \"codepajamas.com\"\n2016/05/13 21:19:52 [error] 31654#0: *8 从上游读取响应头时超时 (110: 连接超时),客户端: 180.76.15.29,服务器: codepajamas.com,请求: \"GET / HTTP/1.1\",上游: \"http://unix:/var/run/unicorn.sock/\",主机: \"www.codepajamas.com\"\n2016/05/13 21:21:40 [error] 31654#0: *12 从上游读取响应头时超时 (110: 连接超时),客户端: 148.75.53.23,服务器: codepajamas.com,请求: \"GET / HTTP/1.1\",上游: \"http://unix:/var/run/unicorn.sock/\",主机: \"codepajamas.com\"\n2016/05/13 21:30:33 [error] 31654#0: *16 从上游读取响应头时超时 (110: 连接超时),客户端: 148.75.53.23,服务器: codepajamas.com,请求: \"GET / HTTP/1.1\",上游: \"http://unix:/var/run/unicorn.sock/\",主机: \"codepajamas.com\"\n/home/rails/rails_project/current/log/production.log:\n(空)\n/etc/unicorn.conf:\nlisten \"unix:/var/run/unicorn.sock\"\nworker_processes 4\nuser \"rails\"\nworking_directory \"/home/rails/rails_project/current\"\npid \"/var/run/unicorn.pid\"\nstderr_path \"/var/log/unicorn/unicorn.log\"\nstdout_path \"/var/log/unicorn/unicorn.log\"\n/etc/nginx/nginx.conf:\nuser www-data;\nworker_processes 4;\npid /run/nginx.pid;\nevents {\n worker_connections 768;\n}\nhttp {\n sendfile on;\n tcp_nopush on;\n tcp_nodelay on;\n keepalive_timeout 65;\n types_hash_max_size 2048;\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n access_log /var/log/nginx/access.log;\n error_log /var/log/nginx/error.log;\n gzip on;\n gzip_disable \"msie6\";\n text/xml application/xml application/xml+rss text/javascript;\n include /etc/nginx/conf.d/*.conf;\n include /etc/nginx/sites-enabled/*;\n}\n/etc/nginx/sites-available/rails:\nupstream app_server {\n server unix:/var/run/unicorn.sock fail_timeout=0;\n}\nserver {\n listen 443 ssl;\n server_name .com www..com;\n ssl_certificate /etc/letsencrypt/live/.com/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/.com/privkey.pem;\n root /home/rails/rails_project/current/public;\n index index.htm index.html;\n ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n ssl_prefer_server_ciphers on;\n ssl_dhparam /etc/ssl/certs/dhparam.pem;\n ssl_ciphers \n ssl_session_timeout 1d;\n ssl_session_cache shared:SSL:50m;\n ssl_stapling on;\n ssl_stapling_verify on;\n add_header Strict-Transport-Security max-age=15768000;\n location / {\n try_files $uri/index.html $uri.html $uri @app;\n }\n location ~* ^.+\\. (jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {\ntry_files $uri @app;\n }\n location @app {\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Host $http_host;\n proxy_redirect off;\n proxy_pass http://app_server;\n }\n location ~ /.well-known {\n allow all;\n root /usr/share/nginx/html;\n }\n}\nserver {\n # 重定向HTTP到HTTPS\n listen 80;\n server_name .com www..com;\n return 301 https://$host$request_uri;\n}\n非常感谢您的帮助。

0
0 Comments

根据上述内容,我们可以整理出如下的文章:

最近在进行开发过程中,遇到了一个很头疼的问题,网页一直报错“net::ERR_TOO_MANY_REDIRECTS”,经过一番调查,我发现是由于我强制使用HTTPS导致了某种重定向循环。幸运的是,问题的解决方法也很简单,我只需要在config/environments/production.rb文件中将一行代码注释掉即可。具体代码如下:

# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true

这行代码默认是被注释掉的,但是我可能在某个时候取消了注释。所以,当我们遇到之前正常工作的功能突然出现问题时,一定要检查一下之前的改动,可以使用git diff命令查看所有的改动。经过调查发现,Rails应用和Nginx都在尝试强制使用SSL,这可能导致了某种重定向循环,但具体原因还不确定。我在解决问题的过程中参考了以下几篇帖子,希望对其他人也有所帮助:

- Why am I getting infinite redirect loop with force_ssl in my Rails app?

- Nginx configuration leads to endless redirect loop

希望这篇文章对遇到类似问题的开发者有所帮助!

0