Я использую докер для создания нескольких контейнеров и пытаюсь перенаправить вызовы, поступающие на мой веб-сайт, в соответствующий контейнер. например, если кто-то попытается перейти на 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 вашему клиенту.
Я рекомендую вам настроить блок местоположения
для всех ваших целей 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;
}