В 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 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
Параметр используется во всех возможных конфигурациях, пример представлен на скриншоте.
Здесь в закомментирвоанном виде представлены директивы для перенаправления запросов на порт 9000 к сервису php-fpm.
Читайте о том что делать если на сервере с конфигурацией с proxy_pass стала возникать ошибка с кодом 502.