IP白名单后仅经Reverse Proxy for API公开WordPress JSON的方案咨询
基于Nginx/Apache的WP-API专属反向代理实现方案
前置准备
- 将反向代理服务器的公网IP加入原有WordPress实例的前置防火墙白名单,确保代理节点到WP的访问链路无拦截
- 确认WP默认REST API可正常访问:在内网环境下访问WP域名的
/wp-json/路径,能返回结构化JSON即可,无需额外安装REST API插件
Nginx 最小化配置(零前端依赖,纯JSON透传)
以下配置完全不配置静态资源根目录,无任何前端逻辑,仅匹配WP API路径做请求转发,其余路径直接拒绝访问,避免WP站点全量对外暴露
配置写入Nginx站点的server块中:
server { listen 80; # 替换为对外提供API服务的专属域名 server_name api-proxy.your-domain.com; # 关闭Nginx版本号暴露,减少探测面 server_tokens off; # 仅透传所有/wp-json前缀的请求 location ^~ /wp-json/ { # 替换为WP实例的白名单可访问内网/本地地址 proxy_pass http://your-wp-internal-address.com; # 完整透传原始请求头,避免WP识别代理后返回异常 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; # 关闭压缩与中转缓存,保证返回的JSON与WP原生返回完全一致 proxy_set_header Accept-Encoding ""; proxy_buffering off; } # 所有非API路径直接返回403,不转发到WP,杜绝前端资源暴露 location / { return 403; } }
配置完成后执行nginx -t校验语法,重载Nginx即可生效。
Apache 对应实现配置
提前开启Apache的proxy、proxy_http、headers模块,在站点配置中加入以下规则:
# 透传所有WP API请求 ProxyPass "/wp-json/" "http://your-wp-internal-address.com/wp-json/" ProxyPassReverse "/wp-json/" "http://your-wp-internal-address.com/wp-json/" RequestHeader set X-Forwarded-Proto "expr=%{REQUEST_SCHEME}" # 拒绝所有非API路径的访问 <LocationMatch "^/(?!wp-json/)"> Require all denied </LocationMatch>
落地校验与优化点
- 功能校验:请求对外代理域名的
/wp-json/路径,能拿到与WP原生返回完全一致的JSON结构;请求代理域名的根路径、/wp-admin等非API路径,会直接返回403,完全不会触达WP的前端资源 - 鉴权兼容:WP侧的REST API身份校验逻辑(如API Token、Cookie鉴权)不需要做任何适配,请求头中的认证字段会被完整透传,鉴权流程完全由WP自身处理
- 性能优化:可在代理层对GET类型的公开API响应设置5-10分钟的缓存,降低WP实例的请求压力,不会修改原始JSON的返回结构
- 安全加固:可在代理层限制单IP请求频率,避免WP API被恶意爬取
内容的提问来源于stack exchange,提问作者badcrocodile
相关产品推荐
相关产品推荐

