nginx.conf是nginx最主要和唯一的配置文件,nginx中其它的配置文件最终都可能会以inclue进到这个文件中。
概括
打开nginx.conf,我们会发现基本上每一个nginx.conf 都可以分成 main(全局设置)、events(nginx工作模式)、http(http设置)、 sever(主机设置)、location(URL匹配)、upstream(负载均衡服务器设置) 六个配置部分。
main
events {
....
}
http {
....
upstream myproject {
.....
}
server {
....
location {
....
}
}
server {
....
location {
....
}
}
....
}
main
user www; #nginx的用户,如果访问或者读写的文件不是该用户的或者该用户没有权限会返回403
worker_processes 1; #worker进程的个数,一般等于cpu的核数,可以通过 cat /proc/cpuinfo查看核数
error_log logs/error.log; # nginx错误日志存放的路径
pid logs/nginx.pid; #nginx的pid
worker_rlimit_nofile 65535; #进程能打开的文件数,与ulimit -n保持一致
event
events {
use epoll; # 使用epoll作为IO模型
worker_connections 65535; #每个进程能处理的连接数,开启了反向代理的nginx能处理的连接数 = worker_connections * worker_processes / 4;
}
http
用来处理http请求的模块
http {
include mime.types; # nginx支持的http的contentType类型
default_type application/octet-stream; #如果传过来的contentType不是mine.types类型,则当作这个处理
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 logs/access.log main; #日志地址
sendfile on; # 和下面的 tcp_nopush都是开启高效日志处理
tcp_nopush on;
keepalive_timeout 65; # 设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接
gzip on; # 开启压缩功能
}
server
(主机设置)http的子模块,主要用于定义一个虚拟机,指定虚拟主机域名、IP和端
server {
listen 80; #监听的端口号
server_name localhost; #监听的域名
charset utf-8; # 编码设置
access_log logs/host.access.log main; # 日志地址
error_page 404 /404.html; # 当返回404的时候对应的状态码
error_page 500 502 503 504 /50x.html;
}
location
server的子模块(URL匹配特定位置后的设置),用于匹配网页位置(比如,根目录“/”,“/images”,等等)
location ^~ /checkonline/ { # 匹配的url,这里是匹配/checkonline/开头的url
root html; # server 的根目录
index index.html index.htm index.jsp; # 默认首页地址
proxy_redirect off; # 通过设置响应头Location字段来设置跳转地址
proxy_set_header Host $host; # 设置跳转请求头
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8302/checkonline/; # 跳转服务器
}
匹配规则
- = 开头表示精确匹配
- ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
- ~ 开头表示区分大小写的正则匹配;
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
upstream
http的子模块 上游服务器设置,主要为反向代理、负载均衡相关配置
upstream hello-servers {
#ip_hash;
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=30s;
}
负载均衡算法
ip_hash : 根据ip的hash结果分配,这样子来自同一个ip的访客会固定访问一个后端服务器,有效解决了动态网页存在session共享的问题.
weight 轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
fair 比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
url_hash: 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
down : 表示该server暂不参与负载均衡
backup : 只有其他非back机器出现故障或者忙,才会请求backup机器
max_fails : 允许失败的次数,默认为1, 失败后会返回proxy_next_upstream模块定义的错误
fail_timeout : 在经历了max_fails次失败后,暂停服务的时间
网友评论