Конфигурация Nginx приводит к бесконечному циклу перенаправления - PullRequest
27 голосов
/ 06 января 2011

Итак, я посмотрел все примеры конфигурации, которые смог найти, и все же каждый раз, когда я пытаюсь просмотреть страницу, требующую 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;
  }
}

Дайте мне знать, если есть какая-либо дополнительная информация, которую я могу дать, чтобы помочь диагностировать проблему.

Ответы [ 9 ]

31 голосов
/ 28 января 2011

Это ваша строка здесь:

  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.

6 голосов
/ 13 августа 2012

Я обнаружил, что это была строка

 proxy_set_header  Host $http_host;

, которую следует изменить на

 proxy_set_header  Host $host;

Согласно документации nginx с помощью '$ http_host youПередаешь "неизменный заголовок запроса".

5 голосов
/ 06 января 2011

Вы пытались использовать "X-Forwarded-Proto" вместо X_FORWARDED_PROTO?

Раньше у меня была проблема с этим заголовком, он не вызывал перенаправлений, но изменение этого заголовка устранило его для меня.

4 голосов
/ 13 мая 2011

Поскольку в разделах ssl и nonssl найден оператор перезаписи

location /blog {
  rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}

Где находится раздел сервера для blog..com ??Может ли это быть источником проблемы?

3 голосов
/ 23 апреля 2014

У меня была похожая проблема для моего приложения 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;
    }
1 голос
/ 18 июня 2014

Для тех, кто отчаянно ищет, почему их собственное облако продолжает делать цикл перенаправления, несмотря на наличие хорошего файла конфигурации, я нашел, почему он не работает.

Моя конфигурация: nginx + php-fpm +mysql на свежем centos 6.5

при установке php-fpm и nginx, разрешение по умолчанию для / var / lib / php / session / является root: apache

php-fpm через nginx store php sessionздесь, если у nginx не было авторизации для записи, он с треском проваливает сеанс входа в систему, что приводит к бесконечному циклу.

Поэтому просто добавьте nginx в группу apache (usermod -a -G apache nginx) или смените владельцаэтой папки.

Хорошего дня.

1 голос
/ 25 июля 2012

В случае, если кто-то еще наткнулся на это, я пытался настроить http и https через один и тот же блок server {}, но добавил только директиву listen 443, полагая, что эта строка подразумевается по умолчанию и подразумевается, чтоэто также слушало бы 80, это не так.Раскомментирование строки «listen 80», чтобы присутствовали обе строки прослушивания, исправило бесконечный цикл.Не знаю, почему он вообще получил бы перенаправление, но это так.

0 голосов
/ 31 мая 2019

Я играл с кучей этих ответов, но у меня ничего не получалось. Тогда я понял, так как я использую Cloudflare, проблема может быть не в сервере, а в Cloudflare. И вот, когда я установил свой SSL на Full (Strict), все работает как надо!

cloudflare ssl

0 голосов
/ 06 ноября 2014

X_FORWARDED_PROTO, как в вашем файле может вызвать ошибки, и это было в моем случае. X-Forwarded-Proto правильно, тогда как дефисы важнее прописных или строчных букв.

Вы можете избежать этих проблем, придерживаясь соглашений;)

см. Также здесь: Пользовательские заголовки HTTP: соглашения об именах и здесь: http://www.ietf.org/rfc/rfc2047.txt

...