Nginx层安全认证需先启用HTTPS并强制跳转,配置TLSv1.2+、HSTS及完整证书;再通过JWT(Lua模块)、Basic Auth或API Key校验身份;接着用IP白名单、路径正则、速率限制控制访问;最后加固响应头与CORS。

直接在 Nginx 层做安全认证,既能减轻后端压力,又能统一管控入口。关键不在于堆功能,而在于选对方式、配准细节。
启用 HTTPS 并强制跳转
所有认证的前提是传输加密。明文传输的 Token 或密码等于裸奔。
- 确保 SSL 证书完整:域名证书 + 中间证书合并为 fullchain.crt,私钥必须无密码且权限设为 644
- 443 端口 server 块中启用 TLSv1.2+ 和现代 cipher:
ssl_protocols TLSv1.2 TLSv1.3; - 80 端口加 301 跳转:
return 301 https://$host$request_uri; - 加上 HSTS 头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
验证请求身份(JWT / Basic Auth)
Nginx 本身不生成 Token,但可校验其存在性与基础结构。
- JWT 验证需引入 Lua 模块(如 nginx-jwt):
access_by_lua 'require("nginx-jwt").auth()';,配合env JWT_SECRET;和lua_package_path路径配置 - Basic Auth 可原生支持:
auth_basic "API Restricted"; auth_basic_user_file /etc/nginx/.htpasswd;,用htpasswd生成用户文件 - 简单 Token 校验(如 API Key):
if ($http_x_api_key = "") { return 401; },或更严谨地匹配白名单值
控制访问来源与行为
认证通过后,还要限制“谁能在什么条件下调用”。
- IP 白名单:
allow 203.0.113.10; deny all;;若经 CDN,需配合set_real_ip_from和real_ip_header X-Forwarded-For - 路径级权限隔离:用正则精确匹配允许接口,如
location ~ ^/api/v2/(orders|payments)$ { ... },敏感路径直接return 403; - 速率限制防爆破:
limit_req zone=api burst=10 nodelay;,搭配limit_req_zone $binary_remote_addr zone=api:10m rate=5r/s;
加固响应与头信息
让客户端和中间链路也遵循安全规范。
- 禁用危险头:
proxy_hide_header Server;、proxy_hide_header X-Powered-By; - 添加安全响应头:
add_header X-Content-Type-Options nosniff;、add_header X-Frame-Options DENY;、add_header X-XSS-Protection "1; mode=block"; - CORS 精确放行:
if ($http_origin ~* ^(https://app\.yourdomain\.com|https://dashboard\.yourdomain\.com)$) { add_header Access-Control-Allow-Origin $http_origin; }


















