nginx配置文件结构
1、整体配置架构
main #全局设置
|
--Events
|
--HTTP
|
--upstream #负载均衡设置
|
--Server #主机设置
|
--location #URL匹配特定位置的设置
|
--location
..
|
--Server
..
server 继承main,location继承server,upstream既不会继承其他设置也不会被继承。
模块指令:主模块指令、事件模块指令、HTTP核心模块指令
2、全局(main)配置
user nobody nobody; #主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行
worker_processes 2; #指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可
error_log logs/error.log notice; #错误日志路径,debug、info、notice、warn、error、crit
pid logs/nginx.pid; #用来指定进程pid的存储文件位置
worker_rlimit_nofile 65535; #用于绑定进程和cpu
events{ #events事件指令是设定Nginx的工作模式及连接数上限
use epoll; #工作模式,linux首选epoll。其他select、poll、kqueue、epoll、rtsig和/dev/poll
worker_connections 65536; #定义nginx每个进程最大连接数。
}
http{
}
最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
linux系统中,进程最大连接数受linux系统进程的最大打开文件数限制。
3、http服务器配置
http{
include conf/mime.types; #主模块指定,实现对配置文件所包含的文件的设定
default_type application/octet-stream; #设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式
#----nginx日志输出格式start
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
#-----nginx日志输出格式end
#---gzip模块begin
gzip on;
gzip_min_length 1k; #允许压缩的页面最小字节数
gzip_buffers 4 16k; #表示申请4个单位为16K的内存作为压缩结果流缓存
gzip_http_version 1.1; #用于设置识别HTTP协议版本
gzip_comp_level 2; #用来指定GZIP压缩比
gzip_types text/html; #指定压缩的类型
#----gizp模块end
client_max_body_size 20m; #设置允许客户端请求的最大的单个文件字节数
client_header_buffer_size 32K; #用于指定来自客户端请求头的headerbuffer大小
large_client_header_buffers 4 32k; #指定客户端请求中较大的消息头的缓存最大数量和大小
Sendfile on; #开启高效文件传输模式
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60; #置客户端连接保持活动的超时时间
client_header_timeout 10; #设置客户端请求头读取超时时间
client_body_timeout 10; #设置客户端请求主体读取超时时间
send_timeout 10; 指定响应客户端的超时时间。这个超时仅限于两个连接活动 之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
}
4、upstream
upstream panel_gateway {
server 172.16.2.173:27002;
server 172.16.2.174:27002;
}
配好location 模块使用
- nginx负载均衡算法
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
stream backserver {
server 192.168.0.12;
server 192.168.0.13;
}
- Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
upstream backserver {
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=8;
}
- ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
upstream backserver {
ip_hash;
server 192.168.0.12:88;
server 192.168.0.13:80;
}
- fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
upstream backserver {
server server1;
server server2;
fair;
}
- url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
5、server虚拟主机配置
server{
listen 80; #listen用于指定虚拟主机的服务端口
server_name 192.168.8.18 cszhi.com; #用来指定IP地址或者域名,多个域 名之间用空格分开
index index.html index.htm index.php; #index用于设定访问的默认首 页地址
root /wwwroot/www.cszhi.com #指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。前端存放位置
charset gb2312; #设置网页的默认编码格式
access_log logs/www.ixdba.net.access.log main #用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式
6、location
URL地址匹配,支持正在表达式,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /wwwroot/www.cszhi.com;
expires 30d;
}
#对网页URL进行分析处理,所有扩展以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理
7、location匹配规则
#语法
location [=|~|~*|^~] /uri/ { … }
* = 严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
* ~ 区分大小写匹配(可用正则表达式)
* ~* 不区分大小写匹配(可用正则表达式)
* !~ 区分大小写不匹配
* !~* 不区分大小写不匹配
* ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测 试正则表达式
eg:
* location / {} 匹配任意请求
* location ~* .(gif|jpg|jpeg)$ {
rewrite .(gif|jpg|jpeg)$ /logo.png;
} 不区分大小写,匹配以gif、jpg、jpeg结尾的请求,并将该请求重定向到 /logo.png请求
# alias与root
* root 实际访问文件路径会拼接URL中的路径
* alias 实际访问文件路径不会拼接URL中的路径
eg:
* location ^~ /sta/ {
alias /usr/local/nginx/html/static/;
}
请求:http://test.com/sta/sta1.html
实际访问:/usr/local/nginx/html/static/sta1.html 文件
* location ^~ /tea/ {
root /usr/local/nginx/html/;
}
请求:http://test.com/tea/tea1.html
实际访问:/usr/local/nginx/html/tea/tea1.html 文件