nginx 调用Docker容器内的API终结点

hivapdat  于 2023-01-20  发布在  Nginx
关注(0)|答案(1)|浏览(175)

我有一个小的express应用程序在一个docker容器中运行。端点可以通过http://localhost:8888/api/run本地访问。docker容器是使用以下命令运行的:

docker run -dp 8888:8888 code-editor

我配置了NGINX来使用location块服务来自docker的响应:
伺服器{

server_name www.baseURL.tech baseURL.tech;
      -------------------CONNECT WITH APP INSIDE DOCKER--------------------
    location /compiler {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8888/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

     -------------------CONNECT WITH MAIN NODE APP--------------------
    location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

被调用的路径是https://baseURL/compiler/api/run,作为来自主网站https://baseURL的ajax请求,但是它返回404。

ndh0cuux

ndh0cuux1#

你已经

location /compiler

这会导致Nginx将整个URL(即compiler/api/run)传递到Express应用程序。您希望它删除compiler部分,最简单的方法是在该位置的末尾添加一个斜线,如下所示

location /compiler/

然后Nginx只会将api/run传递给Express。

相关问题