Nginx系列之 一 反向代理

image.png

 目录

Nginx系列之 一 入门_开着拖拉机回家的博客-CSDN博

一、Nginx概述

二、反向代理

2.1 正向代理

2.2 反向代理

三、反向代理实战

3.1测试服务器

3.2 配置文件说明

3.3 反向代理实战案例一

1、目的

2、具体实现

3.4 反向代理实战案例二

1、目的

2、具体实现


入门文章

Nginx系列之 一 入门


一、Nginx概述


Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,在互联网项目中广泛应用。

Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数。


二、反向代理


2.1 正向代理


由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助VPN来实现(或者是我们访问客户内网),这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。

2.2 反向代理


反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。


三、反向代理实战


3.1测试服务器


我准备了两台测试服务器一台作为Nginx 服务器,、另一台 作为Tomcat 服务器。

IP

组件

端口

192.168.2.211

Tomcat

8080

192.168.2.154

Nginx

80

3.2 配置文件说明


https块是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。后面的反向代理、动静分离、负载均衡都是在这部分中配置。

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;}
}
  • http 全局块:http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
  • server 块:这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。而每个server块也分为全局server块,以及可以同时包含多个locaton块。

3.3 反向代理实战案例一


1、目的

目的:在浏览器地址栏输入地址 www.kangll.com 跳转 Linux 系统 Tomcat 主页面。

2、具体实现

先配置 Tomcat,此处不赘叙,可以在 Windows 访问:

修改之前,访问Nginx默认页面:

通过修改Linux hosts文件,将 www.kangll.com 映射到 192.168.2.154(Nginx服务器)

192.168.2.154 hdp105 www.kangll.com 

nginx.conf配置如下:

