Linux服务搭建篇:Nginx反向代理原理与案例详解
一、什么是正向代理
举个栗子:
我们在校外、公司外,是访问不到学校、公司的内网的,但是我们想要访问内网资源时,会用到VPN。而一般内网会存在一个VPN服务器,我们使用VPN其实就是让内网的VPN服务器代替我们去进行访问(VPN服务器位于内网是可以访问内网资源的)。这其实就是一种正向代理,通过内网VPN服务器代理客户端进行请求。
正向代理: 如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。下面是正向代理的原理图。
由于工作环境原因,日常工作只能局限于单位的局域网,如果想要访问互联网,怎么办呢?这就需要用到正向代理。本人经常用正向代理来进行上网。
二、什么是反向代理
反向代理: 看下面原理图,就一目了然。其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
正向代理和反向代理的区别,一句话就是:如果我们客户端自己用,就是正向代理。如果实在服务器用,我们用户无感知,就是反向代理。
这里有个问题:反向代理服务器,怎么选择挂在它后面的哪一台具体服务器呢?答案在后文揭晓,这就是负载均衡。
三、安装Nginx和Tomcat
3.1 实验环境
这里准备了三台虚拟机来做这个案例,一个节点安装Nginx,其他两个节点安装Tomcat,通过Nginx服务做反向代理,访问tomcat
服务器需要开放端口,或者直接关闭防火墙,云服务器的话建议开端口,不要关防火墙
3.2 在192.168.88.10节点安装Nginx服务
添加nginx yum源
建立新的yum缓存
查看一下有没有可以安装的nginx
使用yum安装nginx
安装完成,启动nginx服务
访问nginx,在防火墙放行服务端口,懒得整就关防火墙。
完成安装!!!
3.3 Nginx配置文件
在学习 Nginx 之前,我们要熟知它的配置文件。毕竟,我们下面需要做的所有配置(反向代理、负载均衡、动静分离等),都是基于它的配置文件。
Nginx 默认的配置文件是在安装目录下的 conf 目录下,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。完整的配置文件,可以看一下文章最后。修改过nginx.conf配置文件,记得要重启Nginx服务
配置文件中有很多#号,该符号表示注释内容,去掉所有以 # 开头的段落,精简之后的配置文件内容如下(PS:其实注释掉的地方,都是一些功能的使用代码,需要用到的时候,取消注释即可):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
去掉注释信息后,可以将 nginx.conf 配置文件分为三部分:
第一部分:全局块
worker_processes 1;
从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
上面这行 worker_processes 配置,这是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
第二部分:events 块
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置
四、反向代理如何配置
4.1 反向代理实例一
在192.168.88.10节点安装tomcat服务
直接使用yum安装,centos默认yum源就有tomcat
yum install -y tomcat
安装默认浏览器管理界面 yum install -y tomcat-webapps tomcat-admin-webapps
启动tomcat,并设置开机自启动
访问tomcat主页,得先放行服务端口
开始配置反向代理案例一
案例一仅在一个节点上完成,分别安装nginx和tomcat,使用nginx做代理,真正的服务部署在tomcat上。
找到nginx的配置文件,添加以下内容,注意格式:
server {
listen 80;
server_name 192.168.88.10;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
添加之后重启nginx,让配置文件生效
systemctl restart nginx
然后我们再次访问192.168.88.10的80端口,可以看到已经跳转到tomcat服务了,这样一个简单的反向代理就配置完成了
4.2 反向代理案例二
这个相对高级一点,使用3个节点,在192.168.88.10节点配置nginx,实现从192.168.88.10节点跳转到192.168.88.20和192.168.88.30节点的tomcat。
192.168.88.10节点的nginx在上面的案例已经安装完成,这里就不赘述了,安装其他两个节点的tomcat,安装过程和案例一相同
yum install -y tomcat
yum install -y tomcat-webapps tomcat-admin-webapps
192.168.88.20节点的tomcat
192.168.88.30节点tomcat
修改一下两个节点的tomcat主页文件,做一下区分
Tomcat主页文件位置(yum安装情况)/var/lib/tomcat/webapps/ROOT/index.jsp
在主页文件随意加一个标记即可,两个节点做法一样,修改之后重启tomcat
4.3 开始配置反向代理
编辑/etc/nginx/nginx.conf添加以下内容
vi /etc/nginx/nginx.conf
完成后重启nginx服务
访问代理服务器
刷新一下页面再看看
尝试down掉其中一个tomcat
再次访问代理服务器
现在就只有一台tomcat服务了,无论怎么刷新都只能访问192.168.88.20节点的tomcat,nginx反向代理案例到此结束!!!
希望对您有用,有不对的地方希望不吝赐教,欢迎在评论区留言,分享你的看法。