nginx docker proxy_path 到服务器中的另一个 docker

nginx docker proxy_path to an other docker in the server

我在 y 服务器上运行了这两个 dockers:

docker-registry:5000/library/nginx:1.7.10.1 哪些端口是 443/tcp, 0.0.0.0:3010->80/tcp

docker-registry:5000/library/java:8-jre哪些端口是0.0.0.0:9090->8080/tcp

我想做的是将所有以 /api/ 开头的 Nginx 服务器请求响应到 java docker。所以,我为我的 Nginx docker 使用了一个配置文件,如下所示:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /opt/www;
    server_name localhost some_ip_address some_other_ip_address ;
    gzip on;
    gzip_types
        application/octet-stream
        application/atom+xml
        application/x-javascript
        application/javascript
        application/json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/svg+xml
        image/x-icon
        text/css
        text/plain
        text/x-component;

    location ~ ^/(api)/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://simorgh-java:8080;
    }
}

但是当我从我的浏览器向我的 Nginx 服务器发送一个请求时,在 URL 中包含 /api/(如 http://path_to_my_server:3010/api/login),我收到 404 Not Found 响应。

我的配置文件有什么问题吗?我基本上使用错误的解决方案吗?我应该怎么做才能解决这个问题?

这样做的原因(有一个通过 nginx 服务器到 java 服务器的代理路径)是我只有一个在我的服务器上打开的端口,所有请求都应该通过那个端口接收。

查看它们是否链接在一起,默认情况下它们彼此看不到。

docker inspect <your container> | grep Links

你可以在 nginx 中使用 rewrite

Create Temporary and Permanent Redirects with Nginx