Я использую докер для создания нескольких контейнеров и пытаюсь перенаправить вызовы, поступающие на мой сайт, в соответствующий контейнер. например, если кто-то пытается зайти в http://wavenapp.com/bot/test1/webhook тогда его запрос будет перенаправлен на http: // test1: 1337 / webhook
Я пробовал следующий код
server {
listen 80;
server_name wavenapp.com;
location ~ ^/bot/(.*) {
proxy_pass http://$1:1337;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
но он не работает, я не очень хорошо разбираюсь в nginx и буду признателен за любую помощь, которую я могу получить. Спасибо.
То, что вы пытаетесь сделать, очень опасно. Позволяя пользователю указать proxy_pass
целевой сервер - это открытая дыра в безопасности, ожидающая злоупотреблений. Например, кто-то может запросить http://wavenapp.com/bot/www.facebook.com
, и ваш сервер с радостью проксирует главную страницу Facebook вашему клиенту.
Я рекомендую вам настроить location
блок для всех ваших proxy_pass
цели и жестко запрограммировать proxy_pass
целевой сервер.
location ~ ^/bot/test1/(.*) {
proxy_pass http://test1:1337;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxuy_cache_bypass $http_upgrade;
}