修改hosts测试Nginx部署的WordPress站点时出现404错误
问题描述
将多个WordPress站点从Apache服务器迁移至Nginx服务器后,通过修改本地hosts文件进行预上线测试时,除单个站点外其余均返回Nginx 404空白页面。已反复核对配置信息但问题未解决。目前未上线站点未配置SSL证书,但可正常访问的站点其预发布(staging)版本带有SSL证书,怀疑此为问题诱因;暂无法为未上线站点完成SSL证书验证,计划先上线一个站点测试是否解决问题。
附当前Nginx配置:
# Ploi Webserver Configuration, do not remove! include /etc/nginx/ploi/thelitton.co.uk/before/*; server { listen 80; listen [::]:80; root /home/thelitton-2uuer/thelitton.co.uk/public_html; server_name thelitton.co.uk; include /etc/nginx/ssl/thelitton.co.uk; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/dhparams.pem; index index.php index.html; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; charset utf-8; # Ploi Configuration, do not remove! include /etc/nginx/ploi/thelitton.co.uk/server/*; location / { try_files $uri $uri/ /index.php?$query_string; } access_log off; error_log /var/log/nginx/thelitton.co.uk-error.log error; location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php7.4-fpm-thelitton-2uuer.sock; fastcgi_buffers 16 16k; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; include fastcgi_params; } # assets, media location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ { expires 365d; access_log off; } # svg, fonts location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ { add_header Access-Control-Allow-Origin "*"; expires 365d; access_log off; } location ~ /\.(?!well-known).* { deny all; } } # Ploi Webserver Configuration, do not remove! include /etc/nginx/ploi/thelitton.co.uk/after/*;
排查与解决方案
清理无效SSL配置:当前server块监听80端口(HTTP协议),但引入了SSL相关配置文件及指令,这会导致Nginx配置冲突或请求处理异常。需:
- 注释掉SSL配置引用:
# include /etc/nginx/ssl/thelitton.co.uk; - 删除所有SSL相关指令(
ssl_protocols、ssl_ciphers、ssl_prefer_server_ciphers、ssl_dhparam)
- 注释掉SSL配置引用:
验证文件权限:确保Nginx进程用户(通常为
www-data)拥有站点根目录的读取权限:chown -R www-data:www-data /home/thelitton-2uuer/thelitton.co.uk/public_html chmod -R 755 /home/thelitton-2uuer/thelitton.co.uk/public_html同步WordPress站点URL设置:在问题站点的
wp-config.php中添加强制HTTP的站点URL定义,避免HTTPS跳转导致的404:define('WP_HOME','http://thelitton.co.uk'); define('WP_SITEURL','http://thelitton.co.uk');验证配置并重启Nginx:修改配置后执行以下命令确保配置有效并生效:
nginx -t systemctl reload nginx
内容的提问来源于stack exchange,提问作者Sam St Aubyn
相关产品推荐
相关产品推荐

