Проксирование запросов в nginx с помощью proxy_pass

За проксирование запросов отвечает модуль ngx_http_proxy_module, именно он реализует всю функциональность. Для начала рассмотрим случаи, когда может возникать необходимость проксировать запросы:

  • у вас некий сервис в локальной сети, который Вы не хотите выставлять наружу, но хотите предоставить к нему доступ для внешних пользователей. Поднимаете nginx, который смотрит в Интернет и принимает входящие запросы, и проксирует их сервису;
  • популярный вариант - организовать доступ к серверу synology по https из браузера

  • еще один частый случай - перенести функциональность с нагруженного сервера на менее нагруженный, например, /forum. Либо перенести всю статику, наример, картинки или загружаемые пользователем документы на внешний ресурс, сетевую папку да и вообще куда угодно и просто проксировать запросы к этому ресурсу.
Кстати говоря, последний вариант часто применим к платформе bitrix и сайтам, построенным на БУС. Из недавнего личного опыта могу сказать, что мы сделали форму подачи заявки на react и реализовали ее в микросервисной архитектуре. Вынесли ее на отдельный сервер и просто проксировали запросы к старой форме заявки на этот сервер.

Настройка proxy_pass в nginx

Рассмотрим самый простой пример. Есть 2 сервера: старый - 192.168.0.108 и новый - 192.168.0.88, необходимо проксировать все запросы к каталогу /personal/checkout/ на старом сервере на новый /.
Делается это очень просто: добавляем новую секцию location в nginx

location ~ /personal/checkout/ {
    proxy_pass http://192.168.0.108;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
}

Рестарт nginx, чтобы новый конфиг вступил в силу

systemctl stop nginx
systemctl start nginx

Теперь, если мы зайдем на в браузере по адресу http://192.168.0.108/personal/checkout/, то увидим перед собой то, что находится на 192.168.0.88, т.е. все корректно отработало.

Если у Вас на новом сервере ничего нет, то можно обратиться к логам nginx

92.###.###.###  - - [19/Jan/2018:15:15:40 +0300] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "92.###.###.###"

Особенности приложения react

Если Вы проксируете запросы к сервису, который собран на react, Вы можете столкнуться с проблемой, когда после проксирования не отображаются css. Это связано с конфигурацией Вашего react или node. Должно быть примерно так:
app.use(express.static(__dirname + '/public'))

И вуаля, пусть к css

href="/css/style.css"

Обратите внимание, без ведущего слэша перед public пусть к css будет таким

href="css/style.css"