首页 > 清河洛 > Nginx配置文件详解
2018
04-27

Nginx配置文件详解

...              #全局块(也称为main块),配置影响nginx全局的指令
events {         #配置影响nginx服务器或与用户的网络连接
   ...
}
http {           #配置代理,缓存,日志定义等和第三方模块的配置
    ...          #http全局配置项
    server {       #配置虚拟主机的相关参数,可以嵌套多个server
        ...        #当前server全局配置项
        location [PATTERN]{   #配置请求的路由及各种请求的处理
            ...
        }
    }
}

upstream bakend {    upstream集群负载均衡定义块
    ...
}

全局块

user www www; #定义Nginx运行的用户和用户组
worker_processes 8; #nginx进程数,建议设置为等于CPU总核心数。
error_log /var/logs/error.log [debug|info|notice|warn|error|crit]; #全局错误日志定义类型
pid /var/nginx.pid;  #进程pid文件
worker_rlimit_nofile 65535; #一个nginx进程的最多打开文件描述符数
    理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

events块

use epoll; #nginx针对不同的操作系统,有不同的事件模型
    epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型
    select、poll属于标准事件模型,如果当前系统不存在更有效的模型,nginx会选择select或poll
accept_mutex on; #设置网路连接序列化,防止惊群现象发生
multi_accept off; #一个进程是否同时接受多个网络连接
worker_connections 65535; #单个进程最大连接数
keepalive_timeout 60; #keepalive超时时间。
client_header_buffer_size 4k; #客户端请求头部的缓冲区大小,一般设置为系统分页大小的整数倍
open_file_cache max=65535 inactive=60s; #为打开文件指定缓存,默认没有启用,max指定缓存数量,建议和打开文件描述符数一致,inactive是指经过多长时间文件没被请求后删除缓存
open_file_cache_valid 80s; #指定多长时间检查一次缓存的有效信息,使用字段:http, server, location
open_file_cache_min_uses 1; #open_file_cache指令中指定时间范围内缓存文件最小打开数量,使用字段:http, server, location
open_file_cache_errors off; #指定是否在搜索一个文件是记录cache错误,使用字段:http, server, location

http全局配置项

include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
log_format name string; # 自定义访问日志格式
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #客户端请求头的缓冲区大小,一般设置为系统分页大小的整数倍
large_client_header_buffers 4 64k; #客户请求头缓冲大小。默认会用client_header_buffer_size来读取header值,如果header过大,会使用large_client_header_buffers来读取
client_max_body_size 8m; #设定最大通过nginx上传文件的大小
sendfile on; #是否开启高效文件传输模式
    指定nginx是否调用sendfile函数来输出文件,对于普通应用设为on
    如果进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载
    注意:如果图片显示不正常把这个改成off。
autoindex off; #开启目录列表访问,默认关闭
autoindex_exact_size on; #是否显示出文件的确切大小,单位是bytes,默认on,改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime off; #是否显示的文件时间为GMT时间,默认off,改为on后,显示的文件时间为所在服务器时间
tcp_nopush on; #是否允许使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
tcp_nodelay on;
keepalive_timeout 120; #长连接超时时间,单位是秒
client_body_in_file_only on:是否将post过来的数据记录到文件中用来分析
client_body_temp_path:设置post数据文件的临时目录,可以设置最多3层目录

#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型
gzip_vary on;

auth_basic [ text|off ] #用于HTTP基本认证的开启和提示语,默认off,作用域http,server,location
auth_basic_user_file user_pwd_file; #为HTTP基本认证指定用户名密码文件,文件格式类似于下面的内容:
    用户名:密码
    用户名2:密码2:注释
    用户名3:密码3
    密码必须使用函数crypt(3)加密
limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

server块

listen 80;  #监听端口
listen 443 ssl; #同时监听443端口并打开ssl
ssl on; #listen 443后面添加ssl等同于该行配置
server_name domain1 domain2 ...; #绑定域名,可以有多个,用空格隔开
index index.php index.html index.htm; #默认主页文件
root /www/; #网站根目录
expires n[s|m|h|d]|epoch|max|off; #页面缓存,设置响应头的Expires和Cache-Control
    n[s|m|h|d]:设置缓存时间为当前系统时间加上设定值
    epoch指定Expires的值为1970.1.1 00:00:01
    #max表示Expires为2037年12月31日23:59:59,Cache-Control为10年
    参数off禁止修改应答头中的Expires和Cache-Control
keepalive_requests 120; #单连接请求上限次数
access_log "path/logs/access.log" name; #使用name指定格式保存访问日志
access_log off; #关闭访问日志功能,一般在location块中使用
error_page code path/code_file; # 指定返回状态码code的返回内容
add_header option value; #添加指定的响应头
server_tokens off; #禁止在响应头中出现服务器版本
ssl_certificate "path/file.crt"; #指定SSL证书
ssl_certificate_key "path/file.key"; #指定ssl证书密钥
ssl_protocols TLSv1.1 TLSv1.2; #SSL使用的协议
ssl_ciphers "passwd" #ssl密码
ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    #指定支持的和不支持的加密套件
ssl_prefer_server_ciphers  on; #ssl首选服务器密码
ssl_session_timeout 5m; #ssl会话超时
ssl_session_cache shared:SSL:10m; #ssl会话缓存
error_page err_codes err_file; #请求错误指定错误显示内容
rewrite PATTERN replacement [flag]; #url地址重定向
client_max_body_size 1m; #客户端请求数据最大值(如上传大文件)
    超过指定大小报错413 Request Entity Too Large
