我有以下内容docker-compose.yml:
docker-compose.yml
node1: build: ./node links: - redis ports: - "8080" node2: build: ./node links: - redis ports: - "8080" service1: build: ./service links: - redis ports: - "8383" redis: image: redis ports: - "6379" nginx: build: ./nginx links: - node1:node1 - node2:node2 - service1:service1 ports: - "80:80"
执行并运行后,docker ps我得到以下信息:
docker ps
080d9d7dc2e0 dockerworkflow_nginx:latest "nginx -g 'daemon of 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, 443/tcp dockerworkflow_nginx_1 8c25bfdb9d00 dockerworkflow_node1:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33023->8080/tcp dockerworkflow_node1_1 4ae817be2a63 dockerworkflow_service1:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33022->8383/tcp dockerworkflow_service1_1 91ff238fe3f6 dockerworkflow_node2:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33021->8080/tcp dockerworkflow_node2_1 fe0c7e02c860 redis:latest "/entrypoint.sh redi 6 minutes ago Up 6 minutes 0.0.0.0:33020->6379/tcp dockerworkflow_redis_1
到目前为止,一切似乎都很好。
在nginx.conf我使用如下所示:
nginx.conf
worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location / { proxy_pass http://node1; } location /a/ { proxy_pass http://node2; } location /b/ { proxy_pass http://service1; } } }
所有这些实际上应该做的是:
如果我输入,http://{host-ip}/则node1容器将转发请求。
http://{host-ip}/
node1
如果我输入,http://{host-ip}/a/则node2容器将转发请求。
http://{host-ip}/a/
node2
如果我输入,http://{host-ip}/b/则service1容器将转发请求。
http://{host-ip}/b/
service1
现在,502 Bad Gateway如果尝试任何操作,我都会得到帮助。
502 Bad Gateway
我能够找出解决方案,结果发现它是愚蠢的,没有出现在任何日志中,我很难理解。
以下是更新的nginx.conf文件。
worker_processes 4; events { worker_connections 1024; } http { upstream node_app { server node1:8080; } upstream service_app { server service1:8383; } server { listen 80; location / { proxy_pass http://node_app/; include /etc/nginx/proxy_params; } location /a/ { proxy_pass http://node_app/; include /etc/nginx/proxy_params; } location /b/ { proxy_pass http://service_app/; include /etc/nginx/proxy_params; } } }
不知道此时是否需要包含,但是指令结尾/处的结尾proxy_pass似乎在一天结束时就成功了。
/
proxy_pass