Nginx配置调整请求:如何将根目录从/var/www/html/改回/var/www/?
咱们先定位问题核心:你访问192.168.56.102时显示默认页面,说明Nginx的默认站点配置正在生效,它的根目录指向/var/www/html。大概率是升级PHP过程中,Nginx的默认配置被重置,或者默认站点的优先级盖过了你的自定义站点。
下面是一步步排查和修复的具体操作:
1. 检查并处理Nginx默认站点配置
首先查看默认配置文件的内容,确认它的根目录设置:
cat /etc/nginx/sites-available/default
如果这个文件里的root字段确实是/var/www/html,而且它被软链接到了/etc/nginx/sites-enabled/目录下,那它会优先于你的自定义站点生效(Nginx按字母顺序加载配置,default排在自定义配置前面)。
两种修复选择:
- 推荐:禁用默认站点
直接删除sites-enabled里的默认配置软链接:
sudo unlink /etc/nginx/sites-enabled/default
- (不推荐)修改默认站点的
server_name,让它只响应特定域名,避免和你的自定义站点冲突,比如在默认配置里添加:
server_name _; # 或者指定一个你不用的域名
2. 确认自定义站点的软链接状态
虽然你说配置没变化,但还是再检查一遍:你的自定义配置是否被正确链接到sites-enabled目录?
ls -l /etc/nginx/sites-enabled/
如果看不到你的awesome.devel.conf,重新创建软链接:
sudo ln -s /etc/nginx/sites-available/awesome.devel.conf /etc/nginx/sites-enabled/
3. 检查Nginx配置语法合法性
配置文件的语法错误会导致Nginx静默加载失败,用下面的命令验证:
sudo nginx -t
如果报错,根据提示修正——比如你的配置里重复写了index指令,虽然不致命,但建议去掉重复行,保持配置整洁。
4. 重启Nginx服务
任何配置修改都需要重启Nginx才能生效:
sudo service nginx restart
如果你的系统支持systemctl,也可以用:
sudo systemctl restart nginx
5. 验证PHP-FPM与Nginx的通信配置(可选)
虽然你说PHP运行正常,但还是确认下PHP-FPM的监听地址是否和Nginx配置匹配:
查看PHP-FPM的池配置:
cat /etc/php/7.1/fpm/pool.d/www.conf | grep listen
如果输出是listen = /run/php/php7.1-fpm.sock,那你需要把Nginx配置里的fastcgi_pass改成unix:/run/php/php7.1-fpm.sock,然后重启两个服务:
sudo service php7.1-fpm restart sudo service nginx restart
6. 测试访问与日志排查
现在重新访问awesome.devel或192.168.56.102,应该就能加载你/var/www/awesome/public/下的项目了。如果还是不行,查看Nginx的错误日志找线索:
tail -f /var/log/nginx/nxv_awesome.error.log
最后给你整理了一份精简后的配置文件(去掉了重复的index指令):
server { listen *:80; server_name awesome.devel www.awesome.devel; client_max_body_size 1m; root /var/www/awesome/public/; index index.php index.html index.htm; access_log /var/log/nginx/nxv_awesome.access.log; error_log /var/log/nginx/nxv_awesome.error.log; # static file 404's aren't logged and expires header is set to maximum age location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; } location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { include fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; try_files $uri $uri/ /index.php$is_args$args; } }
内容的提问来源于stack exchange,提问作者McRui

