欢迎关注我的公众号 [极智视界],获取我的更多笔记分享
大家好,我是极智视界,本文讲解一下 Nginx 特性之一:反向代理。
Nginx,也即 engine x,是一个高性能的 http 和 反向代理的 web 服务器,同时也提供了 IMAP / POP3 / SMTP 服务。Nginx 有三大特性:反向代理、负载均衡 和 动静分离。这里我们分三篇来分别进行讲解,首先是 反向代理。
代理 是一个 中间商 的概念,代理 分 正向代理 和 反向代理,这两个概念听起来好像很高端,但在我们的生活、工作中是十分常见的。要说代理,首先你得了解 C - S 架构,即:Client (客户端) - Server (服务器),一边是需要服务的一方,另一边是提供服务的地方。有了这个概念之后,我们来看。
先来讲 正向代理,什么是 正向代理呢,举几个例子可能会惊呼:原来是这个啊。如在单位里一般只能访问局域网,这个时候你如果想访问百度 就需要用到正向代理;再比如 国内一般不能直接访问 Google,如果想访问,则需要个 梯子 代理到国外的服务器进行访问,这个时候也用到了正向代理。
把这个关系映射到 C - S 架构 来说,比如 我们要访问 Google,那么 我们 就是 需求方,即 Client,而 Server 服务方 即 国外搭建 Google web server 的机器,而 梯子 是帮 Client 去 连接上 Server 的 中间商,这样就是一个典型的 正向代理 结构。其结构图如下:
有了 正向代理 的概念,反向代理 最直接的理解就是 反向代理是正向代理的逆向,即 C - S 互换,这样很容易形成下面这个架构:
反向代理 的处理逻辑是:Client 发送连接请求,代理服务器接收 Client 的连接请求,然后将请求转发到 局域网 内其他服务器,并将从服务器上请求到的结果返回给 Client 端。作为 Client 端,你完全不用去管 代理服务器帮你做了什么。
以上介绍了 正向代理 和 反向代理,用一句小结的话来说就是:正向代理是代理 客户端,反向代理是代理 服务器,代理哪端就隐藏哪端 。
下面来看 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 反向代理的实例:
实例一:使用 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; # 代理转发
}
}
实例二:在 实例一 的基础上,把 Sever 服务器增加到 三台,同样 Client 还是访问 www.wuji.com
,然后 Nginx 帮我们跳转到 192.168.0.110:8081
、192.168.0.111:8081
、192.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 !