实战:
一、源码编译安装nginx
[root@tiandong63 ~]#yum groupinstall "Development Tools" "Development Libraries" -y 安装开发包
[root@tiandong63 ~]#yum install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre* -y 安装依赖包
[root@tiandong63 ~]#tar -zxvf nginx-1.9.4.tar.gz -C /usr/local/src/
[root@tiandong63 ~]#cd /usr/local/src/
[root@tiandong63 src]#cd nginx-1.9.4/
[root@tiandong63 nginx-1.9.4]#./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module
参数:
--with-http_dav_module 启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启
--with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
--with-http_addition_module 启用ngx_http_addition_module支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求)
--with-http_sub_module 启用ngx_http_sub_module支持(允许用一些其他文本替换nginx响应中的一些文本)
--with-http_flv_module 启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件)
--with-http_mp4_module 启用对mp4文件支持(提供寻求内存使用基于时间的偏移量文件
[root@tiandong63 nginx-1.9.4]#make && make install
[root@tiandong63 nginx-1.9.4]#useradd -M -u 8001 -s /sbin/nologin nginx
[root@tiandong63 ~]# /usr/local/nginx/sbin/nginx 启动nginx
[root@tiandong63 ~]# netstat -antup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 42350/nginx
测试nginx
二、nginx服务器日常操作:
配置nginx为分发器实现动静分离
vim /usr/local/nginx/conf/nginx.conf
2 user nginx nginx;
43 location / {
44 root html;
45 index index.html index.htm;
46 if ($request_uri ~* \.html$){
47 proxy_pass http://htmlservers;
48 }
49 if ($request_uri ~* \.php$){
50 proxy_pass http://phpservers;
51 }
52 proxy_pass http://picservers;
53 }
123 upstream htmlservers { #定义负载均衡服务器组名称
124 server 192.168.199.4:80;
125 server 192.168.199.5:80;
126 }
127 upstream phpservers{
128 server 192.168.199.4:80;
129 server 192.168.199.5:80;
130 }
131 upstream picservers {
132 server 192.168.199.4:80;
133 server 192.168.199.5:80;
134 }
135 }
把一下文件注释了,否组php文件直接在nginx服务器上解析了,不在解析给后端的服务器。
[root@tiandong63 ~]# ln -s /usr/local/nginx/sbin/* /usr/bin/
[root@tiandong63 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@tiandong63 ~]# nginx -s reload
三、配置后端服务器(tiandong64和tiandong65上面配置一样):
[root@tiandong64 ~]# yum install php httpd -y
[root@tiandong65 ~]# yum -y install php httpd -y
[root@tiandong64 ~]# cd /var/www/html/
[root@tiandong64 html]# more index.html
192.168.199.4
[root@tiandong64 html]# more test.php
192.168.199.4
<?php
phpinfo();
?>
[root@tiandong64 html]#
[root@tiandong64 html]# ll
total 12
-rw-r--r-- 1 root root 14 Mar 20 00:24 index.html
-rw-r--r-- 1 root root 790 Dec 24 2018 pic.PNG
-rw-r--r-- 1 root root 35 Mar 20 00:25 test.php
重启Apache服务:
[root@tiandong64 ~]# /etc/init.d/httpd restart
[root@tiandong65 ~]# /etc/init.d/httpd restart
四、测试:
测试html页面:
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.4
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.4
测试php页面:
测试服务器性能:
[root@tiandong66 ~]# ab -n 1000 -c 1000 http://192.168.199.3/index.html 运行正常
[root@tiandong66 ~]# ab -n 2000 -c 2000 http://192.168.199.3/index.html 运行报错
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.199.3 (be patient)
socket: Too many open files (24) #测试时,一次打开的socket文件太多。系统默认的一次打开的最多问1024个
[root@tiandong66 ~]# ulimit -n 10240
[root@tiandong63 ~]# ulimit -n 10240
五、nginx负载的五中策略设置方法:
1、轮询(默认)
upstream htmlservers { #定义负载均衡服务器组名称
server 192.168.199.4:80;
server 192.168.199.5:80;
}
2、指定权重(指定轮询几率,weight和访问比例成正比,用户后端服务器性能不均的情况)
upstream htmlservers { #定义负载均衡服务器组名称
server 192.168.199.4:80 weight=1;
server 192.168.199.5:80 weight=2;
}
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.199.4:80;
server 192.168.199.5:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
六、故障演练
当其中一台Apache宕机
[root@tiandong64 ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.4
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.4
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
一直访问的是另外一台机器
故障恢复:
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.4
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.4
[root@tiandong66 ~]# curl 192.168.199.3
192.168.199.5
OK!!!!