前言
上一篇文章我们分享了Linux的软件安装以及项目后端的部署,本篇文章将要分享的内容是,Nginx的入门安装、反向代理、负载均衡等。
一、Nginx简介
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)
代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实
上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站
用户有:百度、京东、新浪、网易、腾讯、淘宝等。
特点
更快:单次请求响应更快,高并发可以更快的处理响应
高拓展性:设计极具扩展性,由多个不同功能、不同层次、不同类型且耦合度极低的模块组成
高可靠性:很多高流量网站都在核心服务器上大规模使用 Nginx
低内存消耗:一般1万个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗2.5MB内存
高并发:单机支持10万以上的并发连接
热部署:master 管理进程与 worker工作进程的分离设计,使得 Nginx 能够支持热部署
开源协议:使用 BSD 许可协议,免费使用,且可修改源码
二、反向代理
在介绍反向代理之前先讲一下什么是正向代理
正向代理指的是,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端
把局域网外的
Internet
想象成一个巨大的资源库,则局域网中的客户端要访问Internet
,则需要通过代理服务器来访问,这种代理服务就称为正向代理上图:
讲完正向代理,现在该分享一下反向代理。
反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器
IP
地址。上图:
这样我们访问百度是用www.baidu.com,而不是他的真实服务器的ip
讲了反向代理,那么为什么要用反向代理呢?
1、可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器。
隐藏了真实的ip地址。
2、通过缓存静态资源,加速Web请求
3、实现负载均衡
三、负载均衡
目前市面上,主流的负载均衡方案,硬件设备有F5,软件方案有四层负载均衡的LVS,七层负载均衡的Nginx、Haproxy等
本文分享的内容是使用Nginx做负载均衡。
那么什么是负载均衡呢?
负载均衡是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快。
打个比方,某电商平台淘X,在双十一期间用户访问量很大,一个服务器肯定是不够的,而且承担的压力蛮大。通过负载均衡我们将所有的请求分摊在配置好的服务器中,根据服务器的性能,我们可以通过设置权重来分配各个服务器的分摊量。这样能更好的提升客户的使用体验。
就算一个服务器崩了,还有其他服务器在使用,不会导致整个软件无法使用。
四、案例
讲完理论咱们实践一手,用Nginx搭建前端项目并且实现负载均衡。
1、安装Nginx
1.1、添加 nginx 官方提供的 yum 源
rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.2-1.el7_4.ngx.x86_64.rpm
使用yum安装Nginx
yum install nginx
1.2、启动以及设置开机启动
systemctl start nginx.service
systemctl enable nginx.service
1.3、设置防火墙开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload && firewall-cmd --list-port
1.4、测试是否可用
能到这个界面就是安装成功且可用了。
2、Tomcat负载均衡
这里做负载均衡需要多个服务器,我们直接复制一份解压好的,过程就不展示了
然后我们将复制的Tomcat的配置修改一下
1. HTTP端口,默认8080,改为8081
2.远程停服务端口,默认8005,改为8006
3.AJP端口,默认8009,改为8010防火墙开放8081端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload && firewall-cmd --list-port
启动服务,测试访问
上面的步骤弄完,现在可以开始Nginx的配置了。
找到nginx.conf文件,进行配置
upstream tomcat_list { #服务器集群名字
server 127.0.0.1:8080 weight=1; #服务器1 weight是权重的意思,权重越大,分配的概率越大。
server 127.0.0.1:8081 weight=1; #服务器2 weight是权重的意思,权重越大,分配的概率越大
}在default.conf中添加
location / {
#root /usr/share/nginx/html;
#proxy_pass http://172.17.0.3:8080;
proxy_pass http://tomcat_list;
index index.html index.htm;
}重启Nginx服务让配置生效
systemctl restart nginx
测试是否生效
最终的结果就是,Nginx访问一个网址,是由两个tomcat共同承担压力;
3、前端项目部署
我们是希望能用www.zhw.com就能访问我们的项目
我们现在试着访问www.baidu.com
可以看到访问的不是百度,而是我们的项目。
因为这是我们直接编码的服务地址,会优先执行我们本机的地址,如果本机没有,它将会执行公网的。公网就是我们日常进入的网站,而这个hosts是我们本机的。
3.1、本地测试
将前端项目打包,生成dist文件夹,点击index.html访问项目测试
npm run build
3.2、C:\Windows\System32\drivers\etc\hosts中增加映射关系
3.3、default.conf配置
3.4、重启测试
总结
本文分享了Nginx的负载均衡、反向代理以及前端项目的部署,在实际项目中的应用需要靠自己完成。本次分享就到此为止,本人技术有限,如有错误还望指正,谢谢啦。