跨独立EC2服务器配置Nginx反向代理实现WordPress子目录访问
解决思路:用Nginx反向代理实现路径分流
嘿,这个需求其实挺典型的——把不同路径的请求分发到两台独立的服务器上。咱们不用折腾复杂的DNS配置,直接在主站的Nginx服务器上做反向代理就搞定了,步骤如下:
一、修改主站Nginx的配置文件
主站用的是Nginx,正好可以直接用它的反向代理功能把/blog开头的请求转发到博客服务器。
- 找到主站的Nginx配置文件,通常在
/etc/nginx/sites-available/example.com(或者/etc/nginx/nginx.conf里的server块)。 - 在你的主站server块里,添加专门处理
/blog路径的location规则:
server { listen 80; server_name example.com; # 保留你原来的主站配置,比如主站的根目录、FastCGI配置等 location / { root /var/www/main-site; index index.html index.php; # 其他原有配置... } # 关键:处理所有/blog开头的请求,转发到博客EC2 location ^~ /blog { proxy_pass http://35.0.0.2; # 传递客户端请求头,避免WordPress识别错误 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; # 如果你想让example.com/blog对应博客服务器的/blog子目录,把上面的proxy_pass改成: # proxy_pass http://35.0.0.2/blog; # 但要确保博客服务器上的WordPress确实部署在/blog路径下 } }
- 检查配置是否合法:
sudo nginx -t,如果提示test is successful,就重启Nginx生效:sudo systemctl restart nginx
二、配置博客服务器的Apache和WordPress
这一步是为了避免博客直接暴露,并且让WordPress正确识别访问路径:
- 限制Apache的访问来源:为了安全,只允许主站服务器的IP访问博客。编辑Apache的配置文件(比如
/etc/apache2/sites-available/000-default.conf),在Directory块里添加IP限制:
<Directory /var/www/wordpress> # 原有配置(比如AllowOverride All等)保留 Require ip 35.0.0.1 </Directory>
然后重启Apache:sudo systemctl restart apache2
- 修改WordPress的站点URL:登录WordPress后台,进入「设置」→「常规」,把:
- WordPress地址(URL)改成
http://example.com/blog - 站点地址(URL)改成
http://example.com/blog
(如果用HTTPS的话,把http换成https)
这样WordPress生成的链接就会是example.com/blog开头,不会跳转到博客服务器的IP。
- WordPress地址(URL)改成
三、检查EC2安全组设置
确保两台服务器的安全组配置正确:
- 主站EC2:允许80/443端口的入站流量(来自所有IP,因为要对外提供服务)
- 博客EC2:只允许来自主站EC2 IP的80/443端口入站流量,禁止其他IP直接访问
测试验证
现在访问example.com应该加载主站的Web应用,访问example.com/blog(包括子路径比如example.com/blog/post/123)应该正常显示WordPress的内容了。
如果遇到重定向错误,大概率是WordPress的URL没设置对,或者Nginx的proxy_pass配置有问题,回头检查一下就行~
内容的提问来源于stack exchange,提问作者Simpleton
相关产品推荐
相关产品推荐

