kaiyun.ccm OpenResty Nginx 反向代理

发布于:25-08-13 播放次数:

什么是反向代理

反向代理方法涉及借助代理设备来接收来自公共网络的访问需求,随后将请求指引至内部网络中的具体服务器,同时把从服务器收到的回应再递送给最初发起请求的公共网络用户,在这种情形下,代理设备便充当了反向代理的角色。

比如有个访客去请求 http://www.example.com/readme,然而在 www.example.com 这边找不到这个文件,它是暗中从另一台机器上拿过来,随后伪装成自己的资料再呈现给访客,但访客完全不知道这个操作。对于使用者而言,这感觉如同直接从 www.example.com 下载了说明文档。该 www.example.com 域名指向的服务端配置了镜像转发机制。

反向代理服务器,对用户来说开yun体育app官网网页登录入口,它表现得如同源头服务器,用户无需做任何额外配置。用户向反向代理的地址空间发送常规请求,然后反向代理会确定应该将请求转给哪个源头服务器,并将获取的数据传回用户,仿佛这些数据就是它直接生成的。具体情况请参考下图。

proxy

反向代理典型应用场景

反向代理的一个主要作用是让位于防火墙内侧的机器能够被外部网络的人所访问,以此提升安全性能。它也能将请求分配给多台后端服务器,以此实现负载均衡。此外,它还能为响应速度较慢的后端设备提供暂存功能。另外,反向代理能够运用更精密的网址规则和控制手段,让分属不同网络服务器平台的网页内容,整合到同一个网址域名范围内。

Nginx 有一个功能是充当 HTTP 反向代理,接下来说明 Nginx 当作反向代理服务器的操作方式。

打开本地服务器的 README.md 文件,网址是 http://localhost/README.md,这个页面内容是通过本地服务器设置的逆向代理功能来实现的,实际数据是从 https://github.com/moonbingbing/openresty-best-practices/blob/master/README.md 这个地址获取的。

nginx.conf 配置示例:

worker_processes 1;
pid logs/nginx.pid;
记录错误日志到文件 logs/error.log,并设置警告级别
events {
    worker_connections 3000;
}
http {
    include mime.types;
    server_tokens off;
    ## 下面配置反向代理的参数
    server {
        listen    8866;
用户输入网址 http://ip:port,系统会将其重定向至 https://github.com,完成代理操作。
        location / {
通过代理服务器跳转至 https://github.com。
            proxy_redirect     off;
设置代理头信息,将目标地址字段替换为请求中的主机名,分号结束
设置代理头信息,将真实来源地址字段命名为真实来源,其值赋值为远程客户端地址,以分号结束
设置代理头信息,将X-Forwarded-For字段值赋值为$proxy_add_x_forwarded_for变量内容,以此传递客户端真实IP地址,增强安全性。
        }
用户若访问网址 http://ip:port/README.md,系统便会将其请求转向至
这个网址指向一个代码仓库,里面有一个名为README的文本文件,内容是该项目的基本说明。
        location /README.md {
设置代理头信息,将X-Real-IP字段值赋为远程客户端地址。
设置请求头 X-Forwarded-For 的值为变量 proxy_add_x_forwarded_for 的内容;
通过代理将请求转发至 https://github.com/moonbingbing/openresty-best-practices/blob/master/README.md, 实现资源的远程获取, 并确保内容能够正确呈现, 提供详细的最佳实践指导。
        }
    }
}

Nginx 运行正常之后,我们用浏览器来检测反向代理的功能。在浏览器的网址输入框里键入 localhost/README.md,呈现出来的内容是我们 GitHub 上的源代码的 README 文件。请参考下面的图片。

proxy_example

我们只需调整 ​nginx.conf​ 文档,无需创建任何网页,便能够暗中从其他机器上获取一个页面,再呈现给使用者。

接下来,让我们逐个分析​ nginx.conf ​文件中包含的各个设定内容。

(1) location

定位信息用于对照请求的网址,其后面设定了相应的符合条件。当请求的 URI 为 localhost/​时,会对应到 location / 这一项;而当请求的 URI 为 localhost/README.md​时,则会对应到 location /README.md 这项。

那个示范仅处理了特定的网址,部分读者可能会感到困惑:倘若每个页面都设置这种规则,工作量会非常庞大,有没有办法进行整体设定呢?这时必须结合 location 的正则表达式匹配特性。详细的做法可以查阅 Nginx 的相关说明。

(2) proxy_pass

proxy_pass 后面指定一个 URL,这个 URL 用来把请求转交给指定的服务器,实现反向代理功能。比如我们之前提到的 ​proxy_pass https://github.com​,就会把符合规则的请求,全部交给 ​https://github.com​ 这个地址处理。

(3) proxy_set_header

通常情况下kaiyun.ccm云开·全站体育app登录,反向服务器不会传递来时的地址信息,要是想让它传递,就必须加入这个设置:proxy_set_header Host $host;

其他常规设定之外,还包括 ​proxy_redirect​、​proxy_set_body​、​proxy_limit_rate ​这些设定项,具体运用方法可前往Nginx 官方站点查阅。

正向代理

既然有反向代理,自然也有正向代理。打个比方,正向代理充当了中转角色,比如某人无法访问某个网址(比如 ​www.google.com​),却可以连接到一个代理服务器,这个代理服务器能够访问 ​www.google.com​,所以用户先与代理服务器建立连接,向它说明要浏览的网页,代理服务器再去获取内容,最后再传送给用户。某些通行的网络隧道软件、游戏中介服务,其运行机制基于正向代理的概念,我们须在这些正向代理软件中设定服务器的IP地址等数据。