Вопрос или проблема
Прежде всего, я немного новичок в 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
-
Убедитесь, что DNS уже направляет
mysubdomain.domain.com
на ваш публичный IP-адрес.- Это у вас уже настроено, как вы заметили, так что можно перейти непосредственно к конфигурации Nginx.
-
Основные настройки 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 не нужна для сохранения начального адреса в строке браузера
}
}
- Проверка конфигурации.
- После внесения изменений в конфигурационный файл Nginx, проверьте его на наличие ошибок с помощью команды:
sudo nginx -t
- Если конфигурационный файл корректен, перезапустите Nginx, чтобы изменения вступили в силу:
sudo systemctl restart nginx
- После внесения изменений в конфигурационный файл Nginx, проверьте его на наличие ошибок с помощью команды:
Дальнейшие действия
-
SSL/TLS (опционально): Если вы хотите использовать HTTPS для безопасности, рекомендуется настроить SSL/TLS сертификаты. Можно использовать бесплатный сертификат от Let’s Encrypt и инструмент Certbot для его автоматической установки.
-
Кэширование и производительность: Рассмотрите возможность настройки кэша на стороне Nginx, чтобы увеличить производительность вашего приложения.
-
Мониторинг и логирование: Настройте логи доступа и ошибок Nginx для мониторинга работы сервера и отладки возможных проблем.
Заключение
Настройка проксирования в Nginx позволяет скрыть сложные пути и порты от пользователей, отображая только дружелюбный адрес вашего поддомена. Эти изменения не только улучшают пользовательский опыт, но и обеспечивают дополнительный уровень управления над входящими запросами. Убедитесь, что конфигурационный файл проверен и сервер Nginx перезапущен после внесения изменений, чтобы они вступили в силу.