我有一个网站,现在正在运行
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 主题)则没问题,配置没有问题