使用 WordPress 为博客在另一台服务器上的子目录进行反向代理

使用 WordPress 为博客在另一台服务器上的子目录进行反向代理

我有一个网站,现在正在运行

https://example.com

现在我想将我的博客加载为子目录,但在另一台服务器上,它应该加载为

https://example.com/blog

我正在使用 nginx 网络服务器和 Cloudflare DNS 服务,我知道我应该为此使用反向代理,但目前还无法让它工作

我需要知道我应该添加什么 DNS 记录以及应该使用什么 nginx 配置

答案1

最后,经过大量的工作,我找到了正确的答案,我在Ubuntu 22,nginx 1.25上,主网站基于Django,博客基于WordPress,这些网站位于不同的服务器上

首先,为子域名创建一个 A 记录,指向博客服务器 IP 地址,例如 A 博客 127.0.0.1

之后,将其添加到主网站 nginx 配置文件中

location  /blog/ {
    proxy_pass http://blog.example.com/;
    proxy_read_timeout 90;
    proxy_connect_timeout 90;
    proxy_redirect off;
    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;
    proxy_set_header Host blog.example.com;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header Connection “”;
}

最后,在博客服务器上为博客网站创建配置文件

server {
    server_name www.example.com/blog;
    root /var/www/blog;
    access_log  /var/log/nginx/blog.access.log  main;


    add_header 'Access-Control-Allow-Origin' "https://www.example.com";
    add_header 'Access-Control-Allow-Methods' 'GET, POST';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header Access-Control-Allow-Headers User-Agent,Keep-Alive,Content-Type;
    add_header 'Referrer-Policy' 'origin';


    location /wp-admin/ {
        index index.php;
        try_files $uri $uri/ /index.php$args;
    }


    location / {
        root /var/www/blog;
        index index.php index.html index.htm index.nginx-debian.html;
        try_files $uri $uri /index.php?q=$uri&$args;
    }


    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        include snippets/fastcgi-php.conf;
        fastcgi_read_timeout 120;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        fastcgi_intercept_errors on;
        include fastcgi_params;
        fastcgi_cache_valid 404 60m;
        fastcgi_cache_valid 200 60m;
        fastcgi_max_temp_file_size 4m;
        fastcgi_cache_use_stale updating;
    }

    listen 80;
    listen 443 ssl;
}

请注意,您的 WordPress 管理员 URL 将是:

https://blog.example.com

而博客前端将通过

https://www.example.com/blog

因此你需要将这行代码添加到 WordPress wp-config.php 文件中

define( 'WP_HOME', 'https://www.example.com/blog' );
define( 'WP_SITEURL', 'https://blog.example.com' );

已知问题: 使用此配置,您无法使用基于 elementor 页面构建器的 WordPress 模板,因为当您尝试在管理员中编辑页面时,由于 elementor 在前面加载,您将收到 cookie 错误,我暂时无法修复此问题,但使用非 elementor 模板(如 Jannah 主题)则没问题,配置没有问题

相关内容