发布时间:2026/7/2 3:00:35
记一次 Nginx 代理导致 API 500 错误的排查与修复
记一次 Nginx 代理导致 API 500 错误的排查与修复问题描述前端访问http://localhost:9527/dev-api/Login/getStaticResource返回 500 Internal Server Error直接访问http://anyu-portal.test/正常。技术栈前端Vue.js Vue CLI (devServer proxy)后端ThinkPHP 5.x PHP 7.4容器Docker Compose (nginx, php-fpm)代理Nginx 反向代理请求链路分析浏览器 localhost:9527/dev-api/Login/getStaticResource ↓ Vue devServer proxy (vue.config.js) Nginx anyu-portal-frontend.test/api/Login/getStaticResource ↓ Nginx location /api/ proxy_pass (anyu-front.conf) Nginx anyu-portal.test/Login/getStaticResource ↓ Nginx location ~ .php$ fastcgi_pass (anyu-portal.conf) PHP-FPM anyu-portal/Public/index.php配置文件检查1. Vue devServer 代理配置vue.config.jsproxy:{[process.env.VUE_APP_BASE_API]:{target:http://anyu-portal-frontend.test/api,changeOrigin:true,pathRewrite:{[^process.env.VUE_APP_BASE_API]:}}}VUE_APP_BASE_API/dev-api所以请求/dev-api/Login/getStaticResource被转发到http://anyu-portal-frontend.test/api/Login/getStaticResource2. Nginx 前端站点配置anyu-front.confserver { listen 80; server_name anyu-frontend.test *.anyu-frontend.test; root /www/anyu-portal-frontend; location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_set_header Host $http_x_forwarded_host; proxy_pass http://anyu-portal.test/; } }3. Nginx 后端站点配置anyu-portal.confserver { listen 80; server_name anyu-portal.test; root /www/anyu-portal/Public; if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s$1 last; } location ~ \.php$ { fastcgi_pass php:9000; include fastcgi-php.conf; include fastcgi_params; } }4. Docker Compose 网络配置docker-compose.ymlservices:nginx:extra_hosts:-openapi:127.0.0.1-lvs:127.0.0.1-admin:127.0.0.1-portal:127.0.0.1# 缺少: anyu-portal.test:127.0.0.1排查过程步骤 1直接测试后端 API从 nginx 容器内部直接访问后端dockerexecnginxcurl-vhttp://anyu-portal.test/Login/getStaticResource结果返回 200 OK后端 API 本身正常。步骤 2测试代理链路从 nginx 容器内部通过前端域名访问dockerexecnginxcurl-vhttp://anyu-portal-frontend.test/api/Login/getStaticResource结果返回 500 Internal Server Error。步骤 3检查 Host 头问题直接访问时 curl 会发送Host: anyu-portal.test但通过/api/代理时proxy_set_header Host $http_x_forwarded_host;$http_x_forwarded_host是客户端请求的X-Forwarded-Host头通常为空。当 Host 头为空时后端 ThinkPHP 的getStaticResource方法无法正确识别SERVER_NAME导致找不到合作伙伴配置。步骤 4检查域名解析nginx 容器的extra_hosts中没有配置anyu-portal.test虽然之前已经添加了但需要确认是否生效。根因分析问题有两个层面Host 头为空proxy_set_header Host $http_x_forwarded_host;设置了一个通常为空的变量导致转发到后端时没有正确的 Host 头。域名解析nginx 容器内部无法解析anyu-portal.test虽然之前已添加到extra_hosts。后端 ThinkPHP 的getStaticResource方法依赖SERVER_NAME获取合作伙伴配置publicfunctiongetStaticResource(){$server_nameSERVER_NAME;// 依赖 $_SERVER[SERVER_NAME]$redisnewRedis();$redis-connect(C(REDIS_HOST),C(REDIS_PORT));// ...if(!C(PARTNER)){$this-setPartner($redis,$server_name);// 根据 server_name 获取合作伙伴}// ...}当 Host 头为空或不正确时SERVER_NAME无法正确识别导致C(PARTNER)为空后续操作失败。修复方案修复 1修改 Nginx 代理配置文件services/nginx/conf.d/anyu-front.conf# 修改前 location /api/ { proxy_set_header Host $http_x_forwarded_host; proxy_pass http://anyu-portal.test/; } # 修改后 location /api/ { proxy_set_header Host anyu-portal.test; proxy_pass http://anyu-portal.test/; }修复 2添加域名解析文件docker-compose.ymlservices:nginx:extra_hosts:-openapi:127.0.0.1-lvs:127.0.0.1-admin:127.0.0.1-portal:127.0.0.1-anyu-portal.test:127.0.0.1# 新增修复 3重载 Nginx 配置dockerexecnginx nginx-sreload验证dockerexecnginxcurl-vhttp://anyu-portal-frontend.test/api/Login/getStaticResource结果返回 200 OKJSON 数据正常。总结经验教训Host 头很重要反向代理时proxy_set_header Host必须设置正确的值后端框架如 ThinkPHP依赖它来识别当前站点。容器内部域名解析Docker Compose 的extra_hosts只对容器内部生效宿主机的 hosts 文件不会自动同步到容器。排查顺序先测试直接访问后端再测试完整代理链路定位问题出在哪一层。变量陷阱$http_x_forwarded_host是客户端请求头不是 Nginx 内置变量不要误以为它会自动填充。最佳实践location /api/ { proxy_set_header Host $proxy_host; # 使用 proxy_pass 中指定的主机名 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://backend/; }使用$proxy_host可以自动获取proxy_pass中指定的主机名比硬编码更灵活。

相关新闻

2026云手机最新实测:8款主流产品横评不踩坑
2026/7/2 3:00:35

