Docker + Nginx:获取proxy_pass工作

我遇到了一个问题,试图让Nginx代理到另一个也在Docker中运行的服务器的path。

为了说明,我使用Nexus服务器作为例子。

这是我第一次尝试…

docker-compose.yml : –

 version: '2' services: nexus: image: "sonatype/nexus3" ports: - "8081:8081" volumes: - ./nexus:/nexus-data nginx: image: "nginx" ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

nginx.conf : –

 worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location /nexus/ { proxy_pass http://localhost:8081/; } } } 

当我打到http://localhost/nexus/ ,我得到502错误的网关与以下日志: –

 nginx_1 | 2017/05/29 02:20:50 [error] 7#7: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: , request: "GET /nexus/ HTTP/1.1", upstream: "http://[::1]:8081/", host: "localhost" nginx_1 | 2017/05/29 02:20:50 [error] 7#7: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: , request: "GET /nexus/ HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "localhost" nginx_1 | 172.18.0.1 - - [29/May/2017:02:20:50 +0000] "GET /nexus/ HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" 

在我第二次尝试…,

docker-compose.yml – 我添加了Nginxconfiguration的links : –

 version: '2' services: nexus: image: "sonatype/nexus3" ports: - "8081:8081" volumes: - ./nexus:/nexus-data nginx: image: "nginx" ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro links: - nexus:nexus 

nginx.conf …而不是使用http://localhost:8081/ ,我使用http://nexus:8081/ : –

 worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location /nexus/ { proxy_pass http://nexus:8081/; } } } 

现在,当我点击http://localhost/nexus/ ,它会正确代理,但Web内容部分呈现。 当检查该页面的HTML源代码时,javascript,stylesheet和image链接指向http://nexus:8081/[path] …因此,404。

我应该改变什么才能使这个工作正常?

非常感谢你。

下面的附加选项是我用过的

 http { server { listen 80; location /{ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; server_name_in_redirect on; proxy_pass http://nexus:8081; } location /nexus/ { proxy_pass http://nexus:8081/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; server_name_in_redirect on; } } 

}

我的解决scheme是在nginxconfiguration中包含“/”path的redirect。 Nexus应用程序将向“/”发送无法工作的资源请求。

然而,这并不理想,并且不能用于服务于多个应用程序的Nginxconfiguration。

文档涵盖了这个configuration,并指出你需要configurationNexus服务于/nexus 。 这将使您能够configurationNginx如下(从文档)减去上面的黑客。

 location /nexus { proxy_pass http://localhost:8081/nexus; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 

我会build议使用该configuration。