Nginx服务搭建负载均衡,反向代理,缓存加速,访问分布式文件系统高可用

 

一,Nginx

        Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。AS13000系统Nginx为1.9.2版本。Nginx具有很多非常优越的特性:

在连接高并发的情况下,具有较好的性能,支持负载均衡,实现可扩展的浏量管理;使Web服务器更灵活,更高效,更安全;能够快速灵活且可靠的传送流视频和音频内容;支持强大的Web加速和移动端性能的解决方案;不仅只保护数据安全,也保证网站在面对恶意流量的攻击中能正常运行,从而保护应用安全;Nginx是一个可管理的安全的基于HTTP API流量的可信平台,为API提供安全保障和使用策略;Nginx是一个完整的软件应用分发平台,能够取代昂贵的ADC硬件负载平衡器,节省成本。


1.1 Nginx共享配置

Nginx配置需要在服务接口节点执行,主要包括以下文件:

主配置文件:/usr/local/nginx/conf/nginx.conf

执行文件:/usr/local/nginx/sbin

日志文件:/usr/local/nginx/logs

1.1.1 匿名用户访问配置

根据不同的用户权限控制级别的要求,需要在服务接口节点主配置文件:/usr/local/nginx/conf/nginx.conf下进行配置。

用户匿名访问即无权限控制要求,用户访问时不要求输入用户名、密码(如果需要通过Nginx接口做性能测试、客户端只读文件,建议使用此种模式),主配置文件如下:

[root@server~]#vim /usr/local/nginx/conf/nginx.conf

