Неудачные HTTPS-запросы к серверу NGINX

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

Я пытаюсь настроить Https для моего сервера на Ubuntu, используя Nginx. Я запускаю приложение на localhost и использую обратный прокси. Это мой первый опыт работы с Linux и nginx. Мой https-запрос терпит неудачу каждый раз. Я постараюсь включить как можно больше информации о сервере:

Я назначил доменное имя своему сайту и настроил SSL-сертификаты с помощью certbot.

Когда я делаю запрос с использованием http, он успешен:
curl-запрос к http-порту

Однако https-запросы всегда неудачны:
curl-запрос к https-порту

Оба порта 443 и 80 активны и слушают:
активные порты

В целях упрощения отладки я настроил nginx, чтобы перенаправлять http-запросы (порт 80) на https (порт 443). Это значит, что теперь запросы к моему http также не удались. Это текущий файл конфигурации моего сайта:
nginx конфигурационный файл

Ниже приведен фрагмент журнала отладки nginx после того, как я сделал https-запрос:

2024/12/28 18:27:40 [debug] 21424#21424: *207 http script copy: "https://"
2024/12/28 18:27:40 [debug] 21424#21424: *207 http script var: "chatbot.sweatsupport.site"
2024/12/28 18:27:40 [debug] 21424#21424: *207 http script var: "/ws/socket.io/?EIO=4&transport=polling&t=PGEXYJx"
2024/12/28 18:27:40 [debug] 21424#21424: *207 http finalize request: 301, "/ws/socket.io/?EIO=4&transport=polling&t=PGEXYJx" a:1, c:1
2024/12/28 18:27:40 [debug] 21424#21424: *207 http special response: 301, "/ws/socket.io/?EIO=4&transport=polling&t=PGEXYJx"
2024/12/28 18:27:40 [debug] 21424#21424: *207 http set discard body
2024/12/28 18:27:40 [debug] 21424#21424: *207 HTTP/1.1 301 Moved Permanently
Server: nginx/1.24.0 (Ubuntu)
Date: Sat, 28 Dec 2024 18:27:40 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://chatbot.sweatsupport.site/ws/socket.io/?EIO=4&transport=polling&t=PGEXYJx

Я интерпретировал из журнала, что делается http-ответ 301. Кажется, нет никаких логов upstream, показывающих какие-либо запросы к localhost:8000. Я пытаюсь понять лог, но это приводит к еще большему замешательству, поэтому не буду упомянать об этом.

Я застрял с этой ошибкой уже 3 дня и просматривал большинство форумов, которые мог, но безрезультатно. Пожалуйста, дайте знать, если вам нужна дополнительная информация. Я был бы признателен за любой совет.

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

Уважаемый пользователь,

Настройка HTTPS на сервере Ubuntu с использованием NGINX и работа с обратным прокси может быть сложной задачей, особенно если это ваш первый опыт работы с Linux и NGINX. Я постараюсь помочь вам разобраться в проблеме, исходя из предоставленной информации.

Шаги проверки конфигурации и потенциальные решения

  1. Проверка конфигурации SSL-технологии

    Убедитесь, что сертификаты SSL верно установлены. Обычно Certbot автоматически настраивает конфигурацию NGINX, но если вы вносили вручную изменения, убедитесь, что файл конфигурации NGINX содержит правильные директивы ssl_certificate и ssl_certificate_key. Откройте конфигурацию с помощью команды:

    sudo nano /etc/nginx/sites-available/default

    Убедитесь, что используются актуальные пути к сертификатам.

  2. Проверка конфигурации редиректов

    Вы упомянули, что настроили редирект с HTTP (порт 80) на HTTPS (порт 443). Это может вызвать конфликт, если конфигурация не настроена корректно. Убедитесь, что ваш редирект настраивается следующим образом:

    server {
       listen 80;
       server_name yourdomain.com;
       return 301 https://$server_name$request_uri;
    }
  3. Анализ логов NGINX

    Из предоставленных логов видно, что запрос получает ответ 301 (перемещение навсегда), что говорит о правильной работе редиректа. Однако отсутствие логов о запросах к локалхосту может указывать на то, что запросы не доходят до приложения. Убедитесь, что приложение работает на localhost:8000 и принимает входящие соединения.

  4. Проверка конфигурации сервера обратного прокси

    Ваш NGINX должен уметь проксировать HTTPS-запросы к вашему приложению на локальной машине. Пример настройки может выглядеть следующим образом:

    server {
       listen 443 ssl;
       server_name yourdomain.com;
    
       ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
       location / {
           proxy_pass http://localhost:8000;
           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;
       }
    }
  5. Дополнительные рекомендации

    • Удостоверьтесь, что ваш брандмауэр настроен для разрешения трафика на портах 80 и 443.
    • Перезапустите NGINX после внесения изменений с помощью команды:
      sudo systemctl restart nginx
    • Проверьте, нет ли в системе лишних конфигурационных файлов NGINX, которые могут влиять на общий результат.

Если после выполнения вышеуказанных шагов проблема остаётся актуальной, рекомендуем обратиться к более детальному анализу логов как NGINX, так и вашего приложения.

С уважением,
Ваша техническая поддержка.

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

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