鉴于上次搭建halo端口占用问题,雷池waf,反向代理,nginx的作用我又做了一次深刻的思考
本文我会讲解nginx,反向代理,waf的一些内容,才学疏浅如有不妥之处,敬请斧正
先说我的目标,我起初是想用二级域名把服务器上的另一个端口服务绑定上去,上网查了什么先绑定一个记录,然后再通过显性URL,隐形URL,但是并没有实现。
附上nginx的简介,我们可以看到nginx是一个非常强大的web服务器,有很多功能,反向代理,负载均衡……我主要讲nginx的反向代理功能,一文说懂什么是反向代理
Nginx 简介
Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。Nginx 是一款免费的开源软件,根据类 BSD 许可证的条款发布。一大部分Web服务器使用 Nginx ,通常作为负载均衡器。
nginx和反向代理
直接说反向代理是什么,举例说明我也感觉很抽象,没有直接拿实例说的明白,这里我将会用nginx和雷池waf的反向代理来说
基于hexo的搭建,nginx的配置我是照搬参考博客的https://www.cnblogs.com/cheyaoyao/p/17836522.html
在那里我也有提到,说实话对于nginx我只知道它能实现一些功能,但是具体到底是什么,怎么实现的,我不知道。文章给了两个配置文件
nginx.conf
1 | user nginx; |
conf.d->default.conf
1 | server { |
先看下面default.conf的配置信息,监听IPV4和IPV6的80端口,然后指定虚拟主机的域名/IP,然后再指向指定文档根目录,从而实现访问
访问crispsheep.icu–>发送请求–>服务器接受请求–>nginx处理–>指向指定的文件–>返回响应
这样你就能看到我的博客内容了
上面nginx.conf的内容
我们看这里,这里有个include,是一个文件包含,意思是包含这个目录下所有.conf的文件
conf.d->default.conf的文件内容就被包含进去了
再说nginx的反向代理,反向代理和上面的default.conf内的一些信息有些类似,下面是一个反向代理的配置信息
1 | server { |
127.0.0.1是本地回环地址,当访问example.com的时候,它会指向proxy_pass后面的服务,也就是你本地的9999端口的服务
这就是反向代理,在客户端和服务端之间有个服务器负责完成这个操作,这里完成这个操作的就是nginx。
反向代理的原理是,在客户端和服务器之间添加一个代理服务器,客户端将请求发送给代理服务器,代理服务器将请求转发给服务器,服务器处理请求并返回响应,代理服务器再将响应转发给客户端。
这里我说两个点
1、有人可能会问为什么nginx总是监听80端口,这是因为http协议默认的就是80端口,所以访问网页进行通讯走的就是80端口,https则是443端口。
2、带端口的问题,假设你在服务器上开启了一个web应用服务,端口是9586,如果你没有域名,你每次访问都需要用公网IP+端口才能访问到,如果你有一个域名,就可以通过反向代理的方式,让域名指向这个端口,这样直接域名访问即可。如果服务器上就一个服务,可以直接把公网IP反向代理到这个端口服务,就不需要域名了(IP地址还是没有域名好记忆)
再说我上面的目标,用二级域名把服务器上的另一个端口服务绑定上去,用nginx的反向代理完全可以实现。
由于上次被挖矿的原因,我选择了雷池waf
雷池WAF
雷池waf安装很方便,一条命令,遇到选项y即可
1 | bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" |
雷池是基于nginx开发的,作为反向代理接入网络,我之前安装nginx和雷池,一直显示80端口被占用,就是我之前开启nginx的服务导致的,nginx占用了80端口,导致我之前用雷池添加站点80端口不能用,选择其他端口后,如果想经过雷池保护,就需要在域名添加端口号了,雷池添加站点保护的原理就是反向代理,选择需要被保护站点的域名或者IP,然后选择端口,如果这时候不是80端口,比如是666端口,那么只有你输入域名+666端口才能经由雷池,然后再代理到你的上游服务器。
设置雷池前,由于我的博客的配置文件是监听80端口的,我们需要先停止nginx的服务,让80端口空闲出来
1 | sudo systemctl stop nginx |
然后再修改我博客的配置文件
1 | server { |
把之前的80端口改成,81(只要是没被占有的端口皆可)
然后再设置雷池端口(http-80,https-443)
这里我都是http服务,443那个端口删掉就行
设置好后再启动nginx
1 | sudo systemctl restart nginx |
这里我们使用的是雷池作为代理服务器进行转发的
由于雷池和我的web服务都在一个服务器,下面的上游服务器,就填写http://127.0.0.1:81即可
我们来捋一下访问我博客的流程
基于nginx
配置文件
1 | server { |
访问–>发送请求–>nginx服务器接受–>指向到指定的文档–>返回响应
通俗点说就是你访问我博客域名,默认的http协议走80端口,我的配置文件就监听80端口,我收到你的请求之后,指向我本地的博客文件,这样你就能看到了
基于雷池的反向代理
1 | server { |
访问–>发送请求–>雷池–>雷池反向代理到指定上游服务器的端口服务(127.0.0.1:81)–>上游服务器接收–>指向我的博客的文件
上面的配置信息修改成81端口,我加了waf之后,你访问我的博客,会先经过雷池,然后雷池把你的请求指向本地的81端口(因为waf和博客在同一台服务器)相当于你访问了我本地的81端口,然后我的配置文件监听的就是81端口,再指向我的博客文件
至此你应该对反向代理,nginx,雷池waf有了一定的了解,今天我也算是彻底说明白了到底什么是反向代理和具体的原理,希望能帮到你~