Nginx常见错误集中在配置逻辑、语法细节和环境适配三方面:rewrite位置错误导致HTTPS透传;301重定向循环因server_name重叠或条件不全;proxy_pass协议丢失需设X-Forwarded-Proto;rewrite末尾缺break或斜杠引发路径错误;rewrite模块缺失则需检查pcre依赖。
常见错误主要集中在配置逻辑、语法细节和环境适配三方面,不难排查,但容易因惯性思维忽略关键点。
HTTPS 请求进的是 listen 443 ssl 的 server 块,但如果所有 rewrite 都只写在 listen 80 块里,443 块又没做任何处理,就会导致 HTTPS 请求原样透传,后端可能返回 HTTP 地址,浏览器拒绝加载。
return 301 http://... 这类反向降级规则if ($scheme = http) { return 301 https://$host$request_uri; }
典型表现是浏览器提示“重定向次数过多”,本质是请求 URL 经 rewrite 后又匹配到同一条规则,反复触发。
shidongyun.com www.shidongyun.com),否则访问 www 也会触发 rewritecurl -I https://domain/path 验证,比浏览器更可靠——它不缓存 301,能看清真实跳转链前端 HTTPS 请求经 rewrite 改写路径后 proxy_pass 到 HTTP 后端,若后端生成的 Location 头仍是 HTTP 地址,用户就会被降级。
proxy_set_header X-Forwarded-Proto $scheme;,让后端知道原始协议rewrite ^/api/(.*)$ /$1 break;),末尾加 break,防止继续匹配 location 或触发 redirecthttp://backend/),否则路径拼接易出错运行 nginx -t 提示 “unknown directive ‘rewrite’”,通常不是配置问题,而是编译缺失模块。
--without-http_rewrite_module,就会禁用它pcre 和 pcre-devel(或 libpcre3-dev)是正则支持基础rewrite "^/old/(.*)$" /new/$1 permanent;