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

Posted 极智视界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极智开发 | 讲解 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;
        
    

  来看 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;   # 代理转发
	

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;    # 代理转发
    


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


 【公众号传送】

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


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

以上是关于极智开发 | 讲解 Nginx 特性之一:反向代理的主要内容,如果未能解决你的问题,请参考以下文章

极智开发 | 讲解 Nginx 特性之三:动静分离

极智开发 | ubuntu 安装 nginx

极智开发 | 讲解 React 组件三大属性之一:state

Nginx专题:Nginx之反向代理及配置

nginx反向代理原理和配置讲解

nginx反向代理三种模式