多个上游代理失败
Multiple upstream proxies failing
我一直在尝试使用 Docker 设置一组位于 Nginx 容器后面的 Web 应用程序。我正在使用 docker-compose
来管理不同的服务,并且所有单独的 Web 服务容器都可以正常工作,但是当我尝试从 Nginx 容器访问它们时,只有其中一个可以工作,而且它始终是我尝试的第一个使用权。因此,如果我启动容器组并访问 app1,那么我会按预期获得页面,但如果我转到 app2,则会出现 50x 错误。如果我重新启动该组并首先转到 app2,那么我会按预期获得页面,但如果我转到 app1,我现在会收到 50x 错误。我不确定我在 Nginx 配置中做错了什么。如果能提供一些帮助,我们将不胜感激。
这是我的 Nginx 配置:
upstream app1_backend {
server app1:8000;
}
upstream app2_backend {
server app2:8000;
}
server {
listen 80 default_server;
server_name localhost;
charset utf-8;
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /static {
alias /static;
}
location /app1/ {
proxy_pass http://app1_backend/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /app2/ {
proxy_pass http://app2_backend/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我又可以在 http://app1:8000/
和 http://app2:8000/
正确访问各个应用程序了。
我发现我做错了什么。我有 server_name localhost;
。将其更改为 server_name _;
解决了此问题。
我一直在尝试使用 Docker 设置一组位于 Nginx 容器后面的 Web 应用程序。我正在使用 docker-compose
来管理不同的服务,并且所有单独的 Web 服务容器都可以正常工作,但是当我尝试从 Nginx 容器访问它们时,只有其中一个可以工作,而且它始终是我尝试的第一个使用权。因此,如果我启动容器组并访问 app1,那么我会按预期获得页面,但如果我转到 app2,则会出现 50x 错误。如果我重新启动该组并首先转到 app2,那么我会按预期获得页面,但如果我转到 app1,我现在会收到 50x 错误。我不确定我在 Nginx 配置中做错了什么。如果能提供一些帮助,我们将不胜感激。
这是我的 Nginx 配置:
upstream app1_backend {
server app1:8000;
}
upstream app2_backend {
server app2:8000;
}
server {
listen 80 default_server;
server_name localhost;
charset utf-8;
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /static {
alias /static;
}
location /app1/ {
proxy_pass http://app1_backend/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /app2/ {
proxy_pass http://app2_backend/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我又可以在 http://app1:8000/
和 http://app2:8000/
正确访问各个应用程序了。
我发现我做错了什么。我有 server_name localhost;
。将其更改为 server_name _;
解决了此问题。