正向代理与反向代理
正向代理是指客户端通过代理服务器向目标服务器发送请求。客户端并不知道目标服务器的真实地址,而是将请求发送给代理服务器,由代理服务器转发请求到目标服务器。目标服务器在响应时,也会将数据返回给代理服务器,最后由代理服务器将数据传递给客户端。正向代理的主要作用包括:
- 隐藏客户端的真实IP地址:目标服务器只能看到代理服务器的IP地址,从而保护用户隐私。
- 缓存常用数据:代理服务器可以缓存请求的数据,提高访问速度。
反向代理则是指客户端向目标服务器发送请求时,首先经过代理服务器。与正向代理不同的是,反向代理隐藏的是目标服务器的真实地址,客户端并不知道它所请求的服务实际上是由哪台服务器提供的。反向代理的主要作用包括:
- 负载均衡:反向代理可以将请求分发到多台后端服务器,实现负载均衡,提高系统性能。
- 安全性:通过隐藏真实的服务器地址,反向代理可以增强后端服务器的安全性,防止直接攻击。
- SSL加密:反向代理可以处理SSL加密,减轻后端服务器的负担。
反向代理的基本配置
本节示例分别将中文和英文网站放在目录/var/www/zone-cn和/var/www/zone-en中,并通过配置虚拟主机使用端口81访问中文网站,使用端口82访问英文网站;配置反向代理,使用80端口通过路径/cn/将请求转发至81端口访问中文网站,通过路径/en/将请求转发至82端口访问英文网站。
1、配置虚拟主机,虚拟主机的配置细节请见上一节“虚拟主机的配置”。
2、在虚拟主机配置目录/etc/nginx/conf.d中的default.conf文件中增加一个虚拟主机的配置。
- location /cn/:匹配所有以/cn/开头的路径。
- proxy_pass:转发目标。可以是IP,也可以是域名。
3、重启服务使用修改生效。
4、在浏览器输入IP地址访问网站,示例中的网站IP为192.168.238.189,端口默认配置为80,首页默认配置为index.html,访问时可省略。
4.1、访问http://192.168.238.189:81/cn/,效果如下。
4.2、访问http://192.168.238.189:82/en/,效果如下。
反向代理的常用配置
1、请求路径
- location /:匹配所有请求,包括根路径。
- location 字符串:匹配以字符串开头的所有请求。例如:/cn/可以匹配/cn/、/cn/cities/、/cn/cities/bj/和/cn/cities/bj.html。
- location ~ 正则表达式:区分大小写匹配正则表达式。例如:~ \.(jpg|jpeg|png)$表示区分大小写匹配所有以.jpg、.jpeg和.png结尾的请求。
- location ~* 正则表达式:不区分大小写匹配正则表达式。例如:~* \.(jpg|jpeg|png)$表示不区分大小写匹配所有以.jpg、.jpeg和.png结尾的请求。
- location = 字符串:精准匹配,只匹配请求路径与字符串相同的请求。例如:= /cn/只匹配路径为/cn/的请求。
2、目标地址
- proxy_pass 目标地址:请求路径拼接在目标地址后面进行转发。例如对于请求路径/cn/,如果目标地址为http://127.0.0.1,则最终的转发目标地址为http://127.0.0.1/cn/。
- proxy_pass 目标地址+目标路径:请求路径会被替换为目标路径后进行转发。例如对于请求路径/cn/,如果目标地址为http://127.0.0.1/,则最终的转发目标地址为http://127.0.0.1/;如果目标地址为http://127.0.0.1/china/,则最终的转发目标地址为http://127.0.0.1/china/。