Nginx 优化响应的一些小建议

本文介绍如何通过启用Gzip压缩及设置缓存头来优化Nginx服务器性能,包括具体的配置示例,如gzip压缩级别、最小压缩文件大小及常见文件类型的缓存策略。

1、 启用 Gzip 压缩
默认情况下,压缩功能在 Nginx 中是禁用的,但因为安装方式或 Linux 发行版的不同,一些情况下可能在默认的 nginx.conf 配置文件中是启用状态。这里,我们在 NGINX 配置文件中启用了 gzip 压缩:

gzip on;
gzip_types application/xml
    application/json
    text/css
    text/javascript
    application/javascript;
gzip_vary on;
gzip_comp_level 6;
gzip_min_length 500;
  1. 设置缓存头
    浏览器检索网页文件时,会将副本保留在本地磁盘缓存中。这样,当你再次访问该页面时,浏览器就不必从服务器重新获取文件。每个浏览器都有自己的使用逻辑,来决定何时使用该文件对应的本地副本,以及何时在服务器更改了该文件时再次获取它。但是,作为网站所有者,你可以在发送的 HTTP 响应中设置缓存控制和过期标头,以提高浏览器的缓存行为的效率,从而减少很多不必要的 HTTP 请求。
    首先,可以为字体和图像设置较长的缓存过期时间,这些字体和图像可能不会经常更改。在下面的示例中,设置客户端浏览器将字体和图像在本地缓存中保留一个月。
location ~* \.(?:jpg|jpeg|gif|png|ico|woff2)$ {
    expires 1M;
    add_header Cache-Control "public";
}
### 设置 Nginx 响应体大小的方法 在 Nginx 中,可以通过多种方式控制响应体的大小,主要涉及客户端请求体和服务器响应体的限制。以下是一些常见的配置方法: #### 1. 控制客户端请求体大小 Nginx 默认允许的客户端请求体大小为 1MB。如果需要上传更大的数据(例如 base64 图片),可以通过 `client_max_body_size` 指令调整上限: ```nginx http { client_max_body_size 20M; } ``` 或者在特定的 `server` 或 `location` 块中设置: ```nginx server { listen 80; server_name example.com; client_max_body_size 20M; location /upload/ { proxy_pass http://backend_server; } } ``` 此设置确保客户端可以发送更大的请求体,适用于件上传等场景。 #### 2. 记录响应体大小 为了监控 Nginx响应内容大小,可以在日志格式中使用 `$body_bytes_sent` 变量,该变量表示实际发送给客户端的响应体字节数(不包括响应头)[^1]: ```nginx log_format custom '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"'; access_log /var/log/nginx/access.log custom; ``` 通过这种方式,可以在访问日志中记录每个请求的响应体大小,便于后续分析和优化。 #### 3. 控制响应体缓冲行为 默认情况下,Nginx 会对响应体进行缓冲,这可能会影响大体积数据(如 base64 图片)的传输效率。为了减少内存占用并提高实时性,可以关闭缓冲功能: ```nginx location /api/ { proxy_pass http://backend_server; proxy_buffering off; # 关闭缓冲 } ``` 此配置使 Nginx 直接将后端返回的数据流式转发给客户端,避免因缓冲导致的延迟或内存问题。 #### 4. 启用分块传输编码(Chunked Transfer Encoding) 如果后端服务支持分块传输编码,建议Nginx 中启用相关配置,以确保大响应体能够被高效处理: ```nginx location /api/ { proxy_pass http://backend_server; proxy_http_version 1.1; chunked_transfer_encoding on; } ``` 该设置允许 Nginx 在接收到分块响应时保持其结构,从而实现边接收边发送的效果,提升性能[^2]。 #### 5. 响应头中添加件大小信息 如果希望在响应头中明确显示响应体大小,可以通过 `add_header` 指令实现: ```nginx location /files/ { add_header X-Content-Size $body_bytes_sent; } ``` 这样,每次请求 `/files/` 路径下的资源时,响应头中都会包含一个 `X-Content-Size` 字段,值为当前响应体的大小。 --- ### 示例:完整 Nginx 配置片段 ```nginx server { listen 80; server_name example.com; client_max_body_size 20M; log_format custom '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"'; access_log /var/log/nginx/access.log custom; location /api/ { proxy_pass http://backend_server; proxy_buffering off; proxy_http_version 1.1; chunked_transfer_encoding on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /files/ { add_header X-Content-Size $body_bytes_sent; } } ``` 上述配置结合了请求体大小控制、响应体日志记录、缓冲禁用以及分块传输支持,适用于需要处理大体积响应体的场景,如 base64 图片传输。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值