nginx简介
nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服
务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在许多负载重的俄罗斯网站上运
行,包括 Yandex、 Mail.Ru、 VK和 Rambler。根据 Netcraft 的数据, 2022 年 7 月,nginx
服务或代理了 21.55% 最繁忙的站点。
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向
代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连
接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;
在安装配置上,Nginx安装简单、配置灵活。
正反向代理
正向代理
反向代理
nginx单机反向代理实现
单机反向代理规划图
web服务器的搭建
新建服务器部署好Apach httpd web服务器
nginx反向代理的搭建
nginx底层可能要修改系统文件,centos默认策略不能修改:
vim /etc/sysconfig/selinux
将SELINUX改为disabled
安装c的编译器
nginx是c语言编写,安装过程使用的源码安装,所以必须安装C一系列编译器。
ping
www.baidu.com
测试是否可以联网
yum -y install gcc-c++ 安装编译器
安装PCRE库
nginx要支持url重写(rewrite)功能,就必须依赖pcre库。
上传pcre下载包
解压:
tar -xzvf /root/software/pcre-8.44.tar.gz -C /usr/
进入目录:
cd /usr/pcre-8.44/
检查配置:
ls 查看解压目录下有没有configure的可执行文件,如果有就执行
./configure 检查当前环境是否适合安装该软件,如果适合会配置安装目录等
编译:
make 从安装包中抽取执行过程
安装:
make install 根据配置安装pcre
测试是否成功:
pcre-config --version
安装zlib库
让nginx支持gzip压缩解压功能,就需要安装zlib
yum -y install zlib-devel
3)安装nginx,启动测试
解压:
tar -xzvf /root/software/nginx-1.18.0.tar.gz -C /usr/
进入解压目录:
cd /usr/nginx-1.18.0/
检查配置:
./configure
编译及安装:
make && make install
ls /usr/local/nginx/
启动:
/usr/local/nginx/sbin/nginx
测试:
http://192.168.48.151/
配置反向代理,重启
vim /usr/local/nginx/conf/nginx.conf

