Итак, я просмотрел все образцы конфигурации, которые смог найти, но каждый раз, когда я пытаюсь просмотреть страницу, требующую 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;
}
}
Вот конфигурация без SSL
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;
}
}
Сообщите мне, есть ли дополнительная информация, которую я могу предоставить для диагностики проблемы.
Похоже, ваше приложение не может обнаружить, что оно работает по https, и снова и снова перенаправляет на https URL.
Обычно https определяется на основе HTTPS
переменная окружения, а пассажирский модуль для nginx позволяет установить ее с помощью пассажир_set_cgi_param директива. Добавление чего-то вроде
passenger_set_cgi_param HTTPS on;
в блок https server {} должно помочь.
Я думаю, что proxy_set_header директивы должны быть помещены в расположение разделы.
Попробуйте использовать:
...
location / {
# needed for SSL
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Url-Scheme $scheme;
proxy_max_temp_file_size 0;
# Each of those lines may cause an infinate redirect loop
#proxy_set_header X-FORWARDED_PROTO https;
#proxy_set_header X-Forwarded-Proto $scheme;
# This two may break the redirection when on ssl
#proxy_set_header Host $http_host;
#proxy_redirect off;
...
По крайней мере, это работает для меня в довольно сложной для настройки среде с haproxy перед nginx.
Надеюсь, это тебе поможет.