2026云手机最新实测:8款主流产品横评不踩坑

2026年选云手机,我劝你别再交智商税了。最近后台收到几十条粉丝留言:要么是贪十几块的低价云机,挂机俩小时就掉线,一晚上搬砖的资源全泡汤;要么多开要加钱、批量管理要开会员,算下来月均成本比买二手实体机…

阅读更多
从列式存储到零拷贝:剖析大模型 GGUF 词表在 llama.cpp 中的物理真相
2026/7/2 3:00:35

从列式存储到零拷贝:剖析大模型 GGUF 词表在 llama.cpp 中的物理真相

一个已经跑了三个月的 7B 模型,微调、转 GGUF、上线,一切照旧。权重没动一个 bit,sha256 和上一版的差异只在几层 LoRA 合并进去的矩阵。可这一版加载进 llama.cpp 之后,单轮问答正常,一到多轮就开始飘:模型说完该停的地方不停,把下一轮的角色标记自己续写出来,偶尔还蹦…

阅读更多
Excel不规则尺寸提取简洁技术教程(RegexString+Split2Array)
2026/7/2 3:00:35

Excel不规则尺寸提取简洁技术教程(RegexString+Split2Array)

一、核心函数与公式(直接套用)1.1 RegexString(提取尺寸,过滤噪音)语法:RegexString(Text, Rule, Advance, Index)关键参数:- Text:原始备注单元格(本文以N268为例&#…

阅读更多
批量制作考试条形码标签方法!
2026/7/2 4:00:35

批量制作考试条形码标签方法!

条形码标签制作工具——「易条形」是一款智能化标签设计与批量生成打印工具,适配中小学月考、期中期末考试、中考、高考、学业水平测试及各类职业统考等全场景考试使用。可快速生成标准化考试条形码标签,集成标签版式设计、批量数据导入、专属条码生成、…

阅读更多
Grype:容器镜像漏洞扫描工具
2026/7/2 4:00:35

Grype:容器镜像漏洞扫描工具

文章目录Grype:容器镜像漏洞扫描工具实际使用体验和同类工具对比适合什么场景不足的地方Grype:容器镜像漏洞扫描工具 最近在做容器安全相关的项目,需要一个能快速扫描镜像漏洞的工具。试了几个之后,发现 Anchore 出品的 Grype 用…

阅读更多
乡墅培训新启航:快速成长的秘密武器
2026/7/2 4:00:35

乡墅培训新启航:快速成长的秘密武器

引言随着乡村振兴战略的深入推进,乡村别墅(乡墅)市场迎来了前所未有的发展机遇。然而,对于许多装企和乡墅公司来说,如何在这个新兴市场中快速成长并站稳脚跟,却是一个不小的挑战。本文将深入探讨乡墅赋能培…

阅读更多
agent 对比
2026/7/2 4:00:35

agent 对比

前沿开源 Agent 框架横向深度对比报告 对比对象:OpenClaw Hermes Agent Claude Code ,参考基准 CrewAI / OpenHands / AutoGPT 分析方式:四个代码库源码级勘察(含 README / docs / 核 心源文件指纹) 日期&#xff1a…

阅读更多
AI 辅助:从零构建系统级工具:先写能验证假设的最小版本
2026/7/2 4:00:35

AI 辅助:从零构建系统级工具:先写能验证假设的最小版本

AI 辅助:从零构建系统级工具:先写能验证假设的最小版本 一、最小版本要验证真实痛点 从零构建系统级工具时,很容易被宏大想法带跑:插件架构、配置中心、远程同步、漂亮 TUI、跨平台打包都想做。结果核心功能还没验证,项…

阅读更多
记一次 Nginx 代理导致 API 500 错误的排查与修复
2026/7/2 3:00:35

记一次 Nginx 代理导致 API 500 错误的排查与修复

记一次 Nginx 代理导致 API 500 错误的排查与修复 问题描述 前端访问 http://localhost:9527/dev-api/Login/getStaticResource 返回 500 Internal Server Error,直接访问 http://anyu-portal.test/ 正常。 技术栈 前端:Vue.js Vue CLI (devServer prox…

阅读更多
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告
2026/6/30 17:40:54

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

阅读更多
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?
2026/7/2 2:06:24

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

阅读更多
BurpSuite Cluster Bomb模式深度避坑指南:从原理到实战的完整爆破策略
2026/7/2 0:00:34

BurpSuite Cluster Bomb模式深度避坑指南:从原理到实战的完整爆破策略

1. 项目概述:从“能用”到“精通”的必经之路如果你正在学习或从事网络安全测试,尤其是Web应用安全评估,那么BurpSuite的Intruder模块绝对是你绕不开的核心工具。而Intruder模块里,功能最强大、也最让人又爱又恨的,莫过…

阅读更多
Selenium元素定位全解析:从八大方法到实战策略
2026/7/2 0:00:34

Selenium元素定位全解析:从八大方法到实战策略

1. 项目概述:从“找东西”到“精准操控” 做自动化测试,尤其是Web UI自动化,最核心也最让人头疼的一步是什么?不是写复杂的业务逻辑,也不是处理异步加载,而是最基础的—— 让程序找到页面上那个你想操作的…

阅读更多
移动端UI自动化测试框架Maestro终极指南:从入门到实战
2026/7/2 0:00:34

移动端UI自动化测试框架Maestro终极指南:从入门到实战

1. 项目概述:为什么是Maestro? 如果你正在寻找一个能让你快速上手、告别繁琐配置、并且对移动端UI自动化测试真正友好的框架,那么Maestro很可能就是你一直在等的那个答案。我接触过Appium、Espresso、XCUITest,也折腾过各种基于图…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/1 0:00:31

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/1 0:00:31

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/1 0:00:31

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多