修改配置,重启nginx
/usr/local/nginx/sbin/nginx -s reload
测试方向代理
一定要保证152和153的web服务启动并可以访问
http://192.168.48.15
2
http://192.168.48.153
访问nginx反向代理配置路径:
http://192.168.48.151/web2/
http://192.168.48.151/web2/
nginx负载均衡
负载均衡概念
为了保证服务的高可用,服务单元往往采用集群化部署,当服务消费者调用服务时,获取所
有可用服务,从所有可用服务中根据负载均衡算法,选择一个服务进行请求,获取响应,这个过
程就称为负载均衡。
nginx负载均衡规划
具体实现
配置httpd
安装httpd,实现基于端口的虚拟主机
先确保关闭防火墙和selinux
systemctl stop firewalldvi /etc/sysconfig/selinux# 设置禁用SELINUX=disabled
第一台服务器(192.168.48.152):
配置/etc/httpd/conf/httpd.conf
42 Listen 8043 Listen 808144 Listen 808245 Listen 8083
配置/etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.48.152 : 8081 >DocumentRoot "/var/www/html/152-8081"ServerName 8081. aaa.com<Directory "/var/www/html/152-8081" >AllowOverride NoneRequire all granted</Directory></VirtualHost><VirtualHost 192.168.48.152 : 8082 >DocumentRoot "/var/www/html/152-8082"ServerName 8082. aaa.com<Directory "/var/www/html/152-8082" >AllowOverride NoneRequire all granted</Directory></VirtualHost><VirtualHost 192.168.48.152 : 8083 >DocumentRoot "/var/www/html/152-8083"ServerName 8083. aaa.com<Directory "/var/www/html/152-8083" >AllowOverride NoneRequire all granted</Directory></VirtualHost>
第二台服务器(192.168.48.153):
配置/etc/httpd/conf/httpd.conf
42 Listen 80
43 Listen 808444 Listen 808545 Listen 8086
配置/etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.48.153 : 8084 >DocumentRoot "/var/www/html/153-8084"ServerName 8084. aaa.com<Directory "/var/www/html/153-8084" >AllowOverride NoneRequire all granted</Directory></VirtualHost><VirtualHost 192.168.48.153 : 8085 >DocumentRoot "/var/www/html/153-8085"ServerName 8085. aaa.com<Directory "/var/www/html/153-8085" >AllowOverride NoneRequire all granted</Directory></VirtualHost><VirtualHost 192.168.48.153 : 8086 >DocumentRoot "/var/www/html/153-8086"ServerName 8086. aaa.com<Directory "/var/www/html/153-8086" >AllowOverride NoneRequire all granted</Directory></VirtualHost>
测试:
# 启动 httpdsystemctl start httpd# 如果启动失败要检查 seliux 是否关闭# 可以通过 / var /log/message 查看出错信息
http://192.168.48.152:8081/
http://192.168.48.152:8082/
http://192.168.48.152:8083/
http://192.168.48.153:8084/
http://192.168.48.153:8085/
http://192.168.48.153:8086/
nginx负载均衡配置
vim /usr/local/nginx/conf/nginx.conf
:33 加入以下内容
:
#负载均衡服务器列表
33 #gzip on;34 # 负载均衡35 upstream web-server-list{36 server 192.168.48.152 : 8081 ;37 server 192.168.48.152 : 8082 ;38 server 192.168.48.152 : 8083 ;39 server 192.168.48.153 : 8084 ;40 server 192.168.48.153 : 8085 ;41 server 192.168.48.153 : 8086 ;42 }
:55 加入以下内容:
50 #access_log logs/host.access.log main;5152 location / {53 root html;54 index index.html index.htm;55 }56 # 反向代理配置 + 负载均衡57 location /mylb/{58 proxy_pass http: //web-server-list;59 }
4)测试
先要保证6台tomcat启动
启动nginx
/usr/local/nginx/sbin/nginx
请求测试:
http://192.168.48.151/mylb/
多次刷新,查看效果
nginx负载均衡算法
轮询 roundrobbin:
nginx默认算法,按照请求时间的先后顺序,轮番切换不同的服务器做响应。如果某台服务
器宕机,nginx会自动剔除该服务器,剩余服务器继续轮询,当宕机服务器恢复,nginx会继续让
该服务器参与轮询。后台服务器性能相同或者相近时,使用该算法。
具体配置:
34 # 负载均衡35 upstream web-server-list{36 server 192.168.48.152 : 8081 ;37 server 192.168.48.152 : 8082 ;38 server 192.168.48.152 : 8083 ;39 server 192.168.48.153 : 8084 ;40 server 192.168.48.153 : 8085 ;41 server 192.168.48.153 : 8086 ;42 }
权重轮询 weight roundrobbin:
nginx会根据权重配置,让不同服务接受不同并发的请求,权重值越大,接受的请求量越
多,具体使用weight配置,取值范围1-255之间,默认值为1。解决服务性能差异问题的。
具体实现:
35 upstream web-server-list{36 server 192.168.48.152 : 8081 ;37 server 192.168.48.152 : 8082 weight= 10 ;38 server 192.168.48.152 : 8083 ;39 server 192.168.48.153 : 8084 ;40 server 192.168.48.153 : 8085 weight= 20 ;41 server 192.168.48.153 : 8086 ;42 }
http://192.168.48.151/mylb/
多次刷新请求,发现8085和8082出现机率很大
ip_hash算法:
在轮询或者权重轮询的基础上,按照请求客户IP地址进行hash运算,IP相同客户总是到同一
个服务器上。解决session不共享的问题。
具体实现:
35 upstream web-server-list{ip_hash;36 server 192.168.48.152 : 8081 ;37 server 192.168.48.152 : 8082 ;38 server 192.168.48.152 : 8083 ;39 server 192.168.48.153 : 8084 ;40 server 192.168.48.153 : 8085 ;41 server 192.168.48.153 : 8086 ;42 }
hash_function(ip)=数字%6 =[0-5]
公平 fair算法:
按照服务器响应时间来分配请求数量,响应时间越快,分配的请求越多。
url_hash算法:
按照请求的url地址,相同的url进行hash算法,相同URL到同一个服务器上。提高缓存使用
率。
http://192.168.170.21:8088/qy153-
loadbalance/webserver_demo_20220817/
dept/queryById?id=1
http://192.168.170.21:8088/qy153-
loadbalance/webserver_demo_20220817/
dept/queryById?id=1
内存中:dept{deptNo:1,dname:'dev1',loc:'zz1'.....} 占了5k空间。5k*6 = 30K
上面两次请求会到同一个服务器。
hash_function(url)=数字%6 =[0-5]
http://192.168.170.21:8088/qy153-
loadbalance/webserver_demo_20220817/
dept/queryById?id=2
http://192.168.170.21:8088/qy153-
loadbalance/webserver_demo_20220817/
dept/queryPage?pageNo=1&pageSize=2