Nginx系列之 一 反向代理

news2024/11/24 12:37:48

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.coloradmin.cn/o/766940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣 860. 柠檬水找零

题目来源:https://leetcode.cn/problems/lemonade-change/description/ C题解:由于收到的钱币只有5,10,20三种,对于5元直接收,对于10元找零1张5元,对于20元找零15元,可以找零105或者…

java 使用 geotools 将 shp 文件(zip压缩包)转换为 geoJson 格式

步骤0:你也可以参考这篇文章 :java实现geojson格式数据与shp文件相互转换 步骤1:引入引入geotools工具。 步骤2:编写工具类,获取shp的zip文件。 步骤3:编写工具类,解析shp文件成为jsonObject…

6.7Jmeter5.1,非GUI模式,通过命令行传递线程数和运行时间

原创文章,谢绝转载。 一、前提 本次做性能测试,需求是需要在Linux下的非GUI模式下执行。但用命令行执行时,线程数需要改变,为了执行方便,不需要每次都在脚本中修改线程数,那么线程数都需要通过参数传递&…

如何使用自有数据微调ChatGLM-6B

构建自己的数据集 数据格式:问答对 官网例子 ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。 { "content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖…

【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏2

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

AI图像生成无需代码连接集简云数据表的方法

1 场景描述 人工智能的出现,各个领域都开始尝试将AI作为提高工作效率的必备工具。除了AI对话等,越来越多的AI图像生成工具也出现在市场上。这些AI图像生成工具可以自动创建惊人的图像、艺术作品和设计,从而帮助设计师和创意人员更快速地实现其…

下个月要备多少货?伙伴云零代码进销存系统让您一目了然

大量企业的商业模式是销售实体商品,他们需要进销存系统来帮助企业管理好采购、销售、仓储的业务流程,从而更高效稳定的获得利润,因此进销存是企业的核心业务场景。来看看伙伴云零代码进销存系统如何精准计算进货出货数量,让中小企…

unable to get local issuer certificate (_ssl.c:992)‘)]

操作系统mac os python 版本 python3.11 import edge_tts import asyncio TEXT "how are you"print(TEXT) voice zh-CN-YunxiNeural output 4.mp3 rate -4% volume 0% async def my_function():tts edge_tts.Communicate(text TEXT,voice voice,rate rate…

上海汽配IPO上会在即:由镇政府控股,募资还要偿还银行贷款?

近日,上海证券交易所披露的信息显示,上海汽车空调配件股份有限公司(以下简称“上海汽配”)将于7月21日接受上市委审议。据贝多财经了解,上海汽配已于7月13日更新了招股书(上会稿)。 本次冲刺IPO…

学Python编程为什么会对学好数学有帮助呢?

Python编程和数学有什么关系呢?Python的起源是怎样的呢? 我们先来简单认识一下Python,和Python交个朋友。 Python的全拼是P—Y—T—H—O—N,发音是Python,汉语解释是蟒蛇的意思。 我们再来看Python的图标&#xff0c…

STM32实现MLX90614非接触测温串口显示(标准库与HAL库实现)

目录 模块选择 编程环境 MLX90614基本原理 通信协议(SMBus通信,类IIC通信) 代码实现 STM32与模块之间接线表 1.标准库实现温度采集 2.HAL库实现温度采集 模块选择 STM32F103C8T6 MLX90614 非接触式红外测温传感器 编程环境 KEIL5&…

了解交换机接口的链路类型(access、trunk、hybrid)

上一个章节中讲到了vlan的作用及使用,这篇了解一下交换机接口的链路类型和什么情况下使用 vlan在数据包中是如何体现的,在上一篇的时候提到测试了一下,从PC1去访问PC4的时候,只从E0/0/2发送给了E0/0/3这是,因为两个接…

手把手GDB调试

确保你的程序有可调式的信息 使用gcc编译一个程序 ,带上一些额外的参数 -o0 -g-o0 :避免编译器优化,使用最低的优化等级,默认的编译选项 -g :生产调试信息 如果你已经有一个工程demo,使用cmake时注意使用Debug模式&…

Java使用poi-tl生成word文档添加超链接及添加多个超链接情况

首先是生成单个超链接情况,很简单 就是通过字符替换就行,但是替换的value格式是 TextRenderData data.put("attachment",Texts.of("文件名").link("http://wenjianlj文件路径.com").create()); 就是在替换的data&#…

spring复习:(39)注解方式的ProxyFactoryBean

一、定义接口 package cn.edu.tju.study.service;public interface MyService {void myMethod(); }二、定义实现类: package cn.edu.tju.study.service;public class MyServiceImpl implements MyService{Overridepublic void myMethod() {System.out.println(&qu…

认识一个失意的李白:如何制作一个人物生平二维码?

电影《长安三万里》的火爆,又一次唤醒了我们对大唐盛世的憧憬和向往。 飞流直下的瀑布、洒落床前的月光、花间独酌的美酒、胡天八月的大雪、越过青天的白鹭、长河孤烟的大漠、钟鼓馔玉的宴会……每每读起,那景象如在眼前。 对于一代又一代读着唐诗、听…

小程序一码跳多端的实现架构。。。

以常用的小程序,微信,支付宝为例, 现在要实现一个二维码,通过微信扫跳转微信小程序,通过支付包扫,跳转支付宝小程序,(其他小程序也如此) 实现思路,H5页面周转…

社区生鲜超市数字化经营怎么做?社区生鲜超市系统一览

社区生鲜超市是一种以货架自助的形式、结合现代超市经营理念,来售卖果蔬、肉类、水产、粮油、熟食等生鲜产品的一种零售形式,通常为小规模的连锁生鲜超市、专营店,主要服务于一个社区、街区等。目前,社区生鲜超市通常拥有较好的区…

【数据结构】二叉树详解(1)

⭐️ 前言 ✨ 二叉树的概念性质 ⭐️ 二叉树链式结构的实现 结构定义&#xff1a; #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int BinaryTreeDataType;typedef struct BinaryTreeNode {BinaryTreeDataType value;struct Binary…

如何克服Leetcode做题的困境

文章目录 如何克服Leetcode做题的困境问题背景克服困境的建议实践与理论结合切忌死记硬背分析解题思路不要过早看答案迭代式学习寻求帮助坚持与耐心查漏补缺 结论 如何克服Leetcode做题的困境 问题背景 明明自觉学会了不少知识&#xff0c;可真正开始做Leetcode题目时&#x…