http {...server {listen       80;             # 监听80端口server_name  www.kangll.com; # 基于名称或者IP的虚拟主机配置location / {                 # 用于匹配 URL# 该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式proxy_pass http://192.168.2.211:8080;index  index.html index.jsp;  # 该指令用于设置网站的默认首页}}...
}

如上配置,Nginx监听80端口,访问域名为 www.kangll.com (不加端口号时默认为 80端口),请求转到 proxy_pass 配置的对应服务器上。

成功访问

3.4 反向代理实战案例二


1、目的


目标:一个server 中配置两个location,根据访问的路径跳转到不同端口的服务中。

  • 访问 http://www.kangll.com:9666/edu/ 直接跳转到 192.168.2.211:8082
  • 访问 http://www.kangll.com:9666/vod/ 直接跳转到 192.168.2.211:8083

2、具体实现


准备:配置两个 Tomcat,端口分别为 8082 和 8083,都可以访问,对应端口修改配置文件即可。

Tomcat1启动

8082端口 Tomccat启动成功

Tomcat2启动

8083端口 Tomccat启动成功

配置 html 页面

apache-tomcat-8.5.87-8082/webapps/edu/a.html  输入
hello, 8082-Tomcat!apache-tomcat-8.5.87-8083/webapps/edu/b.html  输入
hello, 8083-Tomcat! 

访问Tomcat

192.168.2.211:8082/edu/a.html
192.168.2.211:8083/vod/b.html

配置反向代理nginx.conf 配置如下:

http {...server {  # 虚拟主机,可以配置多个                listen       9666;   # 用于配置网络监听IP或者端口server_name  www.kangll.com; #基于主机名或者IP虚拟主机配置location /edu/ {  # 路径/edu/ 匹配之后,去匹配相应的网页# 该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式proxy_pass http://192.168.2.211:8082;root  a.html;}location /vod/ {  # 路径/edu/ 匹配之后,去匹配相应的网页proxy_pass http://192.168.2.211:8083;root  b.html;    # 文件根目录}}...
}

一个 server 块可以配置多个 location 块。location 块:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。

通过 kangll.com:9001/edu/a.html 访问 Tomcat-8082

通过 kangll.com:9001/vod/b.html 访问 Tomcat-8083

image.png

 nginx access.log 日志打印

客户端服务器192.168.2.96 访问页面是 b.html ,请求到 Nginx 代理的服务器www.kangll.com:9666 ,请求的状态 200。

192.168.2.96 - - [15/Jul/2023:20:17:37 +0800] "GET /vod/b.html HTTP/1.1" www.kangll.com:9666 200 20 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "-"


参考:

https://www.cnblogs.com/ysocean/p/9392908.html

神器 Nginx 的学习手册 ( 建议收藏 )

https://github.com/aminglinux/nginx/blob/master/proxy/bu_ca.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28665.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sentinel的线程隔离和熔断降级

上一节整理了Sentinel的限流,限流可以降低微服务的负载,避免因为高并发而故障,进而传递给其他相关服务而引发服务雪崩。以上仅为避免服务故障,而当某个服务真正故障时,如何处理才能防止服务雪崩? ⇒ Sentin…

手写IOC

IOC原理(手写IOC) Spring框架的IOC是基于反射机制实现的。 反射回顾 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息…

【JS】设置滚动属性默认自动滚动到底部(overflow:scroll;)

文章目录 核心代码应用场景 核心代码 设置滚动属性默认自动滚动到底部: // 获取设置了滚动属性的div标签 const div document.getElementById(conversationalDiv); // 设置滚动的顶点坐标为滚动的总高度 div.scrollTop div.scrollHeight;应用场景 场景&#xff…

050、事务设计之Percolator事务模型

Percolator 背景 Bigtable: 大表打散每行到各个节点,每一行作为一个kv。解决的问题 一个事务涉及的行在多个节点,如何用单行对一个事务进行控制,实现原子性。 快照隔离级别(snapshot ) 白色点:代表事务开始…

flask基本用法小白教程+按钮跳转到指定页面+python和pip安装(后附)

一、flask学习教程: 1.1 基本程序: 大家可以在pycharm中复制如下代码,先感受一下flask的基本用法: 点击链接可进入浏览器查看程序运行的结果,在127.0.0.1:5000后面添上/test1/等设定的文字,可查看不同函…

[RocketMQ] Broker CommitLogDispatcher 异步构建ConsumeQueue和IndexFile源码解析 (十四)

CommitLogDispatcherBuildConsumeQueue: 异步构建ConsumerQueue。CommitLogDispatcherBuildIndex: 异步构建IndexFile。 文章目录 1.CommitLogDispatcherBuildConsumeQueue构建ConsumeQueue1.1 putMessagePositionInfo写入消息位置信息1.2 findConsumeQueue查找ConsumeQueue1.2…

flutter开发实战-卡片翻转动画效果Transform+IndexedStack+rotateAnimation

flutter开发实战-实现卡片翻转动画效果 之前开发中遇到了商品卡片翻转,商品正面是商品图片、商品名称;背面是商品价格,需要做卡片翻转动画。 动画实现即:在一段时间内,快速地多次改变UI外观;由于人眼会产生…

单例模式、指令重排序、锁、有序性

今天在回顾单例模式时,我们都知道懒汉式单例中有一种叫做双重检查锁的单例模式。 我们来看下下面的代码有没有问题: 这段代码我们可以看到,即优化了性能,在多线程情况下,如果实例不为空了,则直接返回了。…

[element-ui] el-select,虚拟滚动(vue-virtual-scroll-list)

一、问题描述 表单中某下拉框,由于数据过多,选择的时候会因为数据量过大导致页面卡顿,于是对于el-select进行二次封装,实现虚拟滚动。 二、实现如下: 看起来是加载了全部数据,实际上只加载了自己设定的1…

无需学习Python,一个公式搞定领导想看的大屏

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 不要让“做不了”成为数字化转型的障碍 随着数字化的脚步加快,越来越多的企…

Spring Batch之读数据库—JdbcCursorItemReader之自定义PreparedStatementSetter(三十八)

一、自定义PreparedStatementSetter 详情参考我的另一篇博客: Spring Batch之读数据库——JdbcCursorItemReader(三十五)_人……杰的博客-CSDN博客 二、项目实例 1.项目实例 2.代码实现 BatchMain.java: package com.xj.dem…

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了,使用离线安装包就需要自己手动制作一个; 以vs2019为例: 先去官网下载在线安装器 官网下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…