Nginx反向代理配置异常:/wiremock路径后续请求返回404
问题排查与解决方案
问题出在两个核心点:WebApp(WireMock)不知道自身被挂载在Nginx的/wiremock路径下,导致内部生成的请求缺少前缀;同时原Nginx配置的匹配范围和转发规则存在局限。
修正后的Nginx配置
server { listen 8443 ssl; server_name localhost; access_log /dev/stdout; error_log /dev/stderr; ssl_certificate /etc/ssl/certs/self-signed-cert-for-instance.crt; ssl_certificate_key /etc/ssl/private/self-signed-cert-for-instance.key; # 匹配所有/wiremock开头的请求,覆盖后续子路径 location /wiremock/ { # 移除/wiremock前缀,将剩余路径转发给WireMock rewrite ^/wiremock(/.*)$ $1 break; proxy_pass https://localhost:7443; # 传递必要的转发头,让WireMock感知外部访问前缀 proxy_set_header Host $host; proxy_set_header X-Forwarded-Prefix /wiremock; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; } }
关键调整说明
- 扩大location匹配范围:将
location /wiremock/__admin改为location /wiremock/,确保所有以/wiremock/开头的请求(包括后续子路径如/wiremock/__admin/settings)都能被Nginx捕获转发。 - 调整rewrite规则:
^/wiremock(/.*)$ $1确保精准移除/wiremock前缀,将正确的路径传递给WireMock。 - 添加
X-Forwarded-Prefix头:WireMock会识别该头信息,生成内部链接时自动带上/wiremock前缀,避免后续请求直接跳转到/__admin路径。 - 可选补充:WireMock启动参数:如果WireMock版本较旧,可在启动时显式设置上下文路径:
让WebApp自身默认生成带wiremock --context-path=/wiremock --port=7443/wiremock前缀的链接,配合Nginx转发更稳定。
验证步骤
- 重启Nginx加载新配置:
nginx -s reload - 访问
https://localhost:8443/wiremock/__admin,查看Chrome控制台的后续请求是否均带有/wiremock前缀。
内容的提问来源于stack exchange,提问作者Rohit12
相关产品推荐
相关产品推荐

