我有一个docker化的NodeJS应用程序,我有一个在Docker容器中的NodeJS进程之间负载平衡的NGINX docker容器。 我能够成功地蜷缩两个NodeJs服务器,但是NGINX找不到上游服务器。
这里是nginx的conf:
upstream app { least_conn; # Use Least Connections strategy server 127.0.0.1:3000; # NodeJS Server 1 server 127.0.0.1:3001; # NodeJS Server 2 } server { listen 80; server_name example.com; access_log /var/log/nginx/example.com-access.log; error_log /var/log/nginx/example.com-error.log error; # Browser and robot always look for these # Turn off logging for them location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; } # Handle static files so they are not proxied to NodeJS # You may want to also hand these requests to other upstream # servers, as you can define more than one! location ~* (images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { root /usr/share/nginx/html; } # pass the request to the node.js server # with some correct headers for proxy-awareness location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://app/; proxy_redirect off; # Handle Web Socket connections proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # Proxy requests to the mobile api to the mobile api servers (old version of Android App uses m.goodrx.com URLs) location /mobile-api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://www.goodrx.com/mobile-api; proxy_redirect off; # Handle Web Socket connections proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
然后我启动节点容器绑定端口3000和3001和nginx容器绑定端口80.当curl127.0.0.1:80我得到一个错误的请求,但curl127.0.0.1:3000和127.0.0.1:3001工程。 任何想法NGINX代理可能会出错?
127.0.0.1或localhost指向nginx容器。 你可以在这里查看我的答案,但基本上你需要使用--add-host docker:<IP ADDRESS>
来运行nginx容器,然后改变你的nginx配置:
upstream app { least_conn; # Use Least Connections strategy server docker:3000; # NodeJS server 1 server docker:3001; # NodeJS server 2 }