根据 url nginx 重定向到不同的本地主机

根据 url nginx 重定向到不同的本地主机

我正在使用 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;
}

相关内容