Ubuntu系统Nginx部署WordPress出现403/404错误求助
解决Ubuntu下Nginx部署WordPress的403 Forbidden/404 Not Found错误
以下是针对性的排查和修复步骤:
1. 修正HTTP跳转的状态码错误
你的第一个server块中使用了return 300,这是多重选择状态码,浏览器无法正确处理该跳转规则,会直接导致访问异常。将其改为标准的永久跳转状态码:
server { listen 80; listen [::]:80; server_name zakiyadavidson.com www.zakiyadavidson.com; return 301 https://$server_name$request_uri; # 替换300为301 }
2. 验证PHP-FPM套接字的可用性与权限
Nginx需要通过PHP-FPM套接字处理PHP文件,若套接字不存在或权限错误会引发403/502类错误:
- 检查套接字文件是否存在:
ls -l /var/run/php/php8.1-fpm.sock - 确保该文件的属主/属组为
www-data(Nginx默认运行用户):sudo chown www-data:www-data /var/run/php/php8.1-fpm.sock - 确认PHP-FPM服务正常运行:
如果服务未启动,执行:sudo systemctl status php8.1-fpmsudo systemctl start php8.1-fpm
3. 确认WordPress根目录的正确性
检查Nginx配置中指定的root /var/www/zakiyadavidson.com路径下是否存在完整的WordPress核心文件:
ls -l /var/www/zakiyadavidson.com
确保能看到wp-config.php、index.php、wp-admin等关键文件,若路径错误则修正Nginx的root配置项。
4. 检查Nginx配置语法并重启服务
每次修改配置后,必须验证语法正确性并重启Nginx:
sudo nginx -t sudo systemctl restart nginx
5. 查看Nginx错误日志定位根源
直接查看错误日志是最有效的排查方式,日志默认路径为/var/log/nginx/error.log:
sudo tail -n 20 /var/log/nginx/error.log
日志会明确提示错误原因,比如"permission denied"(权限问题)、"No such file or directory"(文件不存在)、"connect() to unix:/var/run/php/php8.1-fpm.sock failed"(PHP-FPM连接失败)等。
6. 修复WordPress固定链接配置
如果仅部分页面(如文章页)出现404,可能是固定链接设置异常:
- 若能登录WordPress后台,进入「设置」→「固定链接」,选择任意一种非默认格式(如「文章名」)并点击「保存更改」,系统会自动同步rewrite规则(你的Nginx配置中已包含
try_files $uri $uri/ /index.php?$args;,支持该规则)。
你的Nginx配置文件(原样整理)
server { listen 80; listen [::]:80; server_name zakiyadavidson.com www.zakiyadavidson.com; return 300 https://$server_name$request_uri; } server { listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/zakiyadavidson.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/zakiyadavidson.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot server_name zakiyadavidson.com www.zakiyadavidson.com; root /var/www/zakiyadavidson.com; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } #removed node.js server info from here location ~ /\.ht { deny all; } location ~ ^/\.user\.ini { deny all; } }
内容的提问来源于stack exchange,提问作者Zakiya Davidson
相关产品推荐
相关产品推荐

