当前所在位置: 首页 > 老域名交易信息

nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)实战 | 一文带你读懂Nginx反向代理

2021-10-11 本站作者 【 字体:

正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

开源Linux

欢迎来到『开源Linux』,这里是国内专业Linux技术社区。专注分享Linux/Unix相关内容,包括Linux运维、Linux系统开发、网络编程、以及虚拟化和云计算等技术干货。后台回复『读书』,有我为您特别筛选的书籍资料~

一个执着于技术的公众号

简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。需要在客户端配置代理服务器进行指定网站访问


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)


反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。

前言

在前面的章节中,我们已经学习了nginx基础知识:

我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。

nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

nginx反向代理配置实例

给小白的 Nginx 10分钟入门指南

1. 实现效果

Nginx编译安装及常用命令

完全卸载nginx的详细步骤

Nginx 配置文件详解

理解正向代理与反向代理的区别

打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页 面中

2. 准备工作

今天我们通过两个实例,带大家读懂nginx反向代理

(1)在 liunx 系统安装 tomcat,使用默认端口 8080,我这里8080被其他应用占用,所以我已修改端口为8081。在conf目录下的server.xml配置文件中,如下,将port改为 8081,其实下面也有类似的Connector 标签,但是要看protocol协议为HTTP/1.1的标签修改即可。

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

tomcat 安装文件放到 liunx 系统中,解压。
Tomcat的路径:/usr/feng/apach-tomcat/tomcat8081下

进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器。

Nginx反向代理实例 11、实现效果

打开浏览器,在地址栏输入地址www.test.com,跳转到百度首页。

(2)对外开放访问的端口 (我这里不需要)

2、准备工作

(1)在Linux系统安装nginx

1)创建用于运行Nginx的用户 useradd -M -s /sbin/nologin nginx 2)下载nginx软件包 wget http://nginx.org/download/nginx-1.18.0.tar.gz 3)解压 tar -xf nginx-1.18.0.tar.gz -C /usr/src 4)configure ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module 参数说明: --user=nginx:指定nginx程序运行用户 --group=nginx:指定nginx程序运行用户组 --prefix=/usr/local/nginx:指定安装路径 --with-http_ssl_module:开启nginx的SSL模块来支持HTTPS访问 5)编译安装 make -j 4 && make install 6)给nginx命令做个软链接,以便PATH能找到 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 7)本次实验nginx版本 [root@qll251 ~]# nginx -v nginx version: nginx/1.18.0

(2)编辑nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

实战 | 一文带你读懂Nginx反向代理server_name:监听访问的域名;proxy_pass URL:把请求转发到指定URL

(3)重启nginx服务

firewall-cmd --add-port=8080/tcp --permanent

实战 | 一文带你读懂Nginx反向代理

如果出现以上报错,说明Nginx未开启SSL模块,解决方案:

在安装编译时,需配置ssl支持 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module

重启nginx服务:

nginx -s stop && nginx

firewall-cmd –reload

(4)Windows hosts文件修改

在Windows的hosts文件中进行域名和ip对应关系的配置

实战 | 一文带你读懂Nginx反向代理3、访问测试实战 | 一文带你读懂Nginx反向代理

如果您在实验过程中遇到如下报错:

实战 | 一文带你读懂Nginx反向代理

出现上面的问题,原因是nginx 没办法监听本地不存在的ip地址。

查看已经开放的端口号 firewall-cmd --list-all

解决方法是在/etc/sysctl.conf 中加入如下内核参数配置

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf sysctl -p 4、访问过程分析实战 | 一文带你读懂Nginx反向代理Nginx反向代理实例 21、实现效果

使用nginx反向代理,根据访问路径跳转到不同端口的服务中:

(3)在 windows 系统中通过浏览器访问 tomcat 服务器
别忘了开启tomcat,在bin目录下,使用 命令:

本次nginx反向代理中使用9001端口访问http://10.43.187.251:9001/edu/,直接跳转转至127.0.0.1:8080访问http://10.43.187.251:9001/vod/,直接跳转转至127.0.0.1:80812、准备工作

(1)部署两个tomcat服务器

./startup.sh


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

3. 访问过程的分析


tomcat依赖java运行环境,因此先完成jdk环境变量的配置

