Nginx之fastcgi模块应用,及upstream and stream 调度模块应用
Posted qingfengguoke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx之fastcgi模块应用,及upstream and stream 调度模块应用相关的知识,希望对你有一定的参考价值。
1.rpm包模式编译安装nginx-1.12...
1 wget http://nginx.org/packages/centos/7/SRPMS/nginx-1.12.2-1.el7_4.ngx.src.rpm (下载rpm包)
2 rpm -ivh nginx-1.12.2-1.el7_4.ngx.src.rpm (安装源码包)
3 cd ~
4 useradd builder
5 yum install redhat-lsb openssl-devel pcre-devel gcc rpmdevtools (安装相关编译依赖环境)
6 rpmbuild -bb builder nginx.spec (进入家目录 rpmbuild/SPECS/)运行nginx.spec (该文件中可定义需安装或删除的模块)
7 cd RPMS/
8 rpm -ivh nginx-1.12.2-1.el7_4.ngx.x86_64.rpm (安装生成的rpm 安装包)
自此安装完成 systemctl start nginx
2. 后端服务器配置:(作为php代理服务器)
1 yum install php-fpm php-mysql php-mbsring php-mcrypt 2 vim /etc/php-fpm.d/www.conf 3 listen = 192.168.20.243:9000 (指定fpm监听address:port 4 listen.allowd_clients = any (或者注释,允许指定的client发送请求) 5 user = apache (指定fpm以某个用户身份启动,用户需要有DocumentRoot访问权限; 6 pm = dynamic (指定fpm工作模式) 7 pm.max_children = 150 8 ... 9 mkdir /var/lib/php/session (设置权限为apache) 10 systemctl start php-fpm 11 ss -tnl (9000端口已监听)
3. 代理服务器配置
新增server文件
1 vim /etc/nginx/conf.d/fascgi.conf (定义server,不要与nginx.conf配置文件冲突) 2 server { 3 listen 80; 4 server_name www.ilinux.com; 5 location / { 6 root /date/nginx/html; (指定URL路径映射根目录) 7 proxy_pass http://192.168.20.243:80; (定义后端服务器address:port) 8 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; (将client真实地址发送到后端服务器) 9 proxy_cache pcache; (调用proxy缓存,缓存在nginx.conf中定义) 10 proxy_cache_key $request_uri; (指定缓存的键值,此处为以URL为缓存键值) 11 proxy_cache_valid 200 302 201 1h; (指定不同的响应代码在代理服务器上缓存的时间) 12 proxy_cache_methods GET; (按指定的客户端请求方式缓存) 13 proxy_connect_timeout 60s; (与后端服务器连接超时时间,当后端服务器多久未响应则放弃连接) 14 proxy_read_timeout 10; (后端服务器读取资源响应时间,当后端服务器接收到请求后多久内响应) 15 proxy_send_timeout 10; (定义发送请求到后端服务器的超时时长) 16 add_header X-Via $server_addr; (由代理服务器在报文添加指定的头部信息返回到client) 17 index index.html index.php; (定义索引页面) 18 } 19 location ~* .php$ { (收到PHP格式请求时) 20 fastcgi_pass 192.168.20.243:9000; (将client的php请求发送到后端服务器,并指定php服务器的address:port) 21 fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name; (定义后端服务器URL根路径) 22 include fastcgi_params; (定义可发送到后端服务器的内容) 23 fastcgi_index index.php; (定义索引页) 24 fastcgi_cache fscgi; (调用fastcgi缓存,在nginx.conf中定义缓存) 25 fastcgi_cache_key $request_uri; (指定以URI作为缓存键值) 26 fastcgi_cache_valid 200 302 10m; (指定不同的状态响应码缓存时长) 27 fastcgi_cache_methods GET; (按指定请求方式缓存) 28 fastcgi_keep_conn on; (与fastcgi保持连接) 29 } 30 } 31
proxy_cache_path 及 fastcgi_cache_path 定义
1 proxy_cache_path /date/nginx/cache/ levels=1:1:2 keys_zone=pcache:10m max_size=2g; 2 fastcgi_cache_path /date/nginx/fast/ levels=1:1:2 keys_zone=fscgi:10m max_size=2g;
/date/nginx/xx :指定缓存内容在磁盘上存储的位置
levels=1:1:2 :指定缓存内容在磁盘存储的目录层级,十六进制,1=16个子目录,2=16*16个子目录。。。
keys_zone=pcache:10m :定义缓存内容在内存空间的名称及大小,该名称会被server中调用)
max_size=2g :定义缓存内容在磁盘上最大存储空间大小
inactive=time :定义缓存条目非活动时常,此处未定义
测试: 使用ab测试,开启缓存后压测性能提高明显;
解压 phpyadmin 至 /usr/share/nginx/html;
实现动静分离:
server { listen 80; servername 80; location / proxy_pass http://192.168.10.243:80; (所有静态内容都转发至该主机) } location ~* .php { (所有.php文件都转发至该主机) fastcgi_pass 192.168.10.244:9000; fastcgi_parma SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name; include fastcgi_parmas; fastcgi_index index.php; } location ~* .(jpg|png|jpeg) { (所有图片文件都转发至该主机) proxy_pass http://192.168.10.245:80; }
实现动态,静态不同文件不同主机接收;
upstream 七层代理配置;
在代理主机上配置
upstream websrvs { (需在http配置中定义) server 192.168.20.243:80; server 192.168.20.244:80 weight=3 fail_timeout=1 max_conns=10240 max_fails=3 max_fail=3; hash $request_uri; (使用client请求的uri为hash键值,也就是说当请求的内容为相同的uri内容时,始终发给相同的后端服务器,如使用$remote_addr ,则相同的client源地址的请求始终发给相同的服务器) keepalive 32; (指定代理服务器与后端服务器建立的最大连接数量) } vim /etc/nginx/conf.d/server.conf proxy_pass http://websrvs; (调度upstream定义的名称即可)
默认调度方式为轮询;
weight=3 :指定权重为3,指定权重后调度模式为wlc
fail_timeout=1 : upstream 自带对后端服务器健康状态监测功能,此处设定监测超时时间(后端服务器多久未响应)
max_fail=3 :指定后端服务器允许最大未响应次数(达到上限后下线该后端服务器)
max_conns :当前服务器允许的最大并发连接数;
bakcup :此处未定义,为将服务器标记为备用,即所有服务器不可用时才启用此服务器;
down :手动标记该服务器为不可用)
测试; for i in {1..10} ;do curl http://www.ilinux.com/index.html ;done
通过循环测试,确定代理服务器会进行轮询调度服务器响应(增加某台服务器权重后,会按权重比例增加调度次数)
stream 四层调度:
此处演示telnet端口:
stream配置在与http同级别的配置段,也就是不能在http配置端内,更不能在server内;
stream { upstream stream { (在stream内嵌套upstream,实现负载调度) server 192.168.20.243:23; (将监听的端口请求转发到该地址的指定端口,实现负载) server 192.168.20.244:23; } server { listen 2233; (监听指定的端口) proxy_pass stream; } }
测试: telnet 192.168.20.242 2233
多次测试确定实现轮询调度功能
以上是关于Nginx之fastcgi模块应用,及upstream and stream 调度模块应用的主要内容,如果未能解决你的问题,请参考以下文章