你好呀,我是赵兴晨,文科程序员。
今天,我们将一起了解什么是Nginx的正向代理?什么是Nginx的反向代理?并实际动手实践。
以下内容都是满满的干货,绝对不容错过。我建议先收藏这篇文章,然后找一个安静的角落,慢慢品味和实践。
正向代理:连接互联网的桥梁
在局域网环境中,当需要访问外部互联网资源时,正向代理扮演着至关重要的角色。它像一座桥梁,连接着局域网内的客户端和广阔的互联网世界。
正向代理
正向代理(Forward Proxy)是一种代理服务器,它位于客户端和目标服务器之间。客户端通过代理服务器访问互联网,而不是直接连接到目标服务器。
让我们通过一个实际的例子来理解正向代理的作用
假设你在一个公司的局域网中工作,而公司内只有一台电脑可以访问外部网站。如果每个人都需要上网查找资料,显然不可能让所有人都排队使用这台电脑。这时,将这台电脑设置为代理服务器就是一个明智的选择。其他电脑通过这台代理服务器访问互联网,从而解决了访问限制的问题。
配置与优势
要实现正向代理,需要在代理服务器上进行相应的配置,包括设置监听端口、定义可访问的客户端等。配置完成后,所有局域网内的客户端都可以通过代理服务器安全、高效地访问互联网资源。
使用正向代理的好处包括
• 访问控制:管理员可以控制哪些用户或设备可以访问互联网,以及可以访问哪些网站。
• 缓存和加速:代理服务器可以缓存频繁访问的网页,减少重复的网络请求,提高访问速度。
• 隐私保护:客户端的真实IP地址被隐藏,增加了一定的匿名性。
反向代理:互联网的隐形守护者
在网络架构中,反向代理(Reverse Proxy)扮演着一个关键角色,它为客户端提供了一种无需直接与目标服务器交互的方式来访问资源。客户端对代理的存在毫无感知,这大大简化了访问过程。
反向代理
客户端通过反向代理服务器发送请求,而无需知晓目标服务器的具体位置或配置。反向代理服务器接收请求后,会选择一个合适的目标服务器来获取数据,然后将这些数据返回给客户端。在这个过程中,反向代理服务器对外表现为一个单一的服务器,隐藏了后端服务器的IP地址。
让我们通过一个实际的例子来理解反向代理的作用
想象一下,客户端想要访问一台运行在8001端口的Tomcat服务器。然而,客户端并不需要知道这个真实的端口号。Tomcat服务器为客户端提供了一个9001端口,客户端只需直接访问这个端口即可。至于9001端口如何转发请求到Tomcat服务器的8001端口,这是反向代理服务器的内部工作,客户端无需关心,也无需进行任何额外的配置。
反向代理的优势
使用反向代理的好处是显而易见的
• 简化客户端配置:客户端无需进行复杂的配置,即可直接访问服务。
• 提高安全性:隐藏了后端服务器的真实IP地址,增加了网络的安全性。
• 负载均衡:反向代理可以智能地将请求分发到多个后端服务器,实现负载均衡,提高系统的可用性和可靠性。
• 缓存静态内容:反向代理还可以缓存静态内容,减少对后端服务器的请求,提高访问速度。
正向代理和反向代理区别
正向代理服务器,架设在客户机与目标主机之间,只用于代理内部网络对互联网的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
正向代理是客户端知道目标服务器在哪里,然后通过代理服务器去访问不能直接访问的目标服务器,而目标服务器并不知道客户端通过什么来访问的,即正向代理代理的是客户端。
反向代理服务器,架设在服务端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
反向代理中,外部网络对于内部网络具体的情况是不可见的,而代理服务器来代理内部网络来返回所要的数据,而服务端知道请求的来源以及数据。反向代理代理的是服务端。
正向代理和反向代理用途
正向代理
• 为在防火墙内的局域网客户端提供访问互联网的途径
• 可以做缓存,加速访问资源
• 对客户端访问授权,上网进行认证
• 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
• 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
• 负载均衡,通过反向代理服务器来优化网站的负载,反向代理服务器根据每个服务器的性能来分配请求,保证服务器负载能在有效范围内
Nginx 实现正向代理:配置与实践
在日常工作和网络配置中,我们通常更多地接触到 Nginx 的反向代理功能。然而,Nginx 同样可以作为正向代理使用,以便在客户端和目标服务器之间进行请求的转发。接下来,我将为你详细介绍 Nginx 正向代理的配置步骤。
正向代理的基本概念
正向代理作为客户端与互联网之间的中介,允许客户端通过代理服务器访问外部资源。客户端需要配置代理服务器的相关设置,以便通过代理进行网络访问。
Nginx 正向代理配置
为了实现 Nginx 的正向代理功能,除了配置转发 HTTP 80 端口的请求外,还需要配置 HTTPS 443 端口的转发。然而,Nginx 官方版本并不直接支持 HTTPS 请求的转发。
ngx_http_proxy_connect_module 模块
幸运的是,阿里云的一位技术专家开发了一个名为 ngx_http_proxy_connect_module 的 Nginx 模块,专门用于处理 HTTPS 请求的转发,并且已经开源。你可以在 https://github.com/chobits/ngx_http_proxy_connect_module 上找到这个模块。
1、安装Nginx1.20.1
以下步骤仅用于实验正向代理
实验环境 centos7.9 root用户操作
# 安装依赖
yum install -y wget unzip patch gcc pcre-devel zlib zlib-devel openssl openssl-devel curl
# 下载 nginx1.20.1 源码包
wget https://nginx.org/download/nginx-1.20.1.tar.gz
# 下载 ngx_http_proxy_connect_module 模块
wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip
# 解压 nginx-1.20.1.tar.gz 和 v0.0.2.zip
tar -zxvf nginx-1.20.1.tar.gz
unzip v0.0.2.zip
mv ngx_http_proxy_connect_module-0.0.2/ ngx_http_proxy_connect_module
# 安装
cd nginx-1.20.1
# 打补丁
patch -p1 < /root/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1018.patch
# 添加模块并安装
./configure --add-module=/root/ngx_http_proxy_connect_module
make && make install
# 设置开机自启
vi /etc/systemd/system/nginx.service
# 编辑内容如下
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 设置开机自启并启动
systemctl enable nginx --now
至此Nginx安装完毕,下面开始配置Nginx的正向代理。
2、修改Nginx配置文件并加载
#正向代理转发http请求
server {
#指定DNS服务器IP地址
resolver 114.114.114.114;
#监听80端口,http默认端口80
listen 80;
#服务器IP或域名
server_name localhost;
#正向代理转发http请求
location / {
proxy_pass http://$host$request_uri;
proxy_set_header HOST $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
}
#正向代理转发https请求
server {
#指定DNS服务器IP地址
resolver 114.114.114.114;
#监听443端口,https默认端口443
listen 443;
#正向代理转发https请求
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
修改完配置文件之后,对Nginx配置文件进行语法检测并加载配置文件即可
# 对配置文件进行语法检测
/usr/local/nginx/sbin/nginx -t
# 加载配置文件
systemctl reload nginx
DNS地址:
• (国外)谷歌:8.8.8.8 developers.google.com
• (国外)OpenDNS:208.67.222.222 signup.opendns.com
• (国内)114:114.114.114.114 www.114dns.com
• (国内)腾讯:119.29.29.29 www.dnspod.cn
• (国内)阿里:223.5.5.5 alidns.com
• (国内)百度:180.76.76.76 dudns.baidu.com
3、验证正向代理
Linux下验证代理服务器是否能正常转发http和https请求
curl http://www.baidu.com/ -v -x 127.0.0.1:80
curl https://www.baidu.com/ -v -x 127.0.0.1:443
windows10 谷歌浏览器 验证
windows按照上图配置完 就可以直接访问 www.baidu.com查资料了,如果无法访问,请检查nginx服务器,防火墙和selinux是否关闭。
好了以上就是今日的分享,回顾一下,今天收获了啥?
• Nginx的正向代理,反向代理
• 正向代理优势,反向代理的优势
• 正向代理和反向代理的区别
• 正向代理和反向代理的用途
• 如何安装Nginx 以及 Nginx正向代理的实践
实践是检验真理的唯一标准。阅读这篇文章可能只是让你在理论上掌握了知识,但真正的理解来自于亲自动手实践。因此,别忘了收藏这篇文章,并且关注我,以便你在未来需要时能够轻松找到这些宝贵的资源。
另外,如果你觉得今天的内容对你有帮助,不妨点击在看,分享给更多的朋友。一个小小的动作,可能会给他们带来巨大的帮助。
最后,我想说的是:点赞和分享不仅仅是一种美德,更是对未来美好生活的投资。愿每一个点在看的朋友,未来都能收获满满的幸福和成功!
你好,我是赵兴晨,一名文科程序员。我期待在文章下方看到你的留言,让我们一起交流,共同进步。