# 各个容器的配置可能不一样,自动判断
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
如果觉得我的文章对你有用,请随意赞赏