1、nginx安装步骤
1、获取安装包
在www.nginx.org网站选择适当的版本
2、解压安装包,之后进入解压的文件中进行编译和安装的操作
3、使用./configure
命令来生成Makefile为下一步编译作准备,后面添加一些参数对安装进行控制。
可以使用./configure --help命令选择参数,–with开头的参数表示需要添加的参数,–without开头的参数表示需要删除的参数。
[root@server1 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
--prefix=/usr/local/nginx ##指定路径,这样nginx所有数据会安装到这个文件里,方便备份或者其他操作。
--with-http_ssl_module ##安全套接字协议,支持标准的https
--with-http_stub_status_module ##监控
编辑完成后回车,查看可能出现的错误。
根据提示安装需要的软件
[root@server1 nginx-1.18.0]# yum install -y pcre-devel gcc openssl-devel
直到没有错误为止
之前写入的数据会添加到Makefile文件中
Makefile文件中的内容会指导我们后续的编译,如果Makefile没有创建,那么之后的make make insatll 命令也无法使用
4、输入make命令进行编译,make过程中可能会出现错误,所以要根据报错内容解决问题,或者添加缺少的依赖库。
5、之后输入make install 命令进行安装。
6、make install 安装之后会生成/usr/local/nginx文件,此后修改配置文件需要在这里修改。
7、变更环境变量,添加nginx命令
在 .bash_profile文件中添加nginx的安装路径,之后source .bash_profile文件使其生效。
之后可以看到nginx已经在环境变量里
输入nginx命令,可以看到nginx已经在运行
使用netstat -antlp命令,可以看到80端口已经存在
8、使用du -sh命令可以看到nginx程序的大小,这个文件的大小还可以更小。
我们可以重新安装进行设置。
首先输入nginx -s stop 关掉nginx程序
之后删除/usr/local下的nginx文件。
之后在nginx文件中make clean 清除数据
或者删除nginx安装文件,重新解压一份
重新解压完成后,在/nginx-1.18.0/auto/cc/gcc文件中编辑,将debug参数注释掉,这样最终生成的二进制文件会变得很小。
之后重复./configer make make install 命令重新安装
安装完成后在/usr/local/nginx可以看到文件大小为不到1M
2、nginx负载均衡
1、创建用户nginx
编辑nginx.conf文件
刷新nginx
ps aux 命令查看用户已经变更
2、编辑nginx配置文件在/usr/local/nginx.conf中
- 添加upstream模块
定义一个负载均衡器,名字叫westos
upstream westos{
server 172.25.30:80;
server 172.25.30:80;
}
listen 80; ##监听80端口
server_name www.westos.org; ##监听www.westos.org域名,当nginx接收到这个域名直接访问。由http协议访问。
location / { ##location字段可以控制很多路径,访问网站根目录时,执行以下操作
proxy_pass http://westos; ##反向代理,代理到westos(刚刚创建的负载均衡器)
}
3、 nginx -t 检测语法
4、nginx -s reload 如果语法没问题直接reload刷新。
5、在真实主机foundation30设置域名解析
vim /etc/hosts
172.25.30.1 server1 www.westos.org
6、打开server2,server3的httpd服务,在真实主机上测试可以看到nginx负载均衡效果
7、nginx.conf文件的其他参数
worker_processes 2; ##worker的进程数,与cpu数绑定,如果不知道cpu数,可以设置为auto,自动模式。
worker_cpu_affinity 01 10; ##将worker的进程数与cpu静态的进行绑定,这样可以避免cpu上下文切换带来的损耗。01指第一个cpu,10指第二个cpu。
worker_connections 65535; ##worker的最大连接量,通常设置为65535
8、如果修改worker的最大连接量需要修改配置参数
/etc/security/limits.conf
在文件末尾添加
nginx - nofile 65535
之后nginx -s reload 重启nginx程序
9、使用Apache功能进行嗯并发测试,10个用户共5000条请求。
[root@foundation30 Desktop]# ab -c10 -n5000 http://www.westos.org/index.html
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.westos.org (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: nginx/1.18.0
Server Hostname: www.westos.org
Server Port: 80
Document Path: /index.html
Document Length: 8 bytes
Concurrency Level: 10
Time taken for tests: 2.604 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 1285000 bytes
HTML transferred: 40000 bytes
Requests per second: 1920.21 [#/sec] (mean)
Time per request: 5.208 [ms] (mean)
Time per request: 0.521 [ms] (mean, across all concurrent requests)
Transfer rate: 481.93 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 3
Processing: 1 5 1.3 5 16
Waiting: 1 5 1.3 5 16
Total: 1 5 1.3 5 16
Percentage of the requests served within a certain time (ms)
50% 5
66% 5
75% 6
80% 6
90% 7
95% 8
98% 8
99% 10
100% 16 (longest request)
3、nginx的算法
nginx算法:http://nginx.org/en/docs/http/load_balancing.html
或者在官网查询管理员手册:
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
1、支持权重
http {
upstream westos{
server 172.25.30.2:80 weight=2; server2权重为2
server 172.25.30.3:80;
}
结果:我们检测时server2明显比server3被轮叫的次数多一倍
官网解释:`
2、backup
upstream westos{
server 172.25.30.2:80 weight=2;
server 172.25.30.3:80;
server 127.0.0.1:80 backup; ##当后端全部宕机,则访问自己
}
正常情况下backup是不会起作用的,当后端全部关掉则会直接访问nginx所在的主机
[root@server2 ~]# systemctl stop httpd
[root@server3 ~]# systemctl stop httpd
此时就会启用自己
3、ip_hash
upstream westos{
ip_hash;
server 172.25.30.2:80;
server 172.25.30.3:80;
}
nginx -s reload
ip_hash设置完成后不会进行轮询,只要客户端来源不变,那么后端服务器也不会变。
4、down手动下线某台机器
upstream westos{
server 172.25.30.2:80 down;
server 172.25.30.3:80;
}
4、基于Cookies的会话保持
由于sticky cookies模式只有商业付费版本的NginxPlus才能使用,这里使用第三方模块nginx-goodies-nginx-stick-module来基于cookies的会话保持
需求场景
请求经过类似CDN之类的反向代理之后,对后端RS的请求IP变更为反向代理服务器的IP
如果使用基于IP的hash认证则相当于没有作负载均衡
而基于cookies进行验证不会出现这个问题。
[root@server1 ~]# unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip ##解压第三方模块,在编译时加入
[root@server1 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
##使用--add-module参数进行添加第三方模块
[root@server1 nginx-1.18.0]# make
[root@server1 nginx-1.18.0]# make install
对Nginx主配置中服务部分引入cookies模块并进行配置
upstream westos{
sticky;
server 172.25.30.2:80;
server 172.25.30.3:80;
}
[root@server1 conf]# nginx -s reload
之后可以看到基于cookie模块的负载均衡已经启用,多次刷新也是访问的server2。
除非清理浏览器的cookie才会重新选择后端服务器
curl命令看不到效果,因为curl不支持cookie