nginx

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 firewalld
vi /etc/sysconfig/selinux
# 设置禁用
SELINUX=disabled

 第一台服务器(192.168.48.152):

配置/etc/httpd/conf/httpd.conf

42 Listen 80
43 Listen 8081
44 Listen 8082
45 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 None
Require 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 None
Require 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 None
Require all granted
</Directory>
</VirtualHost>
第二台服务器(192.168.48.153):
配置/etc/httpd/conf/httpd.conf

 42 Listen 80

43 Listen 8084
44 Listen 8085
45 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 None
Require 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 None
Require 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 None
Require all granted
</Directory>
</VirtualHost>

测试:

 

# 启动 httpd
systemctl 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;
51
52 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值