Nginx 是一款功能强大的 Web 服务器,同时也能有效地充当反向代理。将其配置为反向代理后,它将部署在应用服务器之前,负责处理传入的客户端请求,并将其转发至相应的后端服务器。这种配置可以提升性能、安全性及可扩展性。
将 Nginx 用作反向代理的优势
- 负载均衡:将传入的流量分配到多个后端服务器上。
- 增强安全性:隐藏内部网络结构和后端服务器,防止客户端直接访问。
- SSL/TLS 终止:处理 HTTPS 加密与解密,从而减轻后端应用程序的负担。
- 缓存:缓存静态和动态内容,以减轻服务器负载并提高响应速度。
- 压缩:压缩响应内容以加快传输速度。
- 静态内容服务:高效直接提供静态文件,不增加应用服务器的负担。
1. 安装 Nginx
如果您的服务器上尚未安装 Nginx,可以使用发行版的包管理器进行安装。
- 针对 Ubuntu/Debian:
bash sudo apt update sudo apt install nginx - 对于 CentOS/RHEL/Fedora:
bash sudo dnf install nginx # or yum for older versions
安装完成后,启动 Nginx 服务并设置为开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
您可以通过在浏览器中访问 http://localhost 来验证 Nginx 是否正在运行。
2. 查找 Nginx 配置文件
Nginx 配置文件通常位于 /etc/nginx/目录下。主配置文件通常为 nginx.conf。您通常会发现一个 sites-available 目录,其中包含各个网站的配置文件,这些文件随后会通过符号链接指向 sites-enabled 以启用它们。
3. 配置服务器块
您需要在 Nginx 配置中创建或修改一个服务器块。该块定义了 Nginx 如何处理针对特定域名或 IP 地址的请求。
反向代理的基本服务器块如下所示:
server {
listen 80; # Nginx listens on port 80 for incoming HTTP requests
server_name your_domain.com www.your_domain.com; # Replace with your domain name
location / {
proxy_pass http://backend_server_ip:port; # Forward requests to your backend server
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
指令说明:
listen 80;: Nginx 将监听端口 80 上的传入 HTTP 请求。server_name: 指定此服务器块应响应的域名。location /: 此块定义了如何处理匹配根路径 (/)的请求将如何处理。您可以为不同的路径创建更具体的location服务器块(例如:location /api/).proxy_pass: 这是反向代理的核心指令。它指示 Nginx 将请求转发至指定的后端服务器 IP 地址和端口。proxy_set_header: 这些指令对于将原始客户端信息(如 IP 地址和主机名)传递给后端服务器至关重要,这对日志记录和应用程序逻辑非常有用。
4. 启用配置
如果您已在 sites-available/中创建了新的配置文件,则需通过创建指向 sites-enabled/:
sudo ln -s /etc/nginx/sites-available/my_reverse_proxy /etc/nginx/sites-enabled/
5. 测试 Nginx 配置
在重启 Nginx 之前,请务必检查配置文件是否存在语法错误:
sudo nginx -t
如果测试通过,您将看到一条消息,表明语法正确且测试成功。
6. 重新加载 Nginx
要应用新配置,请重载 Nginx:
sudo systemctl reload nginx
7. 测试反向代理
打开网页浏览器,访问 http://your_domain.com (若未设置域名,请输入服务器的 IP 地址)。此时 Nginx 应已将请求转发至后端服务器,您应能看到后端应用程序提供的内容。
此基础配置为将 Nginx 用作反向代理奠定了基础。您可以通过 SSL/TLS 终止、负载均衡、缓存以及更高级的路由规则等功能进一步进行自定义。