TrumanWong

Nginx配置文件优化(一)

TrumanWong
11/26/2021

学习Nginx服务的难点在于对配置文件的理解和优化,熟练掌握Nginx配置文件参数的含义可以更快地掌握Nginx,以下为nginx.conf配置文件常用参数详解:

# 定义Nginx运行的用户和用户组
user  www-data www-data;
# 启动进程,通常设置成和CPU的数量相等,Nginx默认是没有开启利用多核CPU配置的
worker_processes  4;
# 为每个进程分配CPU,以下示例将4个进程分配到4个CPU,当然可以写多个,或者将一个进程分配到多个CPU
worker_cpu_affinity 00000001 00000010 00000100 00001000;
# 该指令是当一个Nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与Nginx进程数相等,但是Nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致
worker_rlimit_nofile 102400;

# 全局错误日志及pid文件,错误日志定义等级[debug|info|notice|warn|error|crit]
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    # epoll是多路复用I/O的一种方式,但是仅用于Linux2.6以上内核,可以大大提高Nginx的性能
    use epoll;
    # 单个后台worker_process进程的最大并发连接数(最大连接数=连接数*进程数)
    worker_connections 102400;
    # 尽可能多地接受请求
    multi_accept on;
}

# 设定HTTP服务器,利用它的反向代理功能提供负载均衡支持
http {
    # 设定MIME类型,类型有mine.types文件定义
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    # 允许客户端请求的最大单文件字节数
    client_max_body_size 64M;
    # sendfile指定Nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用必须设为on,如果用来进行下载等应用磁盘I/O重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime
    sendfile on;
    # 开启目录列表访问,合适下载服务器,默认关闭
    # autoindex on;
    # 防止网络阻塞
    tcp_nopush on;
    # keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,keepalive-timeout功能可避免建立或重新建立连接
    keepalive_timeout 60;
    # 提高数据实时响应
    tcp_nodelay on;
    # 日志格式
    log_format  compression  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    # 设定日期格式
        access_log  /var/log/nginx/access.log  compression buffer=32k;
        server_tokens off;
    
    # 开启gzip压缩
    gzip  on;
    gzip_min_length 20;
    gzip_buffers 32 4k;
    gzip_http_version 1.1;
    # 压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快,值越大,消耗CPU比较高
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml application/json;
    # 缓冲区代理缓冲用户端请求的最大字节数
    client_body_buffer_size 16k;
    proxy_buffering on;
    # Nginx与后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout 90;
    # 连接成功后,后端服务器响应时间(代理接收超时)
    proxy_read_timeout 90;
    # 设置代理服务器(Nginx)保存用户头信息的缓冲区大小
    proxy_buffer_size 8k;
    # proxy_buffers 缓冲区,网页平均在32KB以下,可以这样设置,高负荷下缓冲大小(proxy_buffers * 2)
    proxy_buffers 8 8k;
    # 设定请求缓冲
    large_client_header_buffers 4 4k;
    # 客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求的头部大小不会超过1KB,不过一般系统分页都要大于1KB,所以这里设置为分页大小,分页大小可以用命令getconf PAGESIZE取得
    client_header_buffer_size 4K;
    # 为打开文件指定缓存,默认不启用,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存
    open_file_cache max=102400 inactive=20s;
    # 多长时间检查一次缓存的有效信息
    open_file_cache_valid 30s;
    # open_file_cache指定中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的
    open_file_cache_min_uses 1;
    open_file_cache_errors on;
    # 包含其他配置文件,如自定义的虚拟主机
    include /etc/nginx/conf.d/*.conf;
}