Как перенаправить на адрес, например, localhost:port/path1/path2/path3

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

Прежде всего, я немного новичок в Nginx.

Я пытаюсь развернуть приложение на сервере и хочу, чтобы Nginx перенаправлял на него. Моя ситуация такая:

  • Если пользователи вводят [publicIP]:[appPort]/path1/path2/path3, это работает.
  • Очевидно, это совсем не удобно, поэтому я хочу добиться того, чтобы пользователь вводил только mysubdomain.domain.com и перенаправлялся на [publicIP]:[appPort]/path1/path2/path3, но при этом в браузере отображался только mysubdomain.domain.com, а не полный путь (я знаю, что DNS должен быть разрешён у моего хостинг-партнера, и это уже выполнено. mysubdomain.domain.com уже “указывает” на [publicIP] и работает).
  • Я пробовал множество конфигураций, но безуспешно:

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

location / {
    proxy_pass http://publicIP:appPort/path1/path2/path3;
    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_redirect http://localhost/ http://localhost:appPort/;
}

}

Что я могу сделать?

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

Чтобы настроить перенаправление в Nginx таким образом, чтобы пользователи вводили только mysubdomain.domain.com и это адрес перенаправлялся на [publicIP]:[appPort]/path1/path2/path3, но браузер при этом показывал только mysubdomain.domain.com, необходимо правильно сконфигурировать Nginx, используя проксирование. В данном случае важным моментом является использование директивы proxy_pass, которая позволяет пересылать запросы от Nginx к целевому серверу. Рассмотрим необходимую конфигурацию более подробно.

Конфигурация Nginx

  1. Убедитесь, что DNS уже направляет mysubdomain.domain.com на ваш публичный IP-адрес.

    • Это у вас уже настроено, как вы заметили, так что можно перейти непосредственно к конфигурации Nginx.
  2. Основные настройки Nginx.

    • Создайте или отредактируйте серверный блок конфигурации для вашего поддомена.
    • Убедитесь, что Nginx слушает правильный порт (чаще всего это порт 80 для HTTP или 443 для HTTPS, если используется SSL).
server {
    listen 80;
    server_name mysubdomain.domain.com;

    location / {
        proxy_pass http://[publicIP]:[appPort]/path1/path2/path3;
        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_redirect не нужна для сохранения начального адреса в строке браузера
    }
}
  1. Проверка конфигурации.
    • После внесения изменений в конфигурационный файл Nginx, проверьте его на наличие ошибок с помощью команды:
      sudo nginx -t
    • Если конфигурационный файл корректен, перезапустите Nginx, чтобы изменения вступили в силу:
      sudo systemctl restart nginx

Дальнейшие действия

  1. SSL/TLS (опционально): Если вы хотите использовать HTTPS для безопасности, рекомендуется настроить SSL/TLS сертификаты. Можно использовать бесплатный сертификат от Let’s Encrypt и инструмент Certbot для его автоматической установки.

  2. Кэширование и производительность: Рассмотрите возможность настройки кэша на стороне Nginx, чтобы увеличить производительность вашего приложения.

  3. Мониторинг и логирование: Настройте логи доступа и ошибок Nginx для мониторинга работы сервера и отладки возможных проблем.

Заключение

Настройка проксирования в Nginx позволяет скрыть сложные пути и порты от пользователей, отображая только дружелюбный адрес вашего поддомена. Эти изменения не только улучшают пользовательский опыт, но и обеспечивают дополнительный уровень управления над входящими запросами. Убедитесь, что конфигурационный файл проверен и сервер Nginx перезапущен после внесения изменений, чтобы они вступили в силу.

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

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