Конфигурация Nginx приводит к бесконечному циклу перенаправления
Итак, я просмотрел каждую конфигурацию образца, которую я смог найти, и каждый раз, когда я пытаюсь просмотреть страницу, требующую ssl, я попадаю в цикл перенаправления. Я запускаю nginx/0.8.53 и пассажир 3.0.2.
Здесь ssl config
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 config
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;
}
}
Сообщите мне, есть ли дополнительная информация, которую я могу дать, чтобы помочь диагностировать проблему.
Ответы
Ответ 1
Это ваша строка здесь:
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_requirement и ssl_enforcer.
Ответ 2
Вы пытались использовать "X-Forwarded-Proto" вместо X_FORWARDED_PROTO?
Я столкнулся с проблемой с этим заголовком раньше, он не вызывал перенаправления, но изменение этого заголовка исправило это для меня.
Ответ 3
Я обнаружил, что это была строка
proxy_set_header Host $http_host;
Что следует изменить на
proxy_set_header Host $host;
Согласно документации nginx с помощью '$ http_host вы передаете "неизменный заголовок запроса".
Ответ 4
Поскольку у вас есть оператор перезаписи, найденный в разделах ssl и non-ssl
location /blog {
rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}
Где находится раздел сервера для blog..com?? Может ли это быть источником проблемы?
Ответ 5
У меня была аналогичная проблема для моего приложения symfony2, хотя и другая причина: я установил fastcgi_param HTTPS off;
, когда мне, конечно, понадобилось fastcgi_param HTTPS on;
в моей конфигурации 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;
}
Ответ 6
Если кто-то еще наткнулся на это, я пытался настроить как http, так и https через один и тот же серверный блок {}, но только добавил директиву "listen 443", полагая, что "эта строка по умолчанию и подразумевается" означает, что он также выслушал бы и 80, но этого не произошло. Разорушив строку "слушать 80" так, чтобы обе линии прослушивания присутствовали, был исправлен бесконечный цикл. Не знаю, почему он вообще получал бы переадресацию, но это произошло.
Ответ 7
Для тех, кто отчаянно ищет, почему их собственная тема продолжает создавать цикл перенаправления, несмотря на наличие хорошего файла конфигурации, я нашел, почему он не работает.
Моя конфигурация:
nginx + php-fpm + mysql на свежих CentOS 6.5
при установке php-fpm и nginx, разрешение по умолчанию на /var/lib/php/session/is root: apache
php-fpm через nginx хранить php-сессию здесь, если nginx не имеет авторизации для записи, он терпит неудачу, чтобы сохранить сеанс входа в систему, что приводит к бесконечному циклу.
Итак, juste добавьте nginx в группу apache (usermod -a -G apache nginx) или измените право собственности на эту папку.
Хороший день.
Ответ 8
X_FORWARDED_PROTO
, так как в вашем файле могут возникнуть ошибки, и это произошло в моем случае. X-Forwarded-Proto
является правильным, тогда как хипэны более важны, чем прописные или строчные буквы.
Вы можете избежать этих проблем, придерживаясь соглашений;)
см. также здесь: Пользовательские заголовки HTTP: соглашения об именах и здесь: http://www.ietf.org/rfc/rfc2047.txt