Подтвердить что ты не робот

Конфигурация 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;
  }
}

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

4b9b3361

Ответ 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