nginx 配置相关解析
nginx模块处理流程一般是这样的:
客户端发送HTTP请求 –> Nginx基于配置文件中的位置选择一个合适的处理模块 ->(如果有)负载均衡模块选择一台后端服务器 –> 处理模块进行处理并把输出缓冲放到第一个过滤模块上 –> 第一个过滤模块处理后输出给第二个过滤模块 –> 然后第二个过滤模块又到第三个 –> 依此类推 –> 最后把回复发给客户端
其中配置模块,我们关注的就是nginx的配置文件
nginx默认的配置文件在/usr/local/nginx/conf/nginx.conf.
配置文件分为这样几个部分:
全局设置、event、http、upstream、server设置
其中:全局设置用于配置、
1、nginx的用户和组;
2、nginx启用的子进程数;
3、错误日志路径,以及日志的记录级别;
4、nginx的pid的记录文件;
event主要用于定义nginx的工作模式
1.nginx的工作事件模型(epoll,kqueue)
2、设置 每个进程的处理的连接数
http用于提供web的功能配置
1、文件类型定义文件 和默认文件类型;
2、自定义日志格式;
3、访问日志设置
4、开启服务响应头部独立发送;
5、设置连接的超时的时间;
6、是否启用压缩功能;
7、使用server定义虚拟主机
upstream表示负载服务器;
server 位于http内部,用于配置虚拟主机,一个http下可以有多个虚拟主机的配置;
通过 upstream 和server 配合使用 ,可以配置特定访问服务的负载服务器池;
可以通过upstream 和server 配合使用,配置反向代理服务;
基于权重负载负载
#upstream表示负载服务器池,定义名字为www.lezhu.tv的服务器池 upstream www.lezhu.tv { #server是服务器节点起始标签,其后是节点地址,可为域名或IP,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。 ip_hash; #调度算法,默认是rr轮询。 server 172.16.1.7:80 weight=1; server 172.16.1.8:80 weight=1; server 172.16.1.9:80 weight=1 backup; #backup表示热备 } server { listen 80; #监听的端口,也可以是172.16.1.7:80形式 server_name www.lezhu.tv; #基于域名的虚拟主机 root html/blog; #站点根目录,即网站程序放的目录 location / { #默认访问的location标签段 index index.php index.htmlindex.htm; #首页排序 } location ~.*.(php|php5)?$ { #符合php扩展名的请求调度到fcgi server fastcgi_pass 127.0.0.1:9000; #抛给本机的9000端口(php fastcgi server) fastcgi_index index.php; #设定动态首页 include fastcgi.conf; #设定和fastcgi交互的相关参数包含文件 } #将符合静态文件的图片视频流媒体等设定expries缓存参数,要求浏览器缓存。 location~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10y; #客户端缓存上述静态数据10年 } #将符合js,css文件的等设定expries缓存参数,要求浏览器缓存。 location~ .*\.(js|css)?$ { expires 30d; #客户端缓存上述js,css数据30天 } access_log /app/logs/www_access.log main; #根据日志格式记录用户访问的日志 }
反向代理负载均衡配置
#upstream表示负载服务器池,定义名字为www.lezhu.tv的服务器池 upstream www.lezhu.tv { #server是服务器节点起始标签,其后是节点地址,可为域名或IP,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。 ip_hash; #调度算法,默认是rr轮询。 server 172.16.1.7:80 weight=1; server 172.16.1.8:80 weight=1; server 172.16.1.9:80 weight=1 backup; #backup表示热备 } server { listen 80; #监听的端口,也可以172.16.1.7:80形式 server_name www.lezhu.tv; #代理的服务域名 location / { #将访问www.lezhu.tv的所有请求都发送到upstream定义的服务器节点池。 proxy_pass http://www.lezhu.tv; #在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置。 proxy_set_headerHost $host; #在代理向后端服务器发送的http请求头中加入X-Forwarded-For字段信息,用于后端服务器程序、日志等接收记录真实用户的IP,而不是代理服务器的IP。 proxy_set_header X-Forwarded-For$remote_addr; #设定反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间。 proxy_connect_timeout60; #设定代理后端服务器的数据回传时间 proxy_send_timeout 60; #设定Nginx从代理的后端服务器获取信息的时间 proxy_read_timeout 60; #设定缓冲区的大小 proxy_buffer_size 4k; #设定缓冲区的数量和大小。nginx从代理的后端服务器获取的响应信息,会放置到缓冲区。 proxy_buffers 4 32k; #设定系统很忙时可以使用的proxy_buffers大小 proxy_busy_buffers_size 64k; #设定proxy缓存临时文件的大小 proxy_temp_file_write_size 64k; #对于以上参数的详细理解可见本文开头图解。 } access_log off; #反向代理如果并发大,务必要关闭日志,否则IO吃紧。 }
程序动静分离反向代理负载均衡配置
#upstream表示负载服务器池,定义名字为www.lezhu.tv的服务器池 upstream www.lezhu.tv { #server是服务器节点起始标签,其后是节点地址,可为域名或IP,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。 ip_hash; #调度算法,默认是rr轮询。 server 172.16.1.7:80 weight=1; server 172.16.1.8:80 weight=1; server 172.16.1.9:80 weight=1 backup; #backup表示热备 } server { listen 80; #监听的端口,也可以是172.16.1.7:80形式 server_name www.lezhu.tv; #代理的域名 root html/bbs; #程序目录 index index.php index.html index.htm; #所有静态文件由nginx服务处理 location ~.*.(htm|html|gif|jpg|jpeg|png|swf|flv)$ { expires 3650d; } location ~ .*.(js|css)?$ { expires 30d; } #所有java相关扩展名均交由tomcat或resin服务处理。 location ~ .(jsp|jspx|do)?$ { #将访问www.lezhu.tv的所有请求都发送到upstream定义的服务器节点池。 proxy_pass http://127.0.0.1:8080 ; #在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置。 proxy_set_header Host $host; #在代理向后端服务器发送的http请求头中加入X-Forwarded-For字段信息,用于后端服务器程序、日志等接收记录真实用户的IP,而不是代理服务器的IP。 proxy_set_headerX-Forwarded-For $remote_addr; } access_log /app/logs/bbs_access.log main; #记录日志 } }