使用Nginx和Docker的Proxy_pass

d5vmydt9  于 2023-05-06  发布在  Nginx
关注(0)|答案(2)|浏览(315)

我有一个简单的任务与nginx,但我不能解决它:
我有一个域example.com,它指向本地服务器192.168.1.150,它在docker中运行nginx。
但是我有另一个容器,“myapp”运行在端口8080上,我想传递这个位置-从“https://192.168.1.150/myapp”和“https://example.com/myapp”到“http://192.168.1.150:8080”,这是http唯一的,我想通过nginx建立一个安全的连接。

解决问题

目前,如果我请求https://192.168.1.150/myapp,它会导航到https://192.168.1.150/login,但目标应该是https://192.168.1.150/myapp/login。虽然URL“更改”成功,但nginx响应HTTP 404;
在nginx.conf中查看我的位置设置:

location /myapp {
        proxy_pass         http://192.168.1.150:8080;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $http_host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
}

SSL

顺便说一句我已经设置了从HTTP重定向的SSL,用一个简单的位置“/test”测试,它返回纯文本“OK”,看起来很好。
如果这个问题不能像这样解决,我也可以将它与另一台服务器一起使用,并侦听443以外的另一个端口。(尝试,结果相同)
任何帮助将不胜感激!先谢谢你了。

okxuctiv

okxuctiv1#

试试这个,也许这就是你需要的:
proxy_pass http://myapp;

zkure5ic

zkure5ic2#

回答我自己的问题:我不得不重写URI以正确重定向。我没有合适的词在网上找到信息,但像“保存”这样的关键字有助于找到例子。
解决方案是使用nginx的rewrite模块,并编写一个'myapp'部分的替换:rewrite ^/myapp(.*) $1? break; .
关于ngx_http_rewrite_module.html的更多信息并搜索'replacement'。
所以目前我的工作配置是一个简单的Python http.server:

location /myapp/ {
    rewrite ^/myapp(.*) $1? break;
    proxy_pass          http://myapp$is_args$args;
    proxy_set_header    Upgrade $http_upgrade;
    proxy_set_header    Connection keep-alive;
    proxy_set_header    Host $http_host$request_uri;
    proxy_cache_bypa    $http_upgrade;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_f>
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_set_header    X-Real-IP $remote_addr;
}

其他重定向到Web应用程序和服务器不起作用,但我的问题得到了解决。
我也遇到了没有尾随斜杠的问题,比如example.com/myapp,nginx丢弃了HTTP 500,我用这个克服了这个问题:

location ~ ^/myapp$ {
    return 301 $request_uri/;
}

谢谢你的帮助!

相关问题