我正在尝试在我的 Centos 7 服务器上启用 Nginx 状态页面。
我从 EPEL 存储库安装了 Nginx,Nginx 内置有状态页面支持:
[root@server ~]# nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module
我添加了一个配置文件 /etc/nginx/conf.d/status.conf:
server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
重启后Nginx找不到状态页面:
[root@server ~]# wget http://localhost/nginx_status
--2017-01-06 17:02:09-- http://localhost/nginx_status
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-01-06 17:02:09 ERROR 404: Not Found.
我在网上找到的每个教程或示例都说这些是我应该采取的步骤。为什么我总是得到 404?
答案1
您的server
块缺少listen
指令:
listen [::]:80;
此指令告诉 nginx 响应该 的 IPv6 连接server
。不幸的是,您忽略了它,并且只响应 IPv4 连接。
但是,由于localhost
解析为 IPv6 地址(实际上,IPv6 是 Internet 上所有内容的默认协议),因此您的请求由server
默认配置中包含的默认块处理,该块是 listen
IPv6 上的支持。
您应该格外小心,确保所有IPv6server
块listen
(强制性的,即使您还没有全局 IPv6)和 IPv4 块(可选,仅当您使用 IPv4 时)均被阻止。
答案2
我看不出您的配置有什么问题,而且它是 404 而不是 403,这意味着它甚至没有读取该配置,所以我将采取的调试步骤是:
- 你重启过 nginx 吗?
- error_log 里有什么内容吗?
- nginx 真的在本地主机上监听吗?在 ip4 和 ip6 上?(
netstat -plnt
) - 尝试使用 wget 并显示 (
wget -SO- http://localhost/nginx_status
) 也许会出现一些内容 - nginx 真的在读取这个配置文件吗?(还有其他地方吗?故意打错字,看看会不会出错)
- 是否有多个 nginx?(这里有点紧张,但奇怪的事情已经发生了)。也许重启不会终止旧进程?
- 删除 server_name 指令并尝试不使用