Nginx 反向代理解析

1. 代理

在 Java 设计模式中, 代理模式是这样定义的: 给某个对象提供一个代理对象, 并由代理对象控制原对象的引用.

Nginx 主要能够代理如下几种协议, 其中用到的最多的就是做 Http 代理服务器.

1.1 正向代理

若国内电脑的对外公网 IP 地址能变成美国的 IP 地址, 就可以访问 Google. 而 VPN 就由此而生. 国内电脑在访问 Google 时, 先连上 VPN 服务器将国内电脑的 IP 地址变成美国的 IP 地址, 然后就可以顺利访问.

  1. VPN 运用就是做正向代理. 正向代理服务器位于客户端和服务器之间, 为了向服务器获取数据, 客户端要向代理服务器发送一个请求, 并指定目标服务器, 代理服务器将目标服务器返回的数据转交给客户端. 这里客户端是要进行一些正向代理的设置的.
  2. VPN 通俗的讲就是一种中转服务, 当国内电脑接入 VPN 后, 我们对外国 IP 地址就会变成 VPN 服务器的公网 IP, 请求或接受任何数据都会通过这个 VPN 服务器然后传入到国内本机.
正向代理的典型用途是为在防火墙内的局域网客户端提供访问 Internet 的途径. 正向代理还可以使用缓冲特性 (由 mod_cache 提供) 减少网络使用率.

1.2 反向代理

反向代理, 客户端对代理是无感知的, 客户端不需要任何配置就可以访问, 只需要将请求发送到反向代理服务器, 由反向代理服务器去选择目标服务器获取数据后, 在返回给客户端, 此时反向代理服务器和目标服务器对外就是一个服务器, 暴露的是代理服务器地址, 隐藏了真实服务器 IP 地址.

反向代理服务器通常可用来作为 Web 加速, 即使用反向代理作为 Web 服务器的前置机来降低网络和服务器的负载, 提高访问效率.

优点:
	1. 提高了内部服务器的安全.
	2. 加快了对内部服务器的访问速度.
	3. 节约了有限的IP资源.

2. Nginx 反向代理

此模块默认是启动状态.
禁止该模块: 需要在安装 Nginx 时加上配置参数 --without-http_proxy_module.

	指令:
		1. proxy_pass: 代理后端的服务器.
		2. proxy_buffering: 是否打开缓存区.
		3. proxy_buffer_size: 设置缓存区大小.
		4. 其他指令.

2.1 proxy_pass

	module: ngx_http_proxy_module;
	Syntax: proxy_pass URL;
	Default: -
	Context: location, if in location, limit except;

URL: 为被代理服务器的地址, 可以包含传输协议, 主机名称或 IP 地址加端口号, URI 等.
基本用于隐藏端口号.

2.2 proxy_buffering

	module: ngx_http_proxy_module;
	Syntax: proxy_buffering on | off;
	Default: proxy_buffering on;
	Context: http, server, location;

proxy_buffering on; 状态下, Nginx 会把返回的内容数据缓存. 边缓存边传到客户端, 而不是全部接受到再传到客户端中.

2.3 proxy_buffer_size

	module: ngx_http_proxy_module;
	Syntax: proxy_buffer_size size;
	Default: proxy_buffer_size 4k | 8k;
	Context: http, server, location;

2.4 其他指令

proxy_redirect default;    # 默认重定向.

proxy_connect_timeout 30;  # 设置长连接时间.
proxy_send_timeout 60;     # 设置派送连接时间.
proxy_read_timeout 60;     # 默认读取连接时间.

proxy_set_header Host $host:$server_port;   # 避免 HTTP 请求中丢失 Host 头部的情况下 Host 不被重写的失误.
proxy_set_header X-Real-IP $remote_addr;    # 获取客户端真实 IP.
proxy_set_header REMOTE-HOST $remote_addr;  # 获取客户端浏览器的主机名.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 获取代理者的真实 IP.

proxy_buffers 4 128k;           # 设置缓冲区的大小和数量. 默认 proxy_buffers 8 4k/8k;
proxy_busy_buffers_size 256k;   # 设置忙碌时, 缓冲区的值. 默认为 proxy_buffer_size 的 2 倍;
proxy_max_temp_file_size 256k;  # 设置临时文件缓冲的最大值.

2.5 例子

......

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

......

location /proxy {
	......
	proxy_pass http://xx.xx.xx.xx:8080/proxy;
	......
	proxy_redirect default;
	......
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值