我正在使用 docker 创建多个容器,并尝试将对我网站的调用重定向到相关容器。例如,如果有人试图访问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,如果能得到任何帮助,我将不胜感激。谢谢。
答案1
您要做的事情非常危险。让用户指定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;
}