最近迁移了一个多站点网络,却发现其中一些站点使用的主题与服务器的 PHP 版本不兼容。
当我致力于长期修复时,我想使用 NGINX 将无法正常工作的站点反向代理到旧服务器,同时保持当前正常工作的站点指向新服务器。
当我尝试以下操作时,我可以访问旧网站的页面,但静态资产(js、css 等)返回 404,并且我无法访问任何 /wp-admin 页面。我应该更改什么?
这是整个服务器块配置。除了location /oldsite
,我还将此配置用于其他服务器块。在这种情况下,我的所有 WordPress 文件都存储在它们自己的单独/wordpress/
目录中,而 则/wp-content/
保存在每个项目的根目录中。
在这种情况下,这些是子目录多站点安装。
server {
server_name mydomain.com www.mydomain.com;
root /var/www/html/wordpress/mydomain.com/wordpress/;
location /oldsite {
proxy_pass http://my.old.ip;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
index index.php index.html;
location /wp-content {
root /var/www/html/wordpress/mydomain.com/;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
#If a file isnt found, 404
try_files $uri =404;
#Include Nginxs fastcgi configuration
include /etc/nginx/fastcgi.conf;
}
if (!-e $request_filename) {
# Don't use $uri here, see https://github.com/yandex/gixy/issues/77
rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
location / {
try_files $uri $uri/ /index.php?$args ;
}
}
答案1
您还需要将与旧站点的上传文件和主题目录相对应的目录传递到旧服务器。如果插件目录提供静态内容或包含直接调用(而不是包含在 WordPress 中)的 PHP 文件,则可能需要传递插件目录。
例如(使用正则表达式,因此效率不高,但它是暂时的,对吗?):
location ~ (/oldsite/|/wp-content/uploads/sites/5/|/wp-content/themes/oldsitetheme/) {