Я запускаю приложение rails на экземпляре AWS EC2 с Nginx 1.4.6, действующим как обратный прокси и обслуживающим сертификаты SSL.
Я почти уверен, что моя проблема связана с моей конфигурацией Nginx. Вот:
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 перемещено навсегда?
Большое спасибо, дайте мне знать, будет ли полезна дополнительная информация.
Ваша конфигурация nginx не показывает никаких перенаправлений на порт 443, и вы утверждаете, что не имеете балансировщика нагрузки перед nginx, поэтому единственное другое место, откуда может происходить перенаправление, это ... ваше приложение.
Я вижу, что вы запускаете приложение по https, но не сказали об этом Rails. В частности, отсутствует ваша конфигурация nginx:
proxy_set_header X-Forwarded-Proto $scheme;
Я подозреваю, что ваше приложение знает свой предполагаемый URL-адрес и пытается перенаправить на него, поскольку URL-адрес, который, по его мнению, поступил, не является каноническим.
Добавьте это и посмотрите, прекратятся ли перенаправления.