Nginx proxy pass, настройка проксирования запросов в nginx

Средствами 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