server{

listen 8099               //端口号

location / { 

    autoindex on; 

    autoindex_exact_size on; 

    autoindex_localtime on; 

    root /mnt/icfs;       //共享集群目录



}

说明: jinggao注意
配置listen 端口要注意,防止与管理界面端口80、HTTP服务端口910冲突;

1.1.2 权限控制访问配置
基于权限用户访问机制,只允许限定用户共享目录访问。针对数据安全性,可靠性需求,需要采用用户权限限制进行共享目录操作,基于用户组限定用户访问机制,经过用户名账号密码认证后才能进行访问,并且限定某些站点只有固定的用户才能登陆。

主配置文件如下:

[root@server~]#vim /usr/local/nginx/conf/nginx.conf

server{

listen 8099               //端口号

location / { 

    autoindex on; 

    autoindex_exact_size on; 

    autoindex_localtime on; 

    root /mnt/icfs;       //共享集群目录

    auth_basic "AS13000 Restricted Site "; 

    auth_basic_user_file /usr/local/nginx/nginx_passwd;  //密钥文件



}

创建nginx_passwd文件,包括用户名、密码:

使用htpasswd命令创建用户,在第一次创建时需要加-c可创建文件。

[root@server ~]# touch /usr/local/nginx/nginx_passwd

[root@server ~]# htpasswd –c –m /usr/local/nginx/nginx_passwd zang 密码

[root@server ~]# htpasswd –m /usr/local/nginx/nginx_passwd lin 密码

[root@server ~]# htpasswd –m /usr/local/nginx/nginx_passwd tom 密码


1.2 Nginx启动

在接口服务节点执行以下操作:

[root@server ~]#cd /usr/local/nginx/sbin

[root@server sbin]#./nginx            //启动

[root@server sbin]#./nginx -t            //检查语法错误

[root@server sbin]#./nginx -s reload            //重启服务

[root@server sbin]#./nginx -s stop           //停止服务

1.3 客户端访问

客户端可通过浏览器直接访问:浏览器输入http://ip:port

二,Nginx缓存

2.1 proxy_cache缓存

在nginx.conf配置文件中

http块加入以下代码

#proxy_temp_path和proxy_cache_path指定的路径必须在同一分区

proxy_temp_path   /tmp/proxy_temp_dir;

#设置名称为nginx_cache,内存缓存空间大小为500MB,30天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。

proxy_cache_path  /tmp/proxy_cache_dir  levels=1:2   keys_zone=nginx_cache:200m inactive=3d max_size=30g;

在server加入以下代码

location / {

        proxy_cache nginx_cache;


        proxy_cache_key $host$uri$is_args$args;


        proxy_set_header Host  $host;


        proxy_set_header X-Forwarded-For  $remote_addr;


        expires  30d;


}


重启Ngnix


/usr/local/nginx/sbin/nginx -s reload


2.2 打开文件缓存


默认: open_file_cache off;


配置块: http、 server、 location


文件缓存会在内存中存储以下3种信息:


❑文件句柄、 文件大小和上次修改时间。


❑已经打开过的目录结构。


❑没有找到的或者没有权限操作的文件信息。


这样,通过读取缓存就减少了对磁盘的操作。


该配置项后面跟3种参数。


❑max:表示在内存中存储元素的最大个数。当达到最大限制数量后,将采用LRU(Least


Recently Used)算法从缓存中淘汰最近最少使用的元素。


❑inactive :表示在 inactive 指定的时间段内没有被访问过的元素将会被淘汰。 默认时间


为60秒。


❑off:关闭缓存功能。


例如:


open_file_cache max=1000 inactive=20s;


[root@server~]#vim /usr/local/nginx/conf/nginx.conf


server{


listen 8099               //端口号


location / { 


    open_file_cache max=1000 inactive=20s;          //打开文件缓存


autoindex on; 


    autoindex_exact_size on; 


    autoindex_localtime on; 


    root /mnt/icfs;       //共享集群目录


    auth_basic "AS13000 Restricted Site "; 


    auth_basic_user_file /usr/local/nginx/nginx_passwd;  //密钥文件





}


 


三、Nginx负载均衡


Nginx的upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。


另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。


测试环境:ICFS V3.6.3.1版本服务,三节点服务集群,33osd,2+1纠删,3mons;


说明: jinggao注意


AS13000系统只在主mon节点部署了Nginx服务,其他节点需要以下步骤:


非主mon节点:


cp /icfs/plugins/monitor/Agent/nginx/ /usr/loacl/ -r


 


三节点集群IP,分别为


A服务器IP :100.7.42.73 (主)


B服务器IP :100.7.42.173


C服务器IP :100.7.42.176


部署思路:


A服务器100.7.42.73做为主服务器,由A服务器负载均衡到B服务器(100.7.42.173)与C服务器(100.7.42.176)上。


1、A服务器nginx.conf设置,如下


在http段加入以下代码


upstream inspur.com {                    //inspur.com 为server引用


      server  100.7.42.173:8099;


      server  100.7.42.176:8099;


}


 


server{


    listen 8099;


    server_name inspur.com;


    location / {


        #反向代理的地址


proxy_pass         http:// inspur.com;


        #设置主机头和客户端真实地址,以便服务器获取客户端真实IP


        proxy_set_header   Host             $host;


        proxy_set_header   X-Real-IP        $remote_addr;


        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;


    }


}


保存重启nginx


2,B、C服务器nginx.conf设置


打开nginx.conf,在http段加入以下代码


server{


    listen 8099;


    server_name inspur.com;


    autoindex on; 


    autoindex_exact_size on; 


    autoindex_localtime on; 


    root /mnt/icfs;       //共享集群目录


}


保存重启nginx


四,Nginx与Apache实现反向代理


反向代理(reverse proxy)方式是指用代理服务器来接受 Internet 上的连接请求,然后将


请求转发给内部网络中的上游服务器, 并将从上游服务器上得到的结果返回给 Internet 上请


求连接的客户端, 此时代理服务器对外的表现就是一个 Web 服务器。






测试环境:ICFS V3.6.3.1版本服务,三节点服务集群,33osd,2+1纠删,3mons;


三节点集群IP,分别为


A服务器IP :100.7.42.73 (主)  0


B服务器IP :100.7.42.173        1


C服务器IP :100.7.42.176        2


对应虚拟ip为:


100.7.39.100          2


100.7.39.101          1


100.7.39.102          0


1、100.7.42.73节点Apache配置(其他节点配置相同,ServerName与实际节点相对应):


[root@server~]# vim /etc/httpd/conf/httpd.conf


/*在配置文件最下方编辑*/


IncludeOptional conf.d/autoindex.conf  //优化增加访问共享目录列表信息


<Directory "/mnt/icfs/httptest">


  Options Indexes FollowSymLinks


  AllowOverride None


  Require all granted        //允许匿名访问共享目录


</Directory>


<VirtualHost *:910>


    ServerAdmin webmaster@localhost


    DocumentRoot /mnt/icfs/httptest/    //共享目录


    Options Indexes FollowSymLinks


<Location />


        Options Indexes MultiViews


        Dav     On


</Location>


</VirtualHost>


 


2、100.7.42.73节点Nginx配置(集群各个节点配置一样):


在http段加入以下代码


upstream inspur.com {                    //inspur.com 为server引用


      server  100.7.42.73:910;


      server  100.7.42.173:910;


server  100.7.42.176:910;


}


 


server{


    listen 8099;


    server_name inspur.com;


    location / {


        #反向代理的地址


proxy_pass         http://inspur.com;


        #设置主机头和客户端真实地址,以便服务器获取客户端真实IP


        proxy_set_header   Host             $host;


        proxy_set_header   X-Real-IP        $remote_addr;


        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;


    }


}


3,客户端访问


浏览器输入:


http://虚拟IP:8099   /*通过Nginx反向代理访问共享服务*/


http://虚拟IP:910   /*通过Apache访问共享服务*/


 


五,Nginx与Apache性能对比


AB测试工具:


 


 


Nginx并发用户数为1000,请求总数为1000,


Server Software:    Nginx/1.9.2


Requests per second:    12267.02 [#/sec] (mean)    #每秒请求数,服务器的吞吐量


Time per request:       81.442 [ms] (mean)  #用户平均请求等待时间  时延


每个请求的平均处理时间为0.081ms,80%的请求是在38ms之内完成


 


http并发用户数为1000,请求总数为1000,


Server Software:    Apache/2.4.6


Requests per second:    1807.12 [#/sec] (mean)  


Time per request:       553.367 [ms] (mean) 


每个请求的平均处理时间为0.553ms,80%的请求是在227ms之内完成

        Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。AS13000系统Nginx为1.9.2版本。Nginx具有很多非常优越的特性:

在连接高并发的情况下,具有较好的性能,支持负载均衡,实现可扩展的浏量管理;使Web服务器更灵活,更高效,更安全;能够快速灵活且可靠的传送流视频和音频内容;支持强大的Web加速和移动端性能的解决方案;不仅只保护数据安全,也保证网站在面对恶意流量的攻击中能正常运行,从而保护应用安全;Nginx是一个可管理的安全的基于HTTP API流量的可信平台,为API提供安全保障和使用策略;Nginx是一个完整的软件应用分发平台,能够取代昂贵的ADC硬件负载平衡器,节省成本。

1.1 Nginx共享配置

Nginx配置需要在服务接口节点执行,主要包括以下文件:

主配置文件:/usr/local/nginx/conf/nginx.conf

执行文件:/usr/local/nginx/sbin

日志文件:/usr/local/nginx/logs

1.1.1 匿名用户访问配置

根据不同的用户权限控制级别的要求,需要在服务接口节点主配置文件:/usr/local/nginx/conf/nginx.conf下进行配置。

用户匿名访问即无权限控制要求,用户访问时不要求输入用户名、密码(如果需要通过Nginx接口做性能测试、客户端只读文件,建议使用此种模式),主配置文件如下:

[root@server~]#vim /usr/local/nginx/conf/nginx.conf

server{

listen 8099               //端口号

location / { 

    autoindex on; 

    autoindex_exact_size on; 

    autoindex_localtime on; 

    root /mnt/icfs;       //共享集群目录

}

 

说明: jinggao注意

配置listen 端口要注意,防止与管理界面端口80、HTTP服务端口910冲突;

 

1.1.2 权限控制访问配置

基于权限用户访问机制,只允许限定用户共享目录访问。针对数据安全性,可靠性需求,需要采用用户权限限制进行共享目录操作,基于用户组限定用户访问机制,经过用户名账号密码认证后才能进行访问,并且限定某些站点只有固定的用户才能登陆。

主配置文件如下:

[root@server~]#vim /usr/local/nginx/conf/nginx.conf

server{

listen 8099               //端口号

location / { 

    autoindex on; 

    autoindex_exact_size on; 

    autoindex_localtime on; 

    root /mnt/icfs;       //共享集群目录

    auth_basic "AS13000 Restricted Site "; 

    auth_basic_user_file /usr/local/nginx/nginx_passwd;  //密钥文件

}

创建nginx_passwd文件,包括用户名、密码:

使用htpasswd命令创建用户,在第一次创建时需要加-c可创建文件。

[root@server ~]# touch /usr/local/nginx/nginx_passwd

[root@server ~]# htpasswd –c –m /usr/local/nginx/nginx_passwd zang 密码

[root@server ~]# htpasswd –m /usr/local/nginx/nginx_passwd lin 密码

[root@server ~]# htpasswd –m /usr/local/nginx/nginx_passwd tom 密码

 

1.2 Nginx启动

在接口服务节点执行以下操作:

[root@server ~]#cd /usr/local/nginx/sbin

[root@server sbin]#./nginx            //启动

[root@server sbin]#./nginx -t            //检查语法错误

[root@server sbin]#./nginx -s reload            //重启服务

[root@server sbin]#./nginx -s stop           //停止服务

1.3 客户端访问

客户端可通过浏览器直接访问:浏览器输入http://ip:port

二,Nginx缓存

2.1 proxy_cache缓存

在nginx.conf配置文件中

http块加入以下代码

#proxy_temp_path和proxy_cache_path指定的路径必须在同一分区

proxy_temp_path   /tmp/proxy_temp_dir;

#设置名称为nginx_cache,内存缓存空间大小为500MB,30天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。

proxy_cache_path  /tmp/proxy_cache_dir  levels=1:2   keys_zone=nginx_cache:200m inactive=3d max_size=30g;

 

在server加入以下代码

location / {

        proxy_cache nginx_cache;

        proxy_cache_key $host$uri$is_args$args;

        proxy_set_header Host  $host;

        proxy_set_header X-Forwarded-For  $remote_addr;

        expires  30d;

}

重启Ngnix

/usr/local/nginx/sbin/nginx -s reload

2.2 打开文件缓存

默认: open_file_cache off;

配置块: http、 server、 location

文件缓存会在内存中存储以下3种信息:

❑文件句柄、 文件大小和上次修改时间。

❑已经打开过的目录结构。

❑没有找到的或者没有权限操作的文件信息。

这样,通过读取缓存就减少了对磁盘的操作。

该配置项后面跟3种参数。

❑max:表示在内存中存储元素的最大个数。当达到最大限制数量后,将采用LRU(Least

Recently Used)算法从缓存中淘汰最近最少使用的元素。

❑inactive :表示在 inactive 指定的时间段内没有被访问过的元素将会被淘汰。 默认时间

为60秒。

❑off:关闭缓存功能。

例如:

open_file_cache max=1000 inactive=20s;

[root@server~]#vim /usr/local/nginx/conf/nginx.conf

server{

listen 8099               //端口号

location / { 

    open_file_cache max=1000 inactive=20s;          //打开文件缓存

autoindex on; 

    autoindex_exact_size on; 

    autoindex_localtime on; 

    root /mnt/icfs;       //共享集群目录

    auth_basic "AS13000 Restricted Site "; 

    auth_basic_user_file /usr/local/nginx/nginx_passwd;  //密钥文件

}

 

三、Nginx负载均衡

Nginx的upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

测试环境:ICFS V3.6.3.1版本服务,三节点服务集群,33osd,2+1纠删,3mons;

说明: jinggao注意

AS13000系统只在主mon节点部署了Nginx服务,其他节点需要以下步骤:

非主mon节点:

cp /icfs/plugins/monitor/Agent/nginx/ /usr/loacl/ -r

 

三节点集群IP,分别为

A服务器IP :100.7.42.73 (主)

B服务器IP :100.7.42.173

C服务器IP :100.7.42.176

部署思路:

A服务器100.7.42.73做为主服务器,由A服务器负载均衡到B服务器(100.7.42.173)与C服务器(100.7.42.176)上。

1、A服务器nginx.conf设置,如下

在http段加入以下代码

upstream inspur.com {                    //inspur.com 为server引用

      server  100.7.42.173:8099;

      server  100.7.42.176:8099;

}

 

server{

    listen 8099;

    server_name inspur.com;

    location / {

        #反向代理的地址

proxy_pass         http:// inspur.com;

        #设置主机头和客户端真实地址,以便服务器获取客户端真实IP

        proxy_set_header   Host             $host;

        proxy_set_header   X-Real-IP        $remote_addr;

        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

    }

}

保存重启nginx

2,B、C服务器nginx.conf设置

打开nginx.conf,在http段加入以下代码

server{

    listen 8099;

    server_name inspur.com;

    autoindex on; 

    autoindex_exact_size on; 

    autoindex_localtime on; 

    root /mnt/icfs;       //共享集群目录

}

保存重启nginx

四,Nginx与Apache实现反向代理

反向代理(reverse proxy)方式是指用代理服务器来接受 Internet 上的连接请求,然后将

请求转发给内部网络中的上游服务器, 并将从上游服务器上得到的结果返回给 Internet 上请

求连接的客户端, 此时代理服务器对外的表现就是一个 Web 服务器。

测试环境:ICFS V3.6.3.1版本服务,三节点服务集群,33osd,2+1纠删,3mons;

三节点集群IP,分别为

A服务器IP :100.7.42.73 (主)  0

B服务器IP :100.7.42.173        1

C服务器IP :100.7.42.176        2

对应虚拟ip为:

100.7.39.100          2

100.7.39.101          1

100.7.39.102          0

1、100.7.42.73节点Apache配置(其他节点配置相同,ServerName与实际节点相对应):

[root@server~]# vim /etc/httpd/conf/httpd.conf

/*在配置文件最下方编辑*/

IncludeOptional conf.d/autoindex.conf  //优化增加访问共享目录列表信息

<Directory "/mnt/icfs/httptest">

  Options Indexes FollowSymLinks

  AllowOverride None

  Require all granted        //允许匿名访问共享目录

</Directory>

<VirtualHost *:910>

    ServerAdmin webmaster@localhost

    DocumentRoot /mnt/icfs/httptest/    //共享目录

    Options Indexes FollowSymLinks

<Location />

        Options Indexes MultiViews

        Dav     On

</Location>

</VirtualHost>

 

2、100.7.42.73节点Nginx配置(集群各个节点配置一样):

在http段加入以下代码

upstream inspur.com {                    //inspur.com 为server引用

      server  100.7.42.73:910;

      server  100.7.42.173:910;

server  100.7.42.176:910;

}

 

server{

    listen 8099;

    server_name inspur.com;

    location / {

        #反向代理的地址

proxy_pass         http://inspur.com;

        #设置主机头和客户端真实地址,以便服务器获取客户端真实IP

        proxy_set_header   Host             $host;

        proxy_set_header   X-Real-IP        $remote_addr;

        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

    }

}

3,客户端访问

浏览器输入:

http://虚拟IP:8099   /*通过Nginx反向代理访问共享服务*/

http://虚拟IP:910   /*通过Apache访问共享服务*/

 

五,Nginx与Apache性能对比

AB测试工具:

 

 

Nginx并发用户数为1000,请求总数为1000,

Server Software:    Nginx/1.9.2

Requests per second:    12267.02 [#/sec] (mean)    #每秒请求数,服务器的吞吐量

Time per request:       81.442 [ms] (mean)  #用户平均请求等待时间  时延

每个请求的平均处理时间为0.081ms,80%的请求是在38ms之内完成

 

http并发用户数为1000,请求总数为1000,

Server Software:    Apache/2.4.6

Requests per second:    1807.12 [#/sec] (mean)  

Time per request:       553.367 [ms] (mean) 

每个请求的平均处理时间为0.553ms,80%的请求是在227ms之内完成


转自:https://my.oschina.net/linjiezang/blog/1377228

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值