Nginx显示欢迎页而非Web应用,请求排查问题
针对你遇到的问题,从配置和环境层面逐一排查可能的原因:
1. 存在优先级更高的默认Server块
Nginx会优先匹配带有default_server标识的server块,如果系统中还有其他默认配置(比如Nginx安装时自带的/etc/nginx/conf.d/default.conf或/etc/nginx/sites-enabled/default),且其中的server块包含listen 80 default_server;,就会优先加载那个配置的欢迎页。
检查方法:
执行命令查看所有生效的server块:
nginx -T | grep -A 10 -B 2 "server {"
如果输出中存在其他listen 80且带default_server的server块,就是它在抢占请求。
解决方法:
- 删除或重命名冲突的默认配置文件(比如
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak) - 或者在你的
default.conf的listen指令中添加default_server,明确指定它为默认服务:listen 80 default_server;
2. Nginx配置未生效
修改配置后没有重启或重载Nginx,导致旧的默认配置仍在运行。
检查方法:
先验证配置语法是否正确:
nginx -t
如果输出test is successful,再执行重载命令:
nginx -s reload
或者直接重启Nginx:
systemctl restart nginx
3. 应用根目录权限不足
Nginx运行用户(配置中是nginx)没有读取/app/public目录及文件的权限,导致Nginx无法找到你的应用文件, fallback到默认欢迎页。
检查方法:
查看目录权限:
ls -ld /app/public ls -l /app/public/index.php
检查文件所属用户组是否包含nginx,或者权限是否允许其他用户读取(比如权限为755目录和644文件)。
解决方法:
修改目录和文件权限:
chown -R nginx:nginx /app/public chmod -R 755 /app/public
4. Server_name不匹配
你访问服务器时使用的IP地址或域名,和配置中server_name localhost;不匹配,Nginx找不到对应的server块,就会使用默认的server块返回欢迎页。
检查方法:
比如你用服务器公网IP访问,但配置里只写了localhost,这时候Nginx不会匹配到你的server块。
解决方法:
修改server_name为你实际访问的地址,或者用通配符匹配所有请求:
server_name _; # 匹配所有未指定的域名/IP
5. PHP-FPM服务未正常运行
如果你的应用是PHP项目,PHP-FPM没有启动或监听127.0.0.1:9000,会导致Nginx无法处理PHP请求,可能出现 fallback到默认页的情况(部分环境下会返回默认页而非502错误)。
检查方法:
查看PHP-FPM状态:
systemctl status php-fpm # 不同系统可能是php7.4-fpm、php8.1-fpm等
或者检查端口是否监听:
netstat -tulpn | grep 9000
解决方法:
启动PHP-FPM服务:
systemctl start php-fpm systemctl enable php-fpm # 设置开机自启
内容的提问来源于stack exchange,提问作者Rainheart Galario