client_body_buffer_size 128k; #客户端请求数据最大内存占用大小
    请求数据小于该值数据直接保存到内存中
    请求数据大于该值小于client_max_body_size值则把请求数据保存到client_body_temp_path设置的临时目录中
allow/deny address | CIDR | unix: | all
    表示允许/拒绝某个ip或ip段访问;值为'unix:'表示允许socket的访问
    在nginx中,allow和deny的规则是按顺序执行的
    location ~ admin {
        allow 192.168.0.0/24;
        allow 110.21.33.121;
        deny all;
    }
    访问uri中包含admin的请求,允许192.168.0.0/24网段和110.21.33.121这个IP请求,其他来源IP全部拒绝

location块

location区段指令为匹配指定规则的请求uri(不包含查询字符串)单独配置配置项

location [= | ~ | ~* | ^~ | @] /uri/ {
    configuration
}
    =表示精确匹配,只有完全匹配才能生效。
    ^~表示普通字符串匹配上以后不再进行正则匹配。
    ~表示区分大小写的正则匹配。
    ~*表示不区分大小写的正则匹配。 
    不带任何修饰符,表示前缀匹配。
    location / 通用匹配,匹配任何未匹配到其他location的请求。
    @表示一个自定义的location,这些区段客户段不能访问,只可以由内部产生的请求来访问

location匹配的优先级(与location在配置文件中的顺序无关):

    =精确匹配会第一个被处理。匹配后nginx停止搜索其他location指令
    ^~只匹配该规则,匹配后nginx停止搜索其他location指令
    其他匹配按匹配长度最长匹配(后面更长的匹配会覆盖前面较短的匹配)

location指令中常用配置指令

1、alias别名配置,将location匹配到的URL路径指向alias指定(目录结尾一定要有反斜杠)的路径

    location /test/ {
        alias /usr/local/;
    }
    请求/test/1.jpg,会返回文件/usr/local/1.jpg
    在正则匹配的location内如果含捕获语句,alias配置中也要引用这些捕获值:
    location ~* /img/(.+\.(gif|png|jpeg)) {
        alias /usr/local/images/$1;
    }

2、root根路径配置:将location匹配到的URL路径的根目录指向root配置的路径如:

    location /test/ {
        root /usr/local/;
    }
    请求/test/1.jpg,将会返回文件/usr/local/test/1.jpg

3、反向代理配置:将请求转发到指定的URL,详细配置项点击查看

4、正向代理配置:将收到请求转发到后台服务器处理,通过ngx_http_fastcgi_module模块实现,可用位置:location,if in location

    fastcgi_pass address; #转发到后台的fastcgi服务器地址
    fastcgi_index names; #fastcgi默认的主页文件,多个使用空格隔开
    fastcgi_param parameter value [if_not_empty]; #设置传递给fastcgi服务器的头字段

    #其他相关参数,可以改善网站的性能,减少资源占用,提高访问速度。
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

5、stub_status on:用于查看Nginx的一些状态信息

location /nginx_status {
    stub_status on;
    access_log off;
}
浏览器访问http[s]://domain/nginx_status会显示Nginx的一些状态信息,返回各数据项说明:
    Active connections: 6 #表示当前nginx正在处理的活动连接数为6
    Server accepts handled requests request_time
        13057 13057 11634 2230854
        nginx总共处理了13057个连接,成功创建了13057次握手(证明中间没有失败的)
        总共处理了11634个请求,总共请求时间2230854
    Reading: nginx读取到客户端的Header信息数
    Writing: nginx返回给客户端的Header信息数
    Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing)
        意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接。
        所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的
        如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中

upstream块

upstream用于配置集群负载均衡

1、根据指定条件轮询

upstream bakend {
    [ip_hash;]
    server host1:port1 [option ...];
    server host2:port2 [option ...];
    ...
}
    bakend:表示为该集群负载均衡配置起一个名字,供后面的proxy_pass http://backend指令使用
    ip_hash:表示每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
    每个设备的状态(option)可以为:
    down:表示当前server暂时不参与负载
    weight=1:指定轮询几率,weigth表示权值,权值越高被分配到的几率越大
    max_fails=1:指定允许请求失败的次数,超过后临时设置该server状态为down
    fail_timeout=30s:指定max_fails次失败后,设置该server状态为down的时间
    backup:其它所有的非backup机器down或者忙的时候,才请求backup机器。这台机器压力会最轻

2、fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream backend {
    server server1;
    server server2;
    fair;
}

3、url_hash(第三方),按访问url的hash结果来分配,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

upstream backend {
    server server1;
    server server2;
    hash $request_uri;
    hash_method crc32;
}
    如果使用了hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。