反向代理(Reverse Proxy)技术用于解决客户端无法直接访问目标网站、或者目标网站需要向用户保持隐藏的情形。这种技术通过配置一台中间服务器作为反向代理服务器,以实现在客户端和目标网站间转发流量。内容分发网络(CDN)亦采用反向代理技术实现回源访问。
本文介绍在 Ubuntu 20.04 LTS 服务器上针对 Nginx HTTP 服务器进行反向代理配置的方法,并使用 Let’s Encrypt 的相关服务为前置服务器申请 HTTPS 证书,以增强其安全性。
使用 Apache HTTP 网络服务器?请阅读这篇文章。
先决条件
为完成本教程并成功设置反向代理服务器,你需要:
- 一台拥有 root 权限的 Ubuntu 20.04 LTS 服务器
- (可选项)一个域名,用于实现用户与中间服务器之间的 HTTPS 安全通信
我们使用 cURL 工具确定前置服务器是否能够访问目标网站,下述所有代码需要在服务器上执行:
curl https://example.com -vvv
请将 https://example.com
部分换成要验证能否代理访问的网站。如果上述指令能够正常加载对端网站,且没有错误提示,说明我们正在配置的服务器可以直接访问到目标网站。
然后,将 apt 包管理器的软件包目录更新为最新:
sudo apt update
安装并配置 Nginx 服务器
我们使用 apt 包管理器安装 Nginx HTTP 服务器:
sudo apt install nginx nano -y
提示:如果你准备以后通过域名的方式访问要配置的网站,我们强烈建议同时配置 HTTPS 安全链接以增强安全性。请先阅读《使用 Certbot 管理来自 Let’s Encrypt 的证书》一文,然后继续接下来的配置。
Nginx 的默认配置文件位于目录 /etc/nginx/sites-enabled/
中。我们使用熟悉的编辑器(比如 nano 或者 vim)编辑默认生成的文件。
Nginx 使用类似 JSON 的格式表示其配置文件。其中,对于网站的配置位于单独的 server{}
块中。一个典型示例如下:
server {
listen 80 default_server;
root /var/www/html;
server_name dgideas.net;
location / {
}
}
如果先前已经通过 Certbot 等工具使 Nginx 网络服务器开启了 HTTPS(SSL/TLS)支持,则可能存在多个
server {}
块。
我们注意到其中的 location / {}
块,该块指示 Nginx 网络服务器如何处理来自指定 URI 前缀的请求。如果需要将全部网络请求都进行反向代理,则将其中 location / {}
块更改为以下样式:
location / {
proxy_pass https://example.com/;
}
其中,https://example.com/
是我们要反向代理网站的 URI,不要忘记末尾的分号。我们在系统中执行下述指令以应用更改:
sudo systemctl reload nginx