迁移WordPress从AL2到AL2023后Nginx无法加载自定义配置
问题背景
从Amazon Linux 2迁移到Amazon Linux 2023后,WordPress部署正常,但Nginx始终使用默认根目录/usr/share/nginx/html而非自定义的/var/wordpress/info/DocumentRoot,curl请求返回404,错误日志显示访问默认路径。已尝试重启Nginx、禁用SELinux、调整目录上下文,均无效。
排查步骤
确认自定义配置是否被加载
执行nginx -T(大写T),该命令会输出Nginx加载的所有配置内容。搜索wordpress_http.conf,确认文件是否被加载,以及其中的server块和root配置是否正确。如果看不到该文件的内容,说明配置未被加载,可能是路径错误、权限不足或语法有问题。检查配置语法是否正确
执行nginx -t,如果输出syntax is ok和test is successful则无语法问题;如果报错,根据提示修复配置里的语法错误(比如漏写分号、括号不匹配等)。验证Server块的优先级
AL2023的默认nginx.conf里可能自带一个监听80端口的默认server块,根目录就是/usr/share/nginx/html。如果你的自定义server块的server_name匹配不够精确,Nginx会优先使用默认块。
检查wordpress_http.conf里的server块:- 必须包含
server_name xxx.yyy.mysite.com;,要和curl请求里的Host头完全一致 root要明确指向/var/wordpress/info/DocumentRoot
示例正确的配置片段:
server { listen 80; server_name xxx.yyy.mysite.com; root /var/wordpress/info/DocumentRoot; location / { index index.php index.html; try_files $uri $uri/ /index.php?$args; } # 处理WordPress PHP请求 location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; # 按你的PHP-FPM实际配置调整 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }- 必须包含
检查文件权限与Nginx运行用户
- 查看Nginx运行用户:
ps aux | grep nginx,AL2023里默认是nginx用户 - 检查站点根目录权限:
ls -ld /var/wordpress/info/DocumentRoot,确保nginx用户有读权限(目录至少设为755,文件设为644) - 检查自定义配置文件权限:
ls -l /etc/nginx/conf.d/wordpress_http.conf,权限要设为644,属主为root
- 查看Nginx运行用户:
排查SELinux相关问题
虽然你已经临时禁用SELinux,但可以确认上下文是否正确:- 执行
ls -Z /var/wordpress/info/DocumentRoot,查看上下文是否为httpd_sys_content_t - 如果禁用SELinux后问题仍存在,说明不是SELinux的问题;如果启用后出现问题,执行
sudo restorecon -R /var/wordpress/info/DocumentRoot修复上下文 - 查看SELinux审计日志:
grep nginx /var/log/audit/audit.log,检查是否有Nginx被拒绝访问目录的记录
- 执行
对应解决方案
- 配置未加载:修复路径、权限或语法错误,重启Nginx
- 默认Server块优先级高:确保自定义
server块的server_name精确匹配Host头,或者注释掉默认的server块 - 权限不足:调整目录和配置文件的权限,让Nginx用户拥有可读权限
- SELinux问题:修复上下文或根据审计日志配置SELinux规则
内容的提问来源于stack exchange,提问作者Mahbub Rahman

