华为云 ECS 配置 OpenResty 反向代理踩坑记录
【摘要】 华为云 ECS 配置 OpenResty 反向代理踩坑记录前言最近在华为云 ECS 上搭建接口服务,使用 OpenResty 做反向代理,调试的时候遇到不少问题,在这里把整个排查过程和解决方案记录下来,方便后续自己复盘,也给遇到同类问题的朋友参考。环境说明服务器:华为云弹性云服务器 ECS 系统:CentOS 7 服务:OpenResty + PHP 后端接口 需求:域名反向代理转发到后端 ...
华为云 ECS 配置 OpenResty 反向代理踩坑记录
前言
最近在华为云 ECS 上搭建接口服务,使用 OpenResty 做反向代理,调试的时候遇到不少问题,在这里把整个排查过程和解决方案记录下来,方便后续自己复盘,也给遇到同类问题的朋友参考。
环境说明
服务器:华为云弹性云服务器 ECS 系统:CentOS 7 服务:OpenResty + PHP 后端接口 需求:域名反向代理转发到后端 API,同时处理跨域、请求方法限制
问题现象
接口 POST 请求访问直接返回 405 Not Allowed,页面返回 OpenResty 默认报错页,GET 请求却可以正常访问。一开始以为是后端代码没有配置路由,反复核对接口路由文件,发现后端接口本身是支持 POST 请求的。
排查步骤
- 先在服务器内部 curl 直接访问后端服务地址,POST 请求正常返回数据,确认后端程序本身没问题,问题锁定在 OpenResty 的配置。
- 查看 Nginx 站点配置,发现伪静态规则里,把 POST、PUT 这类请求强制当成静态文件处理,静态资源目录不允许 POST 访问,直接抛出 405。
- 测试方案:第一种是修改 Nginx 配置,添加判断,如果是接口路由,不执行静态文件匹配;第二种是单独给 API 路径写 location,转发请求到后端 php-fpm。
最终可用配置片段
location /api/ {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
配置完成后重载 openresty:openresty -s reload,再次 POST 请求,接口正常返回数据。
额外踩坑补充
域名解析停放页问题:域名解析 IP 已经指向 ECS 公网 IP,访问却跳转到域名出售停放页。原因是域名解析生效延迟,或者域名服务商的拦截,临时可以先用 ECS 公网 IP 加端口测试接口,等解析稳定后再切域名。
总结
405 错误不一定是后端没写接口,很多时候是 Nginx/OpenResty 的 location 规则拦截了请求,优先内网直接访问后端验证,再去调整代理配置,能节省大量排查时间。
【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,
举报邮箱:cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)