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 调度模块应用的主要内容,如果未能解决你的问题,请参考以下文章

7nginx的upstream及fastcgi模块应用

upstream 模块

Nginx基础入门之fastcgi模块常用配置项说明

Nginx 之 fastcgi配置

Nginx基础入门之fastcgi常用配置项说明

Nginx自学手册 upstream及fastcgi