反向代理后nginx上的WordPress多站点子目录

时间:2018-12-25 作者:Carobell

我似乎无法让wordpress多站点子目录在我的反向代理之后工作。

本地(从lan ip地址)所有工作正常,我可以访问主域、子目录和所有仪表板。

添加反向代理时,我无法访问网络仪表板(重定向循环)或多站点子目录(重定向到lan ip)。如果我试图通过手动写入地址进入多站点,它会将我发送到没有css的页面。

唯一可以使用反向代理的是主站点。

我想要的:

www.example。net www.example。net/wp admin www.example。net/wp admin/network www.example。net/sub1 www.example。net/sub1/wp admin www.example。net/sub2 www.example。net/sub2/wp admin发生了什么:

www.example。net-->正常www.example。net/wp admin-->正常www.example。net/wp admin/network-->重定向循环www.example。net/sub1-->无css www.example。net/sub1/wp admin-->无css。net/sub2-->无css www.example。net/sub2/wp管理-->无css

Reverse Proxy conf

server {
        listen       80;
        server_name  *.example.net example.net;
        return 302 $scheme://www.example.net$request_uri;
}

server {
        listen       80;
        server_name  www.example.net;
        return 302 https://$host$request_uri;
}

server {
    listen       443 ssl http2;
    server_name  www.example.net;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.example.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.example.net/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

        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

        location ^~ / {
                proxy_pass              http://192.168.2.30/;
                proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header      X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-Proto       $scheme;
        }
}

wp-config.php

/* Updates asking for FTP */
define(\'FS_METHOD\',\'direct\');

/* Multisite */
define( \'WP_ALLOW_MULTISITE\', true );
define(\'MULTISITE\', true);
define(\'SUBDOMAIN_INSTALL\', false);
// define(\'DOMAIN_CURRENT_SITE\', \'192.168.2.30\');
define(\'DOMAIN_CURRENT_SITE\', \'www.example.net\');
define(\'PATH_CURRENT_SITE\', \'/\');
define(\'SITE_ID_CURRENT_SITE\', 1);
define(\'BLOG_ID_CURRENT_SITE\', 1);

/* Faire fonctionner SSL (et CSS) */
if ( (!empty( $_SERVER[\'HTTP_X_FORWARDED_HOST\'])) ||
     (!empty( $_SERVER[\'HTTP_X_FORWARDED_FOR\'])) ) {
    $_SERVER[\'HTTPS\'] = \'on\';
}

wordpress nginx conf

server {
        listen       80 default_server;
        server_name     192.168.2.30;

        root   /var/www/html/wordpress;

        access_log      /var/log/nginx/wp.access.log;
        error_log       /var/log/nginx/wp.error.log;

        ## WordPress Perm links config
        location / {
                index index.php index.html;
                try_files $uri $uri/ /index.php?$args;
        }

        # Rewrite multisite in a subdirectory \'.../wp-.*\' and \'.../*.php\'.
         if (!-e $request_filename) {
            rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
            rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\\.php)$ $1 last;
            rewrite ^/[_0-9a-zA-Z-]+(/.*\\.php)$ $1 last;
        }

        # Pass all .php files onto a php-fpm or php-cgi server
        location ~ \\.php$ {
           try_files $uri =404;
           include fastcgi_params;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
           fastcgi_index index.php;
        }
}
如果我添加“proxy\\u set\\u header Host$Host”以反转代理配置,则在尝试访问wp admin时会出现此错误

Error establishing a database connection

If your site does not display, please contact the owner of this network. If you are the owner of this network please check that MySQL is running properly and all tables are error free.

Could not find site www.example.net. Searched for table wp_blogs in database wordpressDB. Is that right?

What do I do now? Read the bug report page. Some of the guidelines there may help you figure out what went wrong. If you’re still stuck with this message, then check that your database contains the following tables:

    wp_users
    wp_usermeta
    wp_blogs
    wp_signups
    wp_site
    wp_sitemeta
    wp_registration_log
    wp_blog_versions
仪表板不保留链接的域名(所有内容都重定向到ip)。我尝试将这段代码添加到wp配置中,但它仍然没有改变任何东西。定义(\'WP\\U HOME\',\'https://www.example.net\'); 定义(\'WP\\U SITEURL\',\'https://www.example.net\');

1 个回复
最合适的回答,由SO网友:Carobell 整理而成

问题是sql数据库没有更新URL。我不知道是否有一种方法可以轻松做到这一点,但我觉得我已经到处寻找这个解决方案,最终找到了一个类似问题的答案:https://premium.wpmudev.org/forums/topic/how-to-change-url-for-wp-multi-site#post-426799

我从一切都在本地工作的地方开始(从ip地址),然后我进入数据库进行更改:

  • siteurlhome 从…起wp_optionshttp://www.example.net/
  • siteurlhome 从…起wp_{blog_id}_optionshttp://www.example.net/{blog}其中{blog\\u id}是其他站点的id,{blog}是sub1和sub2)
  • domain 从…起wp_sitewp_blogswww.example.net
如果我保持原样,建立数据库连接时会出现错误

正如上面的链接所说,我回到了wp-config 文件来更改DOMAIN_CURRENT_SITEwww.example.net.

让它保持原样会导致网关错误,因此我转到反向代理并将此位添加到wordpress服务器位置:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header Host $host;
瞧!反向代理背后的Wordpress多站点!

如果我想添加一个新的子网站,它会保留所有好的信息,所以我不需要重做。唯一的“缺点”是,我无法再从本地ip访问网站,但我只需要重复这些步骤并更改ip tol返回的域。

相关推荐

Redirection on domain name

我目前正在调试一个荷兰WP网站https://glaszetterdirect.nl问题是,我从以下位置收到了不需要的重定向:http://www.glaszetterdirect.nl 到https://glaszetterdirect.nl/wp-admin我真的不明白发生了什么事。我已经检查了以下内容:.htaccesswp-config.phpwp_options db表格(siteurl 和home 两者:https://glaszetterdirect.nl)</已选中并删除wp_old