1、下载jdk wget http://big.gxkjbg.com:8080/201704/tools/jdk-linux-x64.tar.gz tar -zxvf jdk-linux-x64.tar.gz -C /usr/src/ ls /usr/src/jdk1.8.0_131/ 2、编辑环境变量 vim /etc/profile export JAVA_HOME=/usr/src/jdk1.8.0_131 export JAVA_BIN=/usr/src/jdk1.8.0_131/bin export PATH=${JAVA_BIN}:$PATH export CLASSPATH=.:{JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar 3、使环境变量立即生效 source /etc/profile 4、检查java版本 [root@qll251 ~]# java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode) [root@qll251 ~]#

(2)启动2个tomcat服务

1、下载免安装版Tomcat wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.54/bin/apache-tomcat-8.5.54.tar.gz 2、创建两个文件夹 mkdir /usr/src/tomcat8080 mkdir /usr/src/tomcat8081 3、解压 tar -zxvf apache-tomcat-8.5.54.tar.gz -C /usr/src/tomcat8080 tar -zxvf apache-tomcat-8.5.54.tar.gz -C /usr/src/tomcat8081 4、启动tomcat1 [root@qll251 ~]# cd /usr/src/tomcat8080 [root@qll251 tomcat8080]# ./apache-tomcat-8.5.54/bin/startup.sh 5、启动tomcat2 由于tomcat1使用8080默认端口,防止端口冲突,我们修改下tomcat2端口: [root@qll251 ~]# cd /usr/src/tomcat8081 [root@qll251 tomcat8081]# vim apache-tomcat-8.5.54/conf/server.xml 22 <Server port="8015" shutdown="SHUTDOWN"> 69 <Connector port="8081" protocol="HTTP/1.1" 启动tomcat2: [root@qll251 tomcat8081]# ./apache-tomcat-8.5.54/bin/startup.sh

(3)检测tomcat端口已正常启动

nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

4、具体配置

a. 第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置

实战 | 一文带你读懂Nginx反向代理

(4)创建测试访问页面

1、在tomcat1中创建a.thml文件 [root@qll251 ~]# cd /usr/src/tomcat8080 [root@qll251 tomcat8080]# cd apache-tomcat-8.5.54/webapps/ [root@qll251 webapps]# mkdir edu [root@qll251 webapps]# echo "<h1>8080!</h1>" > edu/a.thml 2、在tomcat2中创建a.thml文件 [root@qll251 ~]# cd /usr/src/tomcat8081 [root@qll251 tomcat8081]# cd apache-tomcat-8.5.54/webapps/ [root@qll251 webapps]# mkdir vod [root@qll251 webapps]# echo "<h1>8081!</h1>" > vod/a.thml

(5)编辑nginx配置文件

nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

添加内容在 host 文件中

nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

b . 第二步 在 nginx 进行请求转发的配置(反向代理配置)


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

5、最终测试

如上配置,我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故 访问该域名时会跳转到 127.0.0.1:8081 路径上。在浏览器端输入 www.123.com 结果如下:


vim /usr/local/nginx/conf/nginx.conf

实战 | 一文带你读懂Nginx反向代理3、最终测试实战 | 一文带你读懂Nginx反向代理

使用nginx反向代理功能实现了访问两个tomcat服务的需求
nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)


负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负 载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服 务器处理完毕后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成 本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂 度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易 造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情 况呢?

我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机 器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能 满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量 是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能 够满足需求的。那么怎么办呢?上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题 的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解 决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们 所说的负载均衡


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

Nginx 负载均衡 配置实例

1. 实现效果

浏览器地址栏输入地址 http://208.208.128.122/edu/a.html,负载均衡效果,平均 8081 和 8082 端口中

2. 准备工作

a.准备两台 tomcat 服务器

准备两台 tomcat 服务器,一台 8081,一台 8082

上面的反向代理第二个实例中已经配置成功了。但是需要添加点东西,如下哦。

b. 修改一处

在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建 页面 a.html,用于测试。

由于第二个实例中,8082中有了 edu 的文件夹,所以只在8081 文件夹下创建即可。
然后使用在vod文件下使用命令:

cp a.html ../edu/

即可完成,
查看命令

cd ../edu/ # 进入到 edu 目录下 cat a.html #查看内容

c. 测试页面

测试URL

http://208.208.128.122:8081/edu/a.html


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

http://208.208.128.122:8082/edu/a.html


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)


3. 在 nginx 的配置文件中进行负载均衡的配置

