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


В Nginx proxy_pass является основной директивой нужной для проксирования (перенаправления в другие блоки конфигурации) запросов, дополнительный функционал реализуется за счет других правил, прописывающихся в файле виртуального хоста.

Средствами Nginx можно настроить различные серверные конфигурации, во многих из них основой является проксирвоание — перенаправление запросов с одного адреса на другой, с одного имени на другое, с одного порта на другой.



В качестве адреса для проксирования может задаваться доменное имя, ip адрес, комбинация ip адреса и порта.



Рассмотрим два случая:

  • проксирование на другой домен с сохранением запрашиваемого домена в адресной строке
  • проксирование с редиректом (со сменой запрашиваемого домена в адресной строке)

Они довольно специфические, самый базовый вариант использования можно увидеть в статье про запуск на сервере проекта на NodeJS



Настройка проксирования через 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_pass


Директива 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



Параметр используется во всех возможных конфигурациях, пример представлен на скриншоте.

настройка проксирования запросов в nginx


Здесь в закомментирвоанном виде представлены директивы для перенаправления запросов на порт 9000 к сервису php-fpm.

Читайте о том что делать если на сервере с конфигурацией с proxy_pass стала возникать ошибка с кодом 502.

Сказать спасибо