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。
- 在MacOS上使用docker作为提供者的stream浪者,无法在容器中挂载目录
- 如何仅在需要时从Dockerregistry中提取,或者“latest”这个词甚至意味着什么?
- Packer实例访问AWS中的私有Dockerregistry
- Dockercomposer php项目找不到/ ping或连接到内部主机名
- Docker部署失败的Elastic Beanstalk
- docker集装箱通信
- Kafkastream应用程序停止与org.apache.kafka.common.errors.TimeoutException
- 如何在Dockerfile中运行plenv / rbenv?
- 如何为Docker容器分配更多的内存?