nginx.conf 配置文件解释



```
# 允许编辑此配置的用户或用户组(默认nginx)
user  nginx;
# 工作衍生进程数,可以同时处理的进程数,通常是 cpu 核数或 cpu 核数的2倍
worker_processes  1;


# 设置错误文件的存放路径(错误类型可选 warn, info, notice, crit 也可不选为空)
error_log  /var/log/nginx/error.log warn;


# 设置进程 pid 存放路径 
pid        /var/run/nginx.pid;


events {
    use epoll; # epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
    worker_connections  1024; # 单个后台 worker process进程的最大并发链接数
}


# 网页相关的 http 请求配置 
http {
    include       /etc/nginx/mime.types; # 文件扩展名与类型映射表
    default_type  application/octet-stream; # 默认文件类型


    #设定请求缓存    
    server_names_hash_bucket_size 128;
    client_header_buffer_size 512k;
    large_client_header_buffers 4 512k;
    client_max_body_size 100m;
    
    #隐藏响应header和错误通知中的版本号
    server_tokens off;
  
    #设置日志模式
    log_format  main  '$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  main;


    # 开启高效传输模式
    sendfile        on;
    
    # 激活 tcp_nopush 参数可以允许把 httpresponse header 和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量
    #tcp_nopush     on;


    #激活 tcp_nodelay, 内核会等待将更多的字节组成一个数据包,从而提高I/O性能
    tcp_nodelay on;
    
    #连接超时时间,单位:秒
    keepalive_timeout  65;
    
    #开启ssi支持,默认是off
    ssi on;
    ssi_silent_errors on;
  
    # 开启gzip, 具体 gzip 相关配置见下文(一, 具体的 gzip 相关配置) ↓
    gzip on;
    
    #反向代理负载均衡设定部分
    #upstream表示负载服务器池,定义名字为 backend_server 的服务器池
    upstream backend_server {
        server   10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
        server   10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
    #设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。
    #这里是在30s内尝试2次失败即认为主机不可用!
    }
    # 具体 upstream 分配方式 详见下文 (三, upstream 模块相关说明)↓




    # 也可以引用外部 基于域名的虚拟主机的配置文件, 详见下文 (二, default.conf 配置)↓
    # include /etc/nginx/conf.d/*.conf;
    
    # 基于域名的虚拟主机
    server {
    # 监听 80 端口
        listen       80;
        
        #定义使用 localhost 访问
        server_name  www.abc.com;
    
        #定义服务器的默认网站根目录位置(也可定义在默认请求 location /{} 里)
        root html;
        
        #定义首页索引文件的名称
        index  index.html index.htm;(也可定义在默认请求 location /{} 里)
            
        # 字符编码
        #charset koi8-r;
        
        #设定本虚拟主机的访问日志 
        #access_log  /var/log/nginx/host.access.log  main;
    
        # 默认请求
        location / {
            root   /usr/share/nginx/html;
        }
        
        # 根目录禁下止访问 .htxxx 文件  
        location ~ /.ht {  
            deny all;  
        }  
        
        # 静态文件, 将符合js,css文件的等设定expries缓存参数,要求浏览器缓存。 
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {  
            #过期30天,静态文件不怎么更新,过期可以设大一点,  
            #如果频繁更新,则可以设置得小一点。  
            expires 30d;  
        }
    
        # 错误页面
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        # 定义错误提示页面  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
}
```


#### 具体的 gzip 相关配置


```
    # 打开或关闭gzip
    gzip on


    # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU
    # 以一个大小为92.6K的脚本文件为例, 其中最后三个数值分别表示压缩比、包大小、平均处理时间以及CPU消耗(100用户并发下)
    -----------------------------------------------
    # http://10.27.180.75/jquery.js 
    # gzip_comp_level 0: 0,94840, 63 [ms], 29%
    # gzip_comp_level 1: 2.43,39005, 248 [ms], 100%
    # gzip_comp_level 2: 2.51,37743, 273 [ms], 100%
    # gzip_comp_level 3; 2.57,36849, 327 [ms], 100%
    # gzip_comp_level 4; 2.73,34807, 370 [ms], 100%
    # gzip_comp_level 5; 2.80,33898, 491 [ms], 100%
    # gzip_comp_level 6; 2.82,33686, 604 [ms], 100%
    # gzip_comp_level 7; 2.82,33626, 659 [ms], 100%
    # gzip_comp_level 8; 2.82,33626, 698 [ms], 100%
    # gzip_comp_level 9; 2.82,33626, 698 [ms], 100%
    -----------------------------------------------
    # 从这我们可以得出结论:
    # 1. 随着压缩级别的升高,压缩比有所提高,但到了级别6后,很难再提高;
    # 2. 随着压缩级别的升高,处理时间明显变慢;
    # 3. gzip很消耗cpu的性能,高并发情况下cpu达到100%
    
    #因此,建议: 
    #1. 一方面,不是压缩级别越高越好,其实gzip_comp_level 1的压缩能力已经够用了,后面级别越高,压缩的比例其实增长不大,反而很吃处理性能。 
    #2. 另一方面,压缩一定要和静态资源缓存相结合,缓存压缩后的版本,否则每次都压缩高负载下服务器肯定吃不住。
    gzip_comp_level 1;
    
    # 通过表达式,表明哪些UA头不使用gzip压缩, 比如:禁用IE 6 gzip
    gzip_disable "MSIE [1-6]\.";
    
    # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩,以K为单位,当值为0时,所有页面都进行压缩。
    gzip_min_length 1k;
    
    # 设置需要进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。如果不在设置类型范围内的请求不进行压缩
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;


    # 是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_vary on;


    # 设置压缩所需要的缓冲区大小,设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。建议此项不设置,使用默认值。     
    gzip_buffers 32 4k;


    # 设置gzip压缩针对的HTTP协议版本, 用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项。默认在http/1.0的协议下不开启gzip压缩。
    gzip_http_version 1.0;
```


#### upstream 模块相关说明
##### 一, upstream 分配方式


##### Nginx的upstream支持5种分配方式,下面将会详细介绍,其中前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式。
1、轮询
##### 轮询是 upstream 的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器 down 掉后,能自动剔除。
```
upstream backend {
    server 192.168.1.101:8888;
    server 192.168.1.102:8888;
    server 192.168.1.103:8888;
}
```


2、weight 
##### 轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
```
upstream backend {
    server 192.168.1.101 weight=1;
    server 192.168.1.102 weight=2;
    server 192.168.1.103 weight=3;
}
```
3、ip_hash 
##### 每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
```
upstream backend {
    ip_hash;
    server 192.168.1.101:7777;
    server 192.168.1.102:8888;
    server 192.168.1.103:9999;
}
# 注意:
# 当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是 weight 和 backup, 会导致负载不均衡。
```
4、fair 
##### fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。如果需要使用这种调度算法,必须下载Nginx的upstr_fair模块。
```
upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    fair;
}
```
5、url_hash,目前用consistent_hash替代url_hash
##### 与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
```
upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    hash $request_uri;
    hash_method crc32;
}
# 其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。
```

文章来源: nginx.conf 配置文件解释

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:nginx.conf 配置文件解释