一,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; //共享集群目录
}
}
注意
配置 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;
注意
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之内完成