Цикл перенаправления сервера Nginx после SSL

Вопрос или проблема

У меня были проблемы с настройкой SSL на моем сервере Nginx. После некоторого времени, проведенного за попытками и изучением учебников, я наконец-то смог это сделать.

Когда я попытался получить доступ к серверу Hipchat, я был удивлен сообщением, которое гласит: “страница неправильно перенаправляет”.

Когда я смотрю на вкладку сети в инструментах разработчика, я вижу следующее. Код состояния: 301 перемещено навсегда.

До того, как я настроил SSL, сайт работал. Но после того, как я настроил SSL, он продолжает зацикливаться.

Вот содержимое моего .conf файла, который я разместил в папке /etc/nginx/sites-available.

            # Это DNS имя вашего узла Hipchat
            upstream chat {
                server hipchat.example.nl:80;    
                keepalive 32;
            }

            # Перенаправление HTTP на HTTPS
            server {
                listen         80;
                server_name    hipchat.example.nl;
                return         301 https://$host$request_uri;
            }

            # 
            server {
                listen                  443;
                server_name             hipchat.example.nl;
                ssl_certificate /example.com.chained.crt;
                ssl_certificate_key /example.com.key;
                ssl on;
                ssl_session_cache  builtin:1000  shared:SSL:10m;
                ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
                ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
                ssl_prefer_server_ciphers on;

                location / {
                    proxy_http_version          1.1;
                    proxy_set_header Connection "";
                    proxy_set_header            Host $host;
                    proxy_set_header            X-Real-IP $remote_addr;
                    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header            X-Forwarded-Proto $scheme;
                    proxy_read_timeout          90;
                    proxy_pass                  http://chat;
                }
            }

Это может быть просто ошибкой новичка, так как я никогда раньше ничего подобного не делал, но может кто-то помочь мне решить эту проблему?

редактировать:
Я немного продвинулся (может быть). Но теперь я не могу найти чат.
Сначала я изменил свой proxy pass на http://127.0.0.1:8095;
После этого я перезапустил nginx, и когда я пытаюсь подключиться к сайту, я получаю доступ к стандартной странице Atlassian Crowd. Что странно, потому что я должен попасть на hipchat, который работает, когда я убираю все ссылки на SSL.

Это было исправлено, когда я также сконфигурировал tomcat, указав параметры proxyName, proxyPort, scheme и secure connector в server.xml.

Моя конфигурация Connector выглядит следующим образом:

    <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        enableLookups="false"
        acceptCount="100"
        proxyName="<<your_host_name>>"
        proxyPort="443"
        scheme="https"
        secure="true"/>

Это имя DNS вашего узла Hipchat

            upstream chat {
                server hipchat.example.nl:80;
                keepalive 32;
            }

            # Перенаправление HTTP на HTTPS
            server {
                listen         80;
                server_name    hipchat.example.nl;
                location / {
                return         301 https://$server_name$request_uri;
                }
            }

            #
            server {
                listen                  443 ssl;
                ssl on;
                server_name             hipchat.example.nl;
                client_max_body_size 10m;
                ssl_session_timeout 180m;

                location / {
                    proxy_pass                  http://localhost:8080;
                }
            }

Это было в основном исправлено, когда я изменил proxy pass на localhost и изменил свой коннектор в конфигурации Tomcat.
Вот здесь вы можете прочитать больше об этом, если понадобится руководство

Ответ или решение

Решение проблемы зацикливания редиректов на сервере Nginx после настройки SSL

Введение

Настройка SSL на сервере Nginx может вызвать множество распространённых проблем, одной из которых является зацикливание редиректов. Это явление, как правило, происходит, когда конфигурация сервера неправильно обрабатывает переходы между HTTP и HTTPS. Рассмотрим, как идентифицировать и устранить эту проблему, а также оптимизировать настройки для корректной работы вашего Hipchat сервера.

Анализ конфигурации

Для начала возьмём за основу ваши текущие настройки. Вы показали следующую конфигурацию вашего .conf файла:

upstream chat {
    server hipchat.example.nl:80;
}

server {
    listen 80;
    server_name hipchat.example.nl;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name hipchat.example.nl;
    ssl_certificate /example.com.chained.crt;
    ssl_certificate_key /example.com.key;
    ssl on;

    location / {
        proxy_pass http://localhost:8080;
    }
}

Как видно из этой конфигурации, для переадресации HTTP-запросов на HTTPS вы используете простую настройку return 301. Это хороший подход, однако стоит обратить внимание на несколько моментов.

Потенциальные источники проблем

  1. Неправильные настройки в proxy_pass: Вы изменили proxy_pass на локальный адрес, который должен указывать на работающий сервер приложений. Если этот сервер неправильно настроен, может возникнуть доступ к неверному ресурсу (в вашем случае, это стандартная страница Atlassian Crowd).

  2. Отсутствие полной конфигурации Tomcat: Что вы упомянули о настройках server.xml в Tomcat, является критически важным шагом. При работе через прокси необходимо указывать такие параметры, как proxyName, proxyPort, scheme и secure. Это позволяет Tomcat корректно обрабатывать входящие запросы на HTTPS.

Правильная настройка Tomcat

Вот как можно настроить ваш <Connector> в server.xml:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           enableLookups="false"
           acceptCount="100"
           proxyName="hipchat.example.nl"
           proxyPort="443"
           scheme="https"
           secure="true"/>

Исправление конфигурации Nginx

Помимо правильной настройки Tomcat, вы можете улучшить свою конфигурацию Nginx, изменив некоторые элементы. Рассмотрим изменённый вариант файла конфигурации:

upstream chat {
    server localhost:8080;  # Убедитесь, что ваш сервер приложений работает на этом порту
}

server {
    listen 80;
    server_name hipchat.example.nl;
    location / {
        return 301 https://$server_name$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name hipchat.example.nl;
    ssl_certificate /example.com.chained.crt;
    ssl_certificate_key /example.com.key;

    location / {
        proxy_pass http://chat;  # Используйте определённый upstream
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 90;
    }
}

Заключение

После внесения указанных изменений и корректной настройки Tomcat, вы должны устранить проблему зацикливания редиректов. Если по-прежнему встречаются трудности, проверьте журналы Nginx и Tomcat на предмет ошибок и предупреждений, которые могут помочь в дальнейшей диагностике.

Также убедитесь, что вы используете правильные DNS-настройки и что ваш сервер доступен по указанному адресу. Не лишним будет протестировать функциональность вашего Hipchat сервера после внесения изменений, чтобы убедиться, что всё работает корректно.

Рекомендации по дальнейшим действиям

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

Оцените материал
Добавить комментарий

Капча загружается...