【Nginx】配置文件
主配置文件(nginx.conf)
nginx.conf配置文件由三部分组成
worker_processes 1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个 events { #单个进程最大连接数(最大连接数=连接数*进程数) #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。 worker_connections 1024; } http { #文件扩展名与文件类型映射表(是conf目录下的一个文件) include mime.types; #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输 default_type application/octet-stream; #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。 sendfile on; #长连接超时时间,单位是秒 keepalive_timeout 65; #虚拟主机的配置 server { #监听端口 listen 80; #域名,可以有多个,用空格隔开 server_name localhost; #配置根目录以及默认页面 location / { root /www/test80; index index.html index.htm; } #出错页面配置 error_page 500 502 503 504 /50x.html; #/50x.html文件所在位置 location = /50x.html { root html; } } #虚拟主机的配置 server { #监听端口 listen 81; #域名,可以有多个,用空格隔开 server_name localhost; #配置根目录以及默认页面 location / { root /www/test81; index index.html index.htm; } #出错页面配置 error_page 500 502 503 504 /50x.html; #/50x.html文件所在位置 location = /50x.html { root html; } } }
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置影响nginx服务器整体运行的配置指令
#user nobody; worker_processes 1; --工作进程数,一般设置成内核数量相同,值越大处理并发越多 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; --进程pid存放路径
第二部分:events块
events块主要影响nginx服务器与用户的网络连接
events { worker_connections 1024; --单个工作进程的连接数 }
第三部分:http块
http块又包括http全局块和server块
- http全局块:配置包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、连接请求数上限
- server块:和虚拟主机有密切关系,每个http块可以包括多个server块,每个server块代表一个虚拟主机,每个server块也分为全局server块,以及可以同时包含多个location块。
- 全局server块:最常见配置本虚拟主机的监听配置和主机名称、端口
- location块:这块主要作用是基于nginx服务器接收URL进行匹配,对特定请求进行处理。地址定向、数据缓存和应答控制。还有许多第三方模块的配置在这里进行
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; --超时时间 #gzip on; server { --一个站点、一个虚拟主机 listen 80; --端口 server_name www.fan.cn; --域名 location / { root html/www; --目录 index index.html index.htm; --页面 } error_page 404 /404.html; --404错误页面显示 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
server_name匹配规则
server_name用来配置域名或ip,我们可以在同一个server_name中配置多个域名
- 完整匹配
server中可以配置多个域名,例如:
server_name www.fan.cn cart.fan.cn;
- 通配符匹配
server_name *.fan.cn;
需要注意的是精确匹配的优先级大于通配符匹配和正则匹配。
- 正则匹配
server_name ~^[0-9+]\.fan\.cn$;
正则匹配格式,必须以开头。如果开头没有,则nginx认为是精确匹配。在逻辑上,需要添加^和$锚定符号。
~*
不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)
!~
区分大小写不匹配
!~*
不区分大小写不匹配
location说明
用于配置指定路径
- =:用于不含正则表达式的uri前,要求请求字符串与uri完全匹配,如果匹配成功就不继续搜索其他location
- ~:用于表示uri包含正则表达式,并且区分大小写
- ~*:用于表示uri包含正则表达式,并且不区分大小写
- ^*:用于不含正则表达式的uri前,
负载均衡流量分配策略
轮询(默认):逐一分发,如果服务器down掉会自动剔除
upstream myserver{ server 127.0.0.1:8080; server 127.0.0.1:8081; }
权重(Weight):权重越高,被分配流量越多
upstream myserver{ server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=8; }
ip_hash:按ip的hash结果分配,这样的话每个ip固定分配到一个服务器上,可以解决session问题
upstream myserver{ ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; }
fair:按服务器响应时间分配,响应时间短的服务器优先分配
upstream myserver{ server 127.0.0.1:8080; server 127.0.0.1:8081; fair; }