目录
3.4丶Nginx配置虚拟主机 (一个Nginx反向代理多个后端服务)
1丶什么是Nginx
Nginx 是一个高性能的HTTP和反向代理web服务器(反向代理后端地址),同时也提供了IMAP/POP3/SMTP服务,其特点是占有内存少,并发能力强,Nginx上官网上解释一秒可以支持50000个并发连接。在实际的生产环境中,Nginx可以支持20000-40000个并发连接,目前众多公司都在Nginx。
2丶Nginx有什么作用
- 前端项目部署
项目开发完成后,前端项目需要服务器部署. 我们可以使用 vue-cli的打包命令:npm run build 将项目打成静态资源,拷贝到tomcat的ROOT目录中启动Tomcat ,但是有问题,tomcat是Servlet容器,处理静态页面效率低下,我们需要专门的http服务器(静态资源服务器)部署前端,Nginx就是其中一个。其他的如LVS,HAproxy等 即:把打包后的静态项目(Html+css+js),直接拷贝到Nginx,启动Nginx - 虚拟主机配置
使用Nginx虚拟主机配置,可以实现一个Nginx部署多个应用,前端使用Nginx部署静态网站,后端服务器使用Nginx进行反向代理 - 解决跨域问题
在开发阶段我们可以在后端代码中配置跨域,使用Nginx做反向代理后,我们就可以在Nginx配置跨域 - 后端项目负载均衡器(反向代理)
当我的后端应用做了集群之后,就会存在多个后端地址,那么浏览器访问哪个后服务器 呢?我们需要使用Nginx作为负载均衡器,将浏览器发送过来的请求按照负载均衡算法路 由(分发)到多个后端应用服务器上,Nginx是一个负载均衡器.同时也是网关。
3丶Nginx如何使用
3.1丶安装:(演示Windows安装)
绿色软件解压即可安装
3.2丶使用 :
nginx可以通过命令行来启动,
操作命令:
- 启动: start nginx.exe localhost 默认端口是80
- 停止: nginx.exe -s stop
- 重新加载: nginx.exe -s reload
修改了配置文件的时候需要重新加载.
注意:启动闪退可能是80端口被占用解决方案: https://www.runoob.com/w3cnote/windows-finds-port-usage.html 。
3.3丶前端静态网站部署
- 对前端项目的种类进行前端进行打包,对于Vue+ElementUI的前段项目通过 vuecli的命令 npm run build 将前段打包成静态资源,然后拷贝到Nginx中进行部署,
- 如果是传统的前段项目(html+css+js),直接将项目拷贝到Nginx中进行部署即可,无需使用相关打包命令。
3.4丶Nginx配置虚拟主机 (一个Nginx反向代理多个后端服务)
虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器(具体操作才Nginx的config文件中配置,重启即可)。
上传静态网站:
(这里假设前端项目名字为wangluvip)
前端门户项目(wangluvip_menhu)打包后上传至nginx/wangluvip_menhu目录下
后端管理界面项目(wangluvip_houduan)打包上传至 nginx/wangluvip_houduan下
修改Nginx 的配置文件conf/nginx.conf
server {
listen 8081;
server_name localhost;#域名
location / {
root wanglu_admin;
index index.html;
}
}
server {
listen 80;
server_name localhost;#域名
location / {
root wanglu_front;
index index.html;
}
}
验证nginx配置文件是否正确
方法1. 进入nginx安装目录sbin下,输入命令
./nginx -t
回显test is successful说明配置正确
方法2. 在启动nginx命令 -c 前加 -t
./sbin/nginx -t -c ./conf/nginx.conf
停止nginx
ps -ef|grep nginx
找到对应的nginx进程号 再使用 命令 :
kill - 9 进程号
- 重启nginx服务:
进入nginx安装目录执行 ./sbin/nginx -s reopen
3.5丶测试访问
地址栏输入http://localhost:80 查看对应效果 地址栏输入http://localhost:8081 查看对应效果
注意:这种配置方式的问题在于多个主机是通过端口来进行区分的,浏览器除了要更换域名还需要更换端口,如果解决这一问题我们需要为主机配置域名
3.6丶Nginx作为反向代理
- 解释:不同域名或者不同地址转发给不同服务器
- 为什么需要 :静态项目可以通过虚拟主机实现多个项目的部署,但动态tomcat网站就不行,nginx无法解释运行.我们可以将Nginx作为反向代理服务器,把动态资源代理给下游服务器。
- 在这里解释一下正向代理和反向代理,
- 正向代理:确切的知晓用户发起的请求是哪个服务器提供服务,由于种种原因不能直接访问,通过代理服务器转发请求,
- 反向代理:用户请求Nginx时候,NGINX后端关联一组或者多组后端服务,用户其实是不知道真实不知道真实后端服务地址的,通过访问Nginx,Nginx通过相应的算法(随机,轮序,权重等)打到后端上。
反向代理配置:
server {
listen 80;
server_name iswanglu.vip;#用户访问的门户地址
location / {
proxy_pass http://127.0.0.1:8082; #访问域名为 iswanglu.vip都交给8082处理
index index.html index.htm;
}
}
反向代理的规则可以通过域名的不同来进行区别,也可以通过uri的不同来进行区别。 配置多个服务进行负载均衡
...省略...
upstream apis{ #负载均衡配置
server 127.0.0.1:8083;
server 127.0.0.1:8084;
}
server { #后台API
listen 80; #监听的端口
server_name iswanglu.vip; #主机名
#charset koi8-r;
#access_log logs/host.access.log main;
# location的请求的url的映射规则 “/” 作用于所有的请求
location / {
proxy_pass http://apis;
}
}
常见的负载均衡算法:
- 随机 :生成一个随机值,随机的访问后端的服务器,
- 轮询:默认轮询,把请求以雨露均沾的方式分发都后端服务器上,一个服务器依次轮着访问,
- 指定权重 :通过设置权重值,权重值越大,被访问的机会就越高,
- IP绑定 ip_hash :根据ip进行hash计算 ,相同的hash的请求分发到相同的服务器上,
- url_hash :根据访问的url进行hash计算 ,相同的hash的请求分发到相同的服务器上,
- fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。