修改了第一个示例的 配置

nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

4. 最终测试

测试url

http://208.208.128.122/edu/a.html


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)


nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

5. nginx 分配服务器策略

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题, 顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应 足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品, 很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎, nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略):

a. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
配置方式:

b. weight

weight 代表权重, 默认为 1,权重越高被分配的客户端越多

upstream myserver { server 208.208.128.122:8081 weight=10; # 在这儿 server 208.208.128.122:8082 weight=10; } server { listen 80; server_name 208.208.128.122; location / { root html; proxy_pass http://myserver; index index.html index.htm; }

c. ip_hash

ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

upstream myserver { ip_hash; // 在这儿 server 208.208.128.122:8081 ; server 208.208.128.122:8082 ; } server { listen 80; server_name 208.208.128.122; location / { root html; proxy_pass http://myserver; index index.html index.htm; }

d. fair(第三方)

fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream myserver { server 208.208.128.122:8081 ; server 208.208.128.122:8082 ; fair; # 在这儿 } server { listen 80; server_name 208.208.128.122; location / { root html; proxy_pass http://myserver; index index.html index.htm; }

注:需要C/C++ Linux服务器开发学习资料私信“资料”(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

阅读全文
id_1广告位-300*300
相关推荐

域名注册流程是什么?域名证书是什么?网站域名备案操作的流程是什么?

域名注册流程是什么?域名证书是什么?网站域名备案操作的流程是什么?
域名是一种稀缺资源,具有天然的排他性,域名一旦注册后,其他人就不能再注册相同的域...

网址注册流程和费用?从别人手里买域名,需要哪些流程?

网址注册流程和费用?从别人手里买域名,需要哪些流程?
首先需要了解是在哪个平台买的域名,基本分为以下几个不同的情况:1、同平台购买卖家...

域名怎么购买,初创公司都需要做哪些?买了域名,买了阿里云服务器,能备案了吗

域名怎么购买,初创公司都需要做哪些?买了域名,买了阿里云服务器,能备案了吗
需要。有的话也可以用。 域名备案是和服务器有关,但是只要是大陆的服务器都可以。一...

godaddy注册的域名如何申请域名证书老板在腾讯云买的域名,在阿里云上买的云服务器,这样能行吗?

godaddy注册的域名如何申请域名证书老板在腾讯云买的域名,在阿里云上买的云服务器,这样能行吗?
没问题的。其实域名注册方和云资源服务方本是可相互独立的。只不过现在云资源服务商都...

个人网站https证书申请怎么弄,个人网站可以申请https证书吗?服务器证书和ssl证书有什么区别吗?

个人网站https证书申请怎么弄,个人网站可以申请https证书吗?服务器证书和ssl证书有什么区别吗?
服务器证书是ssl证书中的一种,服务器证书包括基于域名申请的证书和基于IP申请的...

域名注册流程是什么?域名证书是什么?如何注册一个域名?

域名注册流程是什么?域名证书是什么?如何注册一个域名?
1.推荐一个信誉,质量,服务,稳定很好的网站,例如:520互联、中华网络、在这个...

[问题交流]什么叫域名?什么叫IP地址?什么叫DNS?什么叫URL?如何设置网站主目录及设置域名通过域名访问[url=http://www.qqsoft8.com]QQ软件吧经典头像[/url]

[问题交流]什么叫域名?什么叫IP地址?什么叫DNS?什么叫URL?如何设置网站主目录及设置域名通过域名访问[url=http://www.qqsoft8.com]QQ软件吧经典头像[/url]
如何设置网站主目录及设置域名通过域名访问[url=http://www.qqso...

我刚买了个域名里面有“URL转发”这是怎么回事?域名怎么转URL?

我刚买了个域名里面有“URL转发”这是怎么回事?域名怎么转URL?
不用呀!那些图片视频呀什么的你可以放你电脑上 把URL(地址)指向你图片的位置就...

短网址有什么用关于域名缩短的问题

短网址有什么用关于域名缩短的问题
会打字就会建网站,操作简单。建议先免费试用,看一下效果,不满意不付款。 具...

谁有稳定点的缩短网页的网址?这种超短网址怎么做的?

谁有稳定点的缩短网页的网址?这种超短网址怎么做的?
缩短地址服务也叫域名地址减肥服务,就是将很长的网页链接地址简化成可识别的简短地址...