Nginx配置需求:非指定server_name请求访问/ping/返回200 pong
解决Nginx中仅非指定域名访问/ping/返回200的问题
要实现你需要的效果——仅当请求不属于example.com和www.example.com这两个指定域名时,访问/ping/路径才返回200状态码和pong响应——我们可以通过明确默认server的范围来调整配置,避免指定域名的请求触发/ping/的返回规则。
修改后的完整配置
# 处理 example.com 的HTTP请求,统一301跳转至目标HTTPS域名 server { listen 80; server_name example.com; return 301 https://www.sajufortune.com$request_uri; } # 处理 www.example.com 的HTTP请求,根据转发协议判断是否跳转HTTPS,否则代理至ALB server { listen 80; server_name www.example.com; if ($http_x_forwarded_proto != 'https') { rewrite ^ https://$host$request_uri? permanent; } set $alb internal-saju-alb-before-w43.us-west-2.elb.amazonaws.com; location / { proxy_pass $alb; } } # 默认Server:仅处理未匹配上述指定域名的所有HTTP请求 server { listen 80 default_server; server_name _; # 匹配所有未被上面server_name命中的请求 # 仅对/ping/路径返回200和pong响应 location /ping/ { return 200 'pong'; } # 其他非/ping/路径的默认处理(可根据需求调整,比如返回404) location / { return 404; } }
关键改动说明
- 明确默认Server范围:给第三个server块添加
default_server标记和server_name _,让它只负责处理未被example.com和www.example.com匹配到的请求,避免指定域名的请求进入这个块。 - 隔离/ping/规则:把
/ping/的返回规则放在默认Server内,这样只有非指定域名的请求访问/ping/时才会触发这个逻辑。 - 保留原有业务逻辑:前两个server块完全保留你原来的配置,确保
example.com和www.example.com的请求依然按照原有规则(301跳转、HTTPS判断、代理至ALB)处理,不会被/ping/规则干扰。
这样调整后,就完全符合你的需求:指定域名的请求无论访问什么路径,都走原有流程;只有非指定域名的请求访问/ping/时,才会返回200状态码和pong响应。
内容的提问来源于stack exchange,提问作者David Foie Gras
相关产品推荐
相关产品推荐

