Средствами Nginx можно настроить различные серверные конфигурации, часто возникает необходимость организовать проксирование, т.е. перенаправление запросов с одного адреса на другой, доменное имя в адресной строке браузера при этом должно оставаться прежним. В Nginx proxy pass является основной директивой, нужной для проксирования всегда, дополнительный функционал реализуется за счет других правил, прописывающихся в том же файле.
Настройка проксирования запросов в nginx с использованием директивы Nginx proxy pass
В примере рассматривается настройка проксирования запросов с subdomain.example.com на https://subdomain.example.ru/suf
На сервере, на котором настраивалось проксирование применяется Apache в качестве бэкенд сервера и Nginx в качестве фронтенд сервера. Проксирование реализовано на уровне фронтенда, т.е. до Apache запросы не доходят.
Содержание конфигурационного файла:
server {
server_name subdomain.example.com;
listen *:80;
proxy_read_timeout 200s;
access_log off;
include static.conf;
location / {
root /var/www/sites/subdomain.example.com;
proxy_pass https://subdomain.example.ru/suf;
proxy_set_header X-Forwarded-Host subdomain.example.com:80;
proxy_set_header X-Forwarded-Server subdomain.example.com;
proxy_set_header X-Forwarded-For https://subdomain.example.ru/suf;
}
}
static.conf здесь — отдельный файл в котором заданы настройки кэширования, также они могут задаваться в любом другом конфиге.
За счет приведенных ниже директив реализуется реверсивное проксирование запросов, это аналог ProxyPassReverse в Apache:
proxy_set_header X-Forwarded-Host subdomain.example.com:80;
proxy_set_header X-Forwarded-Server subdomain.example.com;
proxy_set_header X-Forwarded-For https://subdomain.example.ru/suf;
Добавив конфиг активируем его обычным способом — через создание симлинка
ln -s /etc/nginx/sites-availible/example.com /etc/nginx/sites-enabled
Проверяем конфигурацию веб-сервера
nginx -t
Если ошибок нет — даем команду на перечитывание конфигов
nginx -s reload
Директива nginx proxy redirect
Схожим образом можно настроить в конфигурационном файле nginx редирект с одного адреса на другой.
proxy_redirect https://subdomain.example.ru/suf/ /;
Применяя аналогичный конфигурационный файл, но с раскомментированный директивой proxy_redirect можно получить перенаправление, при этом адрес сайта в адресной строке браузера будет подменяться.
Очень часто используется простое проксирование на IP адрес из приватной сети
location / {
root /var/www/sites/example.com;
proxy_pass https://127.0.0.10;
}
С самой простой реализацией Nginx proxy pass, приведенной выше, запускаются проекты на NodeJS и фреймоворке Express. Изначально они стартуют на localhost и порту 3000