我在同一台服务器上运行 Apache(端口 81)和 NGINX(端口 80)。对于 www.example.com,我在 NGINX 配置文件中有以下内容。
问题是,当在此服务器上启动 Apache 时,对 www.example.com 的所有请求都会发送到端口 81 上的 Apache 服务器。这未在上游配置,并且 www.example.com 也未在本地 Apache 实例中配置,因此到处都是错误。
我不希望这只是本地的,而只是按照上游的定义进行外部的。
当我停止 Apache 时,上游被使用,来自 nginx 的请求将发送到上游定义的服务器,当我再次启动 Apache 时,所有请求都被本地路由到 Apache
那么,如何避免在 Apache 加载时请求转到 Apache,并让 nginx 始终使用定义的上游?
upstream mainserver {
server w1.externalserver.nl;
server w2.externalserver.nl;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://mainserver;
}
}
答案1
我建议在 nginx 配置中定义端口号:
upstream mainserver {
server w1.externalserver.nl:81;
server w2.externalserver.nl:81;
}
并检查 Apache 是否侦听了正确的端口。对于 Ubuntu 安装:apache2.conf或者端口配置文件(也检查此文件,它可能包含重写设置):
Listen 127.0.0.1:81
更新 1
+-------------+
| server 1 | <------- http request :80
| |
| nginx ----+ | -------> redirect to server 2 (You want)
| | |
| Apache <--+ | internal redirect to local Apache (problem place)
+-------------+
1)。在服务器 1 上运行 Apache 和 nginx。
curl -I http://example.com:80
检查响应中的“服务器”字段。如果存在 Apache - 仔细检查其所有配置:apache2.conf、ports.conf、虚拟主机配置 - 某处提到端口 80 和 Apache“重写”nginx“监听”。
2). 尝试proxy_pass http://mainserver;
——proxy_pass mainserver;
无需协议。