# 各个容器的配置可能不一样,自动判断
worker_processes 2;
events {
# 一个时刻内可以接收多个新的连接,提高处理效率
multi_accept on;
# 每个 Worker 允许最多连接数,最大连接数是 worker_processes x worker_connections
worker_connections 100000;
}
# Worker 进程最大打开文件数
worker_rlimit_nofile 100000;
http {
charset utf-8;
default_type application/octet-stream;
# 日志格式
log_format main '$time_local - $remote_addr - $http_x_forwarded_for - $request - $http_host - $status - $request_time - $request_uri - $http_user_agent - $http_staffname';
# 过滤掉HEAD和OPTIONS
map $request_method $loggable_method {
HEAD 0;
OPTIONS 0;
default 1;
}
# 过滤日志
map $http_user_agent $loggable {
~*clb-healthcheck 0;
default $loggable_method;
}
upstream backend {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8090 weight=2;
keepalive 64;
}
proxy_cache_path /cache levels=1:2 keys_zone=my_cache:100m max_size=100g inactive=10m use_temp_path=off;
# /cache 指定了缓存文件存储的路径。
# levels=1:2 指定了缓存文件的目录层级结构。这里的 1:2 表示一级目录有一个子目录,二级目录有两个子目录。这有助于提高文件系统的性能。
# keys_zone=my_cache:100m 指定了缓存键的内存区域。my_cache是缓存区域的名称,100m 表示分配 100MB 的内存用于存储缓存键和元数据。
# max_size=100g: 指定了缓存的最大大小。这里的 100g 表示缓存的最大大小为 100GB。当缓存大小超过这个限制时,Nginx 会自动删除最旧的缓存文件
# inactive=10m: 指定了缓存文件的非活动时间。如果一个缓存文件在指定的时间段内没有被访问,它将被视为非活动文件,并有可能被清理。
# use_temp_path=off 禁用了临时文件路径。默认情况下,Nginx 会使用临时文件路径来存储缓存文件,但这里设置为 off,表示禁用使用临时文件路径。
access_log /usr/local/nginx/log/info.log main if=$loggable;
error_log /usr/local/nginx/log/error.log;
# 隐藏nginx版本号
server_tokens off;
# 设置存放域名的最大散列表的存储桶的大小,依赖 CPU L1缓存
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
# 限制上传文件大小,上传文件一般走外部接口
client_max_body_size 8m;
# 开启高效文件传输模式,如果图片显示不正确把这个改为off
sendfile off;
# sendfile开启时有效,在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nopush on;
# sendfile开启时有效,不缓存数据,一段一段的发送
tcp_nodelay on;
# 只有静态文件,这个可以设置小一点,默认是75s,时间越长无用线程越多
keepalive_timeout 20;
server {
listen 80 default;
# 设置跨域
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
location /static {
# 启用 Gzip 压缩功能。
gzip on;
# 指定只有大于等于 1KB 大小的响应才会被压缩。
gzip_min_length 1k;
# 设置 Gzip 压缩时的缓冲区大小。这里的配置表示使用 4 个缓冲区,每个缓冲区大小为 16KB。
gzip_buffers 4 16k;
# 指定 Gzip 压缩仅适用于 HTTP 1.0 及以上的请求。
gzip_http_version 1.0;
# 置 Gzip 压缩的压缩级别。级别为 1-9,数字越大表示压缩比越高,但同时也会消耗更多的 CPU 资源。
gzip_comp_level 2;
# 定需要进行 Gzip 压缩的 MIME 类型。在这个例子中,文本文件、JavaScript、CSS、XML 和 JavaScript 文件将被压缩。
gzip_types text/plain application/x-javascript text/css application/xml text/javascript;
# 在响应头中添加 Vary: Accept-Encoding,以通知缓存服务器根据不同的 Accept-Encoding 头字段提供不同的缓存副本。
gzip_vary on;
# 这个指令指定了使用名为 "my_cache" 的缓存区域。需要在 Nginx 配置中定义该缓存区域。
proxy_cache my_cache;
# 启用了缓存重新验证。当缓存过期时,Nginx 会向后端服务器发送一个条件请求,以检查资源是否仍然有效。
proxy_cache_revalidate on;
# 这个指令指定了在后端服务器出现错误(如 500、502、503、504)或超时时,允许使用过期的缓存响应。
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 这个指令指定了对于状态码为 200 的响应,将其缓存有效期设置为 1 分钟。可以根据需要设置不同的状态码和缓存有效期
proxy_cache_valid 200 1m;
# 后台缓存更新。当缓存过期时,Nginx 会在后台异步更新缓存,而不会阻塞客户端请求。
proxy_cache_background_update on;
# 指定了用于生成缓存键的变量。在这个示例中,缓存键由协议($scheme)、代理主机($proxy_host)和请求 URI($request_uri)组成。
proxy_cache_key $scheme$proxy_host$request_uri;
# 这个指令添加了一个名为 "X-Cache-Status" 的响应头,其值为 $upstream_cache_status。这个响应头用于指示缓存的命中状态,可以用于调试和监控缓存的使用情况。
add_header X-Cache-Status $upstream_cache_status;
# 用于禁用反向代理服务器在响应中自动修改 Location 头字段和响应体中的 URL。
# 当 Nginx 作为反向代理服务器时,它会接收到后端服务器的响应,并将其转发给客户端。在这个过程中,Nginx 会自动修改响应中的 Location 头字段和响应体中的 URL,以反映代理服务器的地址和端口。然而,通过设置 proxy_redirect off;,可以禁用这种自动重定向行为
proxy_redirect off;
# 请求头中的 Host 字段设置为 $host,以将原始请求的主机名传递给后端服务器。
proxy_set_header Host $host;
# $proxy_add_x_forwarded_for 是一个内置变量,它会自动包含客户端的 IP 地址,并将其添加到 X-Forwarded-For 头中。如果请求已经包含了 X-Forwarded-For 头,那么该变量会将客户端的 IP 地址追加到已有的值后面。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend/;
# 设置客户端缓存时间:30d
add_header Cache-Control max-age=2592000;
}
location / {
proxy_pass http://backend/;
}
}
}
最后修改:2023 年 11 月 13 日 01 : 01 AM
© 允许规范转载
3 条评论
这篇文章如同一幅色彩斑斓的画卷,每一笔都充满了独特的创意。
文字流畅如丝,语言优美动人,读来令人心旷神怡。
作者的观点新颖且实用,让人在阅读中获得了新的思考和灵感。