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; #记录日志
- }
- }
来源: http://www.bubuko.com/infodetail-3339558.html