Переадресация обратного прокси не работает должным образом.

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

У меня есть VPS, на котором я разместил инстанс Appwrite. У меня также есть домен, связанный с сервером, и я хочу, чтобы поведение было таким: когда пользователь обращается только к базовому URL, его должно перенаправлять, но если пользователь обращается к базовому URL + /appwrite, например example.com/appwrite, то пользователь должен видеть инстанс Appwrite.

Вот моя текущая конфигурация в /sites-enabled/:

server {
listen 443 ssl;
ssl_certificate /etc/ssl/example.com_ssl_certificate.cer;
ssl_certificate_key /etc/ssl/example_private_key.key;
server_name example.com;

location /appwrite/ {
    proxy_pass http://127.0.0.1:8443/; # Внутренний URL Appwrite
    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;

    rewrite ^/appwrite/(.*) /$1 break;
}

location / {
    return 301 https://redirect-url.com;
}
}

Текущее поведение такое: когда я обращаюсь к базовому URL, меня перенаправляют, как я и хотел. Если я обращаюсь к example.com/appwrite, я получаю ошибку 404, и только если я обращаюсь к URL example.com:8443, я вижу инстанс Appwrite.

Что я делаю не так?

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

Для решения вашей проблемы с обратным прокси и перенаправлением давайте внимательно рассмотрим текущую конфигурацию и выясним, почему происходит 404 ошибка при доступе к example.com/appwrite.

Анализ вашей проблемы

Текущая конфигурация:

  1. Серверный блок сконфигурирован для обработки HTTPS-запросов на домен example.com.

  2. Блок location /appwrite/:

    • Настроен для перенаправления запросов на внутренний URL http://127.0.0.1:8443/.
    • Используются необходимые заголовки для прокси.
    • Применена директива rewrite, которая изменяет URL, чтобы убрать из него /appwrite/.
  3. Блок location /:

    • Возвращает HTTP-код 301, перенаправляя все запросы на указанный URL https://redirect-url.com.

Проблема:

  • При попытке доступа к example.com/appwrite вы получаете 404 ошибку.
  • Однако при вводе example.com:8443 всё работает корректно, и приложение Appwrite доступно.

Возможные причины и решение

  1. Ошибка в rewrite директиве:

    Вероятно, вызвана некорректной перезаписью URL. Убедитесь, что путь переписывается корректно и не пропускается требуемое /appwrite.

  2. Точка в proxy_pass:

    При использовании proxy_pass укажите базовый путь без лишней /, чтобы не обрезать часть пути:

    location /appwrite {
       proxy_pass http://127.0.0.1:8443;
       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;
    
       # Удалите или скорректируйте rewrite строку, если она вызывает проблемы
       # rewrite ^/appwrite/(.*) /$1 break;
    }
  3. Проверка корректности пути и разрешений:

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

  4. Кэширование и перезапуск:

    Не забудьте перезапустить Nginx для применения изменений:

    sudo systemctl restart nginx
  5. Диагностика логов:

    Используйте логи Nginx и Appwrite для диагностики проблемы. Это может направить вас на точную причину ошибки 404.

Заключение

Скорее всего, проблема кроется в неправильно настроенной конфигурации пути или переписанной строке. Следуя приведённым шагам, вы должны устранить проблему и обеспечить корректный доступ к Appwrite по адресу example.com/appwrite, сохранив перенаправление для других базовых URL.

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

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