我在AWS EC2实例上运行rails应用程序,使用Nginx 1.4.6充当反向代理并提供SSL证书。
我很确定我的问题是与我的Nginxconfiguration。 这里是:
upstream puma { server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock; } server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl/appname.chained.crt; ssl_certificate_key /etc/nginx/ssl/appname.key; root /home/deploy/apps/appname/current/public; access_log /home/deploy/apps/appname/current/log/nginx.access.log; error_log /home/deploy/apps/appname/current/log/nginx.error.log info; try_files $uri/index.html $uri @puma; location @puma { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://puma; } error_page 500 502 503 504 /500.html; client_max_body_size 10M; keepalive_timeout 10; } server { listen 80; return 301 https://$host$request_uri; }
当我尝试运行curl -v https://appname.co.uk ,curl会返回:
* Rebuilt URL to: https://appname.co.uk/ * Trying 52.27.236.227... * found 187 certificates in /etc/ssl/certs/ca-certificates.crt * found 758 certificates in /etc/ssl/certs * ALPN, offering http/1.1 * SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384 * server certificate verification OK * server certificate status verification SKIPPED * server certificate expiration date OK * server certificate activation date OK * certificate public key: RSA * certificate version: #3 * subject: OU=Domain Control Validated, * start date: Mon, 21 Dec 2015 16:31:38 GMT * expire date: Wed, 21 Dec 2016 16:31:38 GMT * issuer: C=US,ST=Arizona,L=Scottsdale,O=GoDaddy.com\, Inc.,OU=http://certs.godaddy.com/repository/,CN=Go Daddy Secure Certificate Authority - G2 * compression: NULL * ALPN, server did not agree to a protocol > GET / HTTP/1.1 > User-Agent: curl/7.43.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Server: nginx/1.4.6 (Ubuntu) < Date: Sat, 26 Dec 2015 15:51:14 GMT < Content-Type: text/html < Transfer-Encoding: chunked < Connection: keep-alive <
这应该显示我的rails应用程序的主页。 * ALPN, server did not agree to a protocol线是否有意义? 为什么Nginx返回301永久移动?
非常感谢,让我知道如果有更多的信息可以使用。
你的nginxconfiguration不会在端口443上显示任何redirect,并且你声称在nginx之前没有负载平衡器,所以redirect可能来自的另一个地方是你的应用程序。
我看到你正在https上运行应用程序,但是你没有告诉Rails这件事。 特别是,你的nginxconfiguration丢失了:
proxy_set_header X-Forwarded-Proto $scheme;
我怀疑你的应用程序知道它自己的预期的URL,并试图redirect到它,因为它认为来的URL不是规范的。
join这个,看看redirect是否停止。