技术分享:nginx 常用配置注意事项解读
				
									
					
					
						|  | 
							admin 2025年7月5日 10:28
								本文热度 1081 | 
					
				 
				今天,我们将深入探讨 Nginx 的 6 个关键进阶配置,这些细节在实际生产环境中至关重要,能显著提升性能、安全性和灵活性。 主要配置项如下:
- root与- alias指令的本质区别
- 反向代理 proxy_pass 高级配置剖析
- try_files 的灵活应用场景
- 性能优化gzip压缩和表态资源缓存
- Cookie 安全与行为控制
- 安全加固方案
下面分别介绍每一项的配置及注意事项:
一、Nginx 中 root 与 alias 指令的区别
location /images/ {    root /data/website;}
对于请求 /images/logo.png,Nginx 会查找 /data/website/images/logo.png
location /images/ {    alias /data/website/;}
对于请求 /images/logo.png,Nginx 会查找 /data/website/logo.png注意: alias 的路径后面必须加上  ‘/’  root后面可不加 ‘/’
三、理解Nginx 中 try_files 指令
location / {  try_files $uri $uri/ /index.html;}
- $uri- 尝试直接匹配请求的URI对应的文件
 
- $uri/- 尝试将URI作为目录查找
 
- /index.html- 如果前两者都不存在,则返回index.html
 
- 只有一个实际的HTML文件(index.html) 
- 前端路由在客户端处理 
- 直接访问路由路径时服务器上没有对应文件 
举个例子假如没有这个配置,当用户刷新非根路由(如/dashboard)时,Nginx会返回404,因为服务器上不存在/dashboard这个文件。注意:如果前端使用的是哈希路由,可能不需要此配置,因为哈希后的内容不会发送到服务器。
1. 启用Gzip压缩
gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Gzip 压缩的好处
- 减少带宽占用,特别是对移动用户更有利 
- 提升首次内容渲染时间(FCP) 
2. 静态资源缓存
location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {  expires 1y;  access_log off;  add_header Cache-Control "public";}
缓存的好处
当 Nginx 作为反向代理时,默认会传递客户端的 Cookie 到后端服务器server {    location / {        proxy_pass http://backend;
                proxy_set_header Cookie $http_cookie;        proxy_pass_header Set-Cookie;
                proxy_cookie_domain ~^(.+)$ $host;        proxy_cookie_path / /;        proxy_cookie_flags ~ secure HttpOnly;
                header_filter_by_lua_block {            if ngx.header["Set-Cookie"] then                ngx.header["Set-Cookie"] = {                    ngx.header["Set-Cookie"] .. "; SameSite=Lax"                }            end        }    }}
if ($request_method !~ ^(GET|POST|HEAD)$) {    return 405;}
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;location / {    limit_req zone=req_limit burst=20;}
- limit_req_zone定义限流规则
 
- $binary_remote_addr:以客户端的IP地址作为限流键(比- $remote_addr更节省内存)。
 
- zone=req_limit:10m:创建名为- req_limit的共享内存区,分配10MB空间(约可存储16万个IP状态)。
 
- rate=10r/s:限制每个IP的平均请求速率为每秒10个请求。
 
- limit_req应用限流规则
 
ssl_protocols TLSv1.2 TLSv1.3;      ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;   ssl_session_cache shared:SSL:10m; 
阅读原文:原文链接
该文章在 2025/7/7 11:41:36 编辑过