前言
在大学的数通课上,我曾接触过反向代理的概念,但由于当时并没有认真听讲,所以对这个概念一直比较模糊。最近,由于友站遇到一些备案问题,域名解析到了我的服务器上,我才重新开始研究反向代理的原理和应用。
什么是反向代理?
正向代理 vs 反向代理
正向代理:通常是用户主动设置的代理,用户通过代理服务器访问目标网站。代理服务器在此过程中充当了中介的角色,但目标服务器并不知道用户的真实身份。
反向代理:与正向代理相反,反向代理是由服务器端发起的。在用户访问服务器时,代理服务器决定将请求转发到哪台内部服务器。反向代理通常用于负载均衡、网站加速以及隐匿真实服务器等场景。
反向代理的工作原理
反向代理是服务器端的技术,它隐藏了后端服务器的真实信息。例如,在负载均衡场景中,反向代理可以根据不同的策略将用户的请求转发到不同的服务器。这样做可以提高网站的性能和安全性。
为什么使用反向代理?
在我的案例中,我使用境外服务器作为反向代理服务器,原因是:
- 境外服务器不需要备案,可以避免因备案问题导致的访问限制。
- 通过反向代理,将外部请求转发到国内服务器,实现在没有备案的情况下使用域名访问国内服务器上的网站。
然而,这种做法也有一个明显的劣势:由于经过境外服务器的中转,首次连接时可能会出现较慢的响应速度。
具体实现:如何配置Nginx反向代理
为了实现通过B.biz访问国内服务器的服务,我们需要准备好以下条件:
- 两个域名:
A.top
和B.biz
,二者都要解析到境外服务器上 - 两台服务器:境外服务器(IP:
55.44.33.22
)和境内服务器(IP:10.10.10.5
,端口:7788
)
假设我们要实现的是,通过B.biz
访问境内服务器上的网站(在端口7788
上运行)。
步骤 1:安装Nginx
首先,确保在境外服务器上正确安装了Nginx。大多数服务器面板(例如1Panel
)提供了简便的一键安装功能,可以通过面板进行安装。
步骤 2:配置Nginx反向代理
- 登录到境外服务器的管理后台,进入网站管理页面。
- 点击“创建网站”,然后选择“反向代理”选项。
- 配置反向代理,填写以下内容:
- 编辑反向代理配置文件
在新建出来的网站右侧选项中选择配置
->反向代理
->源文
并修改成以下格式
location ^~ / {
proxy_pass http://10.10.10.5:7788;
proxy_set_header Host A.top; # 设置访问境内服务器时的Host头部,避免备案拦截
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
}
解释配置项:
proxy_pass http://10.10.10.5:7788;
:这行指令将请求转发到国内服务器10.10.10.5
上的7788
端口。proxy_set_header Host A.top;
:设置反向代理时的Host头部为A.top
,确保请求被正确转发到目标服务器。如果不设置,可能会导致目标服务器无法识别请求来源。proxy_set_header
系列指令:这些是常见的头部设置,确保客户端的真实IP等信息能够传递给目标服务器。
至此,你的网站就可以通过B.biz
访问了。