我正在移动一个 Wordpress 博客从基于 Apache 的 Web 服务器到基于 Nginx 的 Web 服务器。我认为步骤很简单:
scp 源 WordPress 文件夹(本例中为 /var/www/example.com),将其传输到远程 Web 服务器上同名文件夹。这样就没问题了。
源 WordPress 数据库的 mysqldump。这样没问题。
在 nginx 网络服务器上,我创建了一个数据库(与源数据库同名,只是为了保持所有内容相同)。
我设置了一个默认的 WP 博客,看看此时一切是否正常。我创建了一个正确的
/etc/nginx/sites-available/example.com 配置文件(当然,还链接到 sites-enabled)。该
配置文件指向不同的文件夹(/var/www/exampletemp)修改我的 Windows 主机文件以便在我感兴趣的域上测试新博客。example.com 上的博客显示正常,当然是默认的 WP 博客,但具有正确的 URL。
然后是关键步骤。首先,我编辑 /etc/nginx/sites-available/example.com,使其现在指向真正的备份文件夹 (/var/www/example.com) ->(只需更改根位置和 fastcgi 指令)。
然后我创建另一个数据库,在这个新数据库上恢复源数据库,编辑 /var/www/example.com 上的 wp-config.php 文件以防万一缺少某些内容,然后重新启动 nginx。
我能得到什么?
A华丽的,美丽的“错误 310:重定向次数过多”:(
我可以在 www.example.com/wp-login.php 上看到登录页面,但我的源用户不起作用,我无法访问 WordPress 仪表板。例如,我修改了 phpMyadmin 中的管理员帐户,设置了新密码并选择了 MD5 加密,虽然在我从 Apache 移到 Apache 或从 Nginx 移到 Nginx 时这些方法都有效,但这次却不行。
我真的不明白为什么会出现“重定向次数过多”的错误。我尝试禁用所有插件(将 /wp-content/plugins 重命名为 /wp-content/oldplugins,或使用 SQL 查询禁用所有插件),但还是没用。
抱歉,问题太长了。希望我已经表达清楚了...
编辑:这是 nginx 配置文件,以防万一:)
server {
listen 80;
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
server {
listen 80;
access_log /var/www/example.com/log/access.log;
error_log /var/www/example.com/log/error.log info;
server_name example.com;
root /var/www/example.com;
location / {
index index.php;
# if the requested file exists, return it immediately
if (-f $request_filename) {
break;
}
# all other requests go to WordPress
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
## Images and static content is treated different
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 30d;
root /var/www/example.com;
}
## Parse all .php file in the /var/www directory
location ~ .php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/example.com$fastcgi_script_name;
include fastcgi_params;
fastcgi_param HTTP_HOST example.com;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort on;
fastcgi_read_timeout 180;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
}
我正在思考我的问题的另一个答案:Apache Web 服务器上的源 WP 文件夹具有apache:apache
用户:组,在将该文件夹“scping”到我的新 Nginx Web 服务器后,该用户和该组不再有效。我chown -R www-data:www-data
对新的 WP 文件夹进行了适当的修改,但是……这可能是答案的提示吗?
答案1
尝试:
location / {
try_files $uri $uri/ /index.php;
}
答案2
nginx 是否将正确的“Host”标头传递给 FastCGI 服务器?Wordpress 检查此标头,如果它与 DB 中的设置不相等,则执行重定向。看来您应该检查/etc/nginx/fastcgi_params
并设置类似的东西fastcgi_param HTTP_HOST example.com;
。