• 极智开发 | 讲解 Nginx 特性之一:反向代理


    欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

      大家好,我是极智视界,本文讲解一下 Nginx 特性之一:反向代理。

      Nginx,也即 engine x,是一个高性能的 http 和 反向代理的 web 服务器,同时也提供了 IMAP / POP3 / SMTP 服务。Nginx 有三大特性:反向代理负载均衡动静分离。这里我们分三篇来分别进行讲解,首先是 反向代理

    1. 反向代理介绍

    代理 是一个 中间商 的概念,代理 分 正向代理反向代理,这两个概念听起来好像很高端,但在我们的生活、工作中是十分常见的。要说代理,首先你得了解 C - S 架构,即:Client (客户端) - Server (服务器),一边是需要服务的一方,另一边是提供服务的地方。有了这个概念之后,我们来看。

    1.1 正向代理 (Forward Proxy)

      先来讲 正向代理,什么是 正向代理呢,举几个例子可能会惊呼:原来是这个啊。如在单位里一般只能访问局域网,这个时候你如果想访问百度 就需要用到正向代理;再比如 国内一般不能直接访问 Google,如果想访问,则需要个 梯子 代理到国外的服务器进行访问,这个时候也用到了正向代理。

      把这个关系映射到 C - S 架构 来说,比如 我们要访问 Google,那么 我们 就是 需求方,即 Client,而 Server 服务方 即 国外搭建 Google web server 的机器,而 梯子 是帮 Client 去 连接上 Server 的 中间商,这样就是一个典型的 正向代理 结构。其结构图如下:

    1.2 反向代理 (Reverse Proxy)

      有了 正向代理 的概念,反向代理 最直接的理解就是 反向代理是正向代理的逆向,即 C - S 互换,这样很容易形成下面这个架构:

      反向代理 的处理逻辑是:Client 发送连接请求,代理服务器接收 Client 的连接请求,然后将请求转发到 局域网 内其他服务器,并将从服务器上请求到的结果返回给 Client 端。作为 Client 端,你完全不用去管 代理服务器帮你做了什么

      以上介绍了 正向代理反向代理,用一句小结的话来说就是:正向代理是代理 客户端,反向代理是代理 服务器,代理哪端就隐藏哪端

      下面来看 Nginx 反向代理实践。


    2. Nginx 反向代理实践

      关于 ubuntu 上安装 Nginx 的方法可以参考我的这篇:《极智开发 | ubuntu 安装 nginx》。

      Nginx 对于用户使用来说,我一直觉得是一个 挺简单的 东西,因为你只要 关注 / 修改 conf/nginx.conf 配置文件,就能满足大部分的应用需求。我们来看:

    ########################### 全局配置块 #########################
    # nginx 服务器全局运行配置
    # user  nobody;     # 配置运行 nginx 服务器的用户 (组)
    worker_processes  1;    # nginx 服务器并发处理服务的配置,值越大,可以支持的并发处理服务越多
    
    
    ########################### EVENTS配置块 #########################
    # 配置 nginx 服务器与用户的网络连接
    events {
        worker_connections  1024;     # 配置可以同时支持的最大连接数
    }
    
    ########################### HTTP配置块 #########################
    # 配置代理、缓存、日志等绝大多数功能和第三方模块
    http {
    	###################### HTTP全局块 #########################
    	# 配置包括 文件引入、MIME-TYPE定义、日志定义、连接超时等
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
        # gzip  on;
        
        ###################### HTTP SERVER块 #########################
        # 配置HTTP连接虚拟主机
        # 每个HTTP块可以有多个SERVER块,每个SERVER块就是一个虚拟主机
        server {
            listen       88;     # 自定义端口
            server_name  localhost;
    
            location / {
                root   ~/nginx/html/dist;       # 实际写成绝对路径
                index  index.html index.htm;
                try_files $uri $uri /index.html;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

      来看 Nginx 反向代理的实例:

    2.1 实例一

    实例一:使用 Nginx 反向代理,Client 访问 www.test.com 跳转到 127.0.0.1:8888,这个例子是把本机作为 Server,这个情况的 conf/nginx.conf 可以这么写:

    # ... 上面的省略了
    server {
    	listen       8888;
    	server_name  localhost;  
    
    	location / {
    		root   html;
    		index  index.html index.htm;
    		proxy_pass  http://www.test.com;   # 代理转发
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2 实例二

    实例二:在 实例一 的基础上,把 Sever 服务器增加到 三台,同样 Client 还是访问 www.wuji.com,然后 Nginx 帮我们跳转到 192.168.0.110:8081192.168.0.111:8081192.168.0.112:8081 上去,当然要实现整个功能,需要分别在这三台 服务器 上分别起 web server (这个不细说)。来看这个时候的 conf/nginx.conf 的配置:

    # 负载均衡  这里不多说
    upstream test{     
      server 192.168.0.110:8081 weight=1;
      server 192.168.0.111:8081 weight=1;
      server 192.168.0.112:8081 weight=1;
    }
    
    server {
        listen       80;
        server_name  localhost;
        
        location / {
    		root   html;
    		index  index.html index.htm;
    		proxy_pass  http://www.test.com;    # 代理转发
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

      好了,以上分享了 讲解 Nginx 特性之一:反向代理。希望我的分享能对你的学习有一点帮助。


     【公众号传送】

    《极智开发 | 讲解 Nginx 特性之一:反向代理》


    在这里插入图片描述

    扫描下方二维码即可关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

  • 相关阅读:
    函数(2)
    golang学习笔记(一):基础入门
    <el-date-picker> 设置默认yyyy-MM-dd以及限制规则
    git rebase的基本使用
    云原生Kubernetes:K8S存储卷
    实现分别在Linux、Docker、Kubernetes上安装部署Mysql、Redis、Nginx软件
    NPOI设定单元格格式(数值型插入)
    石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设
    混淆技术研究-混淆技术-源码分析(2)
    android 多产品项目搭建与变体的使用
  • 原文地址:https://blog.csdn.net/weixin_42405819/article/details/125901374