主配置文件(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;
}