Почему обратный прокси Nginx возвращает статус-код 404?

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

У меня возникла проблема при настройке обратного прокси-сервера Nginx. Все кажется в порядке, но я постоянно получаю ошибку 404.

Я никогда не делал этого раньше и у меня нет опыта с такой конфигурацией.

Я ожидаю, что когда я перейду по адресу custom.domain.com, я увижу содержимое https://frontend.example.com без изменения URI в браузере (скрытая переадресация).

Я настраиваю обратный прокси-сервер Nginx на Coolify. Сервер настроен для перенаправления трафика с моего пользовательского домена custom.domain.com на фронтенд-приложение, которое находится по адресу https://frontend.example.com.

Вот что я сделал:

  1. Создал новый домен custom.domain.com на CloudFlare
  2. Создал CNAME DNS запись для custom.domain.com, указывающую на мой сервер ginx (proxy.example-host.com)
  3. Установил SSL-оригинальный сертификат от Cloudflare для пользовательского домена и добавил его в конфигурацию Nginx.

Сервер Nginx работает отлично, если я посещаю https://proxy.example-host.com, правильно обслуживая фронтенд-приложение. Но когда я пытаюсь получить доступ к custom.domain.com, я получаю ошибку 404 Not Found.

Вот соответствующая часть моего конфигурационного файла:

server {
    listen 80;
    server_name custom.domain.com;

    # Перенаправить HTTP на HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name custom.domain.com;

    ssl_certificate /path/to/cloudflare/origin.pem;
    ssl_certificate_key /path/to/cloudflare/origin.key;

    location / {
        proxy_pass https://frontend.example.com/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_ssl_server_name on;
        proxy_ssl_name frontend.example.com;
        proxy_ssl_verify off;
        proxy_ssl_session_reuse on;
    }
}

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

Ошибки 404, возникающие при настройке обратного прокси-сервера на Nginx, могут быть вызваны множеством факторов. Ваша ситуация, где при доступе к custom.domain.com вы получаете статус ошибки 404, при этом всё отлично работает через proxy.example-host.com, предполагает определенные аспекты, которые необходимо проверить. Давайте детально разберем, почему это может происходить и как исправить ситуацию.

1. Проверка конфигурации Nginx

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

  • Права доступа и маршрутизация:
    Убедитесь, что https://frontend.example.com действительно доступен без дополнительных маршрутов и требует ли он определённые префиксы URI. Если, например, фронтенд приложение ожидает базовый путь /app, то запросы к custom.domain.com будут возвращать 404, если Nginx не перенаправляет их корректно.

  • Проверка proxy_pass:
    Строка proxy_pass https://frontend.example.com/; тормозит запросы к корневой директории. Поэтому, если ваше приложение реагирует на специфические пути, попробуйте изменить конфигурацию:

    location / {
      proxy_pass https://frontend.example.com$request_uri;  
    }

    Это позволит передать весь URI, что может помочь избежать 404-ошибок, если приложение ожидает определённую структуру URL.

2. Параметры CNAME и DNS

Ваша запись CNAME для custom.domain.com должна корректно указывать на proxy.example-host.com. Проверьте:

  • Проверка DNS-записей:
    Используйте инструменты, такие как dig или nslookup, чтобы удостовериться, что DNS-запись настроена правильно и ваше прокси-сервер доступно.

  • Кэширование DNS:
    Иногда изменения DNS могут занять время из-за кэширования. Проверьте, что ваш DNS-кэш обновлен и у вас нет старых записей.

3. Сертификаты SSL

Проблемы с SSL-сертификатами могут также приводить к 404. Так как вы используете сертификаты от Cloudflare, убедитесь, что:

  • Правильные сертификаты:
    Убедитесь, что пути к сертификату и ключу указаны правильно, и что они соответствуют конкретному домену custom.domain.com.

  • Проверка конфигурации HTTPS:
    Убедитесь, что ваш сервер действительно слушает подключения на порту 443 и принимает запросы по HTTPS.

4. Логи Nginx

Одним из самых надежных способов выявить проблемы является анализ логов. Проверьте как error.log, так и access.log вашего Nginx:

  • Ошибка в логах:
    Запросы, возвращающие 404 ошибки, будут записаны здесь, и могут дать подсказку о том, куда именно уходит запрос и что идет не так.

5. Приложение на Frontend

Если ни одна из вышеуказанных проверок не дала результата, возможно, стоит взглянуть на конфигурацию самого фронтенд-приложения:

  • Точки доступа:
    Возможно, приложение ожидает доступ через другие пути или имеет дополнительные настройки маршрутизации, которые нужно учесть в конфигурации Nginx.

Заключение

Ошибка 404 при настройке обратного прокси-сервера Nginx может иметь несколько причин. Вам следует внимательно проверить конфигурацию Nginx, перезапустить сервер после внесения исправлений, проанализировать логи, а также удостовериться, что ваше приложение на frontend.example.com доступно и правильно обрабатывает запросы. Следование вышеуказанным рекомендациям должно помочь вам устранить возникшую проблему и настроить прокси-сервер так, чтобы он успешно предоставлял контент из вашего приложения.

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

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

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