Nginx反向代理

310 阅读3分钟

Nginx 反向代理是一种使用 Nginx 服务器来转发客户端请求到一个或多个后端服务器的配置。这种方式不仅可以提高性能,还能提供负载均衡、安全性和灵活性。以下是详细的 Nginx 反向代理配置步骤。

1. 安装 Nginx

如果你的系统尚未安装 Nginx,可以使用以下命令进行安装(以 Ubuntu 为例):

sudo apt update
sudo apt install nginx

2. 基本反向代理配置

假设你的后端应用程序运行在 IP 地址 192.168.1.108080 端口上,以下是设置 Nginx 作为反向代理的基本步骤。

编辑 Nginx 配置文件

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf,或者你可以在 /etc/nginx/sites-available/ 目录中创建一个新的配置文件。例如,你可以创建一个新的文件 myapp

sudo nano /etc/nginx/sites-available/myapp

配置示例

在配置文件中,添加以下内容:

server {
    listen 80;  # 监听 80 端口
    server_name yourdomain.com;  # 替换为你的域名或服务器 IP

    location / {
        proxy_pass http://192.168.1.10:8080;  # 将请求转发到后端服务
        proxy_set_header Host $host;  # 保留原始主机头
        proxy_set_header X-Real-IP $remote_addr;  # 传递真实客户端 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递代理链中的所有 IP
        proxy_set_header X-Forwarded-Proto $scheme;  # 传递请求协议
    }
}

3. 启用配置

将新配置文件链接到 sites-enabled 目录以启用它:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

4. 测试和重启 Nginx

在修改配置文件后,使用以下命令测试 Nginx 配置的正确性:

sudo nginx -t

如果没有错误,重启 Nginx 使配置生效:

sudo systemctl restart nginx

5. 允许外部访问 Nginx

确保防火墙允许外部访问 Nginx 服务器的 80 端口。使用 UFW 进行管理时,可以运行:

sudo ufw allow 'Nginx Full'

6. 验证反向代理

通过浏览器或使用 curl 命令测试反向代理是否配置成功。例如:

curl http://yourdomain.com/

如果配置正确,你应该能访问到后端服务的响应。

7. 配置 HTTPS 支持

为了确保数据传输的安全性,建议为 Nginx 配置 HTTPS。可以使用 Let's Encrypt 免费证书。

安装 Certbot

安装 Certbot 并获取 SSL 证书:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com  # 将 yourdomain.com 替换为你的域名

更新 HTTPS 配置

一旦获取证书,可以更新 Nginx 配置以支持 HTTPS。例如:

server {
    listen 80;
    server_name yourdomain.com;

    # 强制重定向到 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;  # 监听 HTTPS
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;  # SSL 证书路径
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;  # SSL 密钥路径

    location / {
        proxy_pass http://192.168.1.10:8080;  # 转发请求
        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;
    }
}

8. 总结

通过上述步骤,你可以使用 Nginx 实现反向代理配置。这种配置不仅提高了应用程序的性能和安全性,还能让外部用户安全地访问后端服务。根据需要,Nginx 还支持更多功能,如负载均衡、缓存等,可以进一步优化配置以满足特定需求。