如何在甲骨文云 VPS 上部署 Nginx 反向代理配置?

文章导读
在甲骨文云上配置 Nginx 反向代理,最关键的不是 Nginx 本身,而是云控制台的安全列表(Security List)放行规则,否则配置再好也无法从外网访问。
📋 目录
  1. A 核心逻辑与流量路径
  2. B 分步处理
  3. C 怎么验证是否生效
  4. D 常见坑与排查
  5. E 参考来源
A A

在甲骨文云上配置 Nginx 反向代理,最关键的不是 Nginx 本身,而是云控制台的安全列表(Security List)放行规则,否则配置再好也无法从外网访问。

先说结论:这是一套标准的 Web 服务暴露方案,适合将内部端口服务通过 80/443 对外提供,但必须同步检查云平台防火墙。

  • 适合:需要隐藏后端真实端口、统一 HTTPS 证书管理或负载均衡的场景。
  • 先准备:确认实例公网 IP 可用,并在甲骨文云控制台放行 TCP 80 和 443 端口。
  • 验收:使用 curl 或浏览器访问域名,确认状态码为 200 且后端服务响应正常。

核心逻辑与流量路径

反向代理的核心作用是作为中间层接收客户端请求,再转发给后端服务。在云环境中,流量路径是:用户 -> 云防火墙 -> 系统防火墙 -> Nginx -> 后端应用。甲骨文云的安全列表位于最外层,如果这里没有放行,数据包在到达 VPS 之前就会被丢弃。

分步处理

1. 安装 Nginx

使用系统包管理器安装稳定版本。本文以 Ubuntu/Debian 为例,CentOS/RHEL 用户请将 apt 替换为 yumdnf

sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

2. 配置甲骨文云安全列表

登录甲骨文云控制台,进入实例详情,点击子网链接,找到安全列表(Security List)。添加入站规则(Ingress Rules):

如何在甲骨文云 VPS 上部署 Nginx 反向代理配置?
  • 源 CIDR:0.0.0.0/0(生产环境建议限制特定 IP 段)
  • 目标端口:80, 443
  • 协议:TCP

3. 配置系统防火墙(UFW)

Ubuntu 默认可能开启 UFW,需确保放行 Nginx 所需端口:

sudo ufw allow 'Nginx Full'
sudo ufw reload

若使用 CentOS 且开启 firewalld:

sudo firewall-cmd `--permanent` `--add-service`=http
sudo firewall-cmd `--permanent` `--add-service`=https
sudo firewall-cmd `--reload`

4. 编写反向代理配置

/etc/nginx/sites-available/default 或新建配置文件中添加。以下配置包含 HTTP 自动跳转 HTTPS 及反向代理逻辑:

server {
    listen 80;
    server_name your_domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

your_domain.com 替换为实际域名,http://127.0.0.1:8080 替换为实际后端服务地址。

如何在甲骨文云 VPS 上部署 Nginx 反向代理配置?

5. 申请并配置 HTTPS 证书

使用 Certbot 自动申请并配置证书(需确保域名已解析到 VPS IP):

sudo apt install certbot python3-certbot-nginx -y
sudo certbot `--nginx` -d your_domain.com

按提示输入邮箱并完成验证,Certbot 会自动修改 Nginx 配置启用 HTTPS。

6. 测试并重载

sudo nginx -t
sudo systemctl reload nginx

怎么验证是否生效

使用 curl 命令检查响应头、HTTPS 跳转和本地 IP 泄露情况:

curl -I http://your_domain.com
curl -I https://your_domain.com

观察 HTTP 请求是否返回 301 跳转至 HTTPS,HTTPS 请求状态码是否为 200。如果后端服务有日志,检查日志中记录的客户端 IP 是否为真实用户 IP(取决于 X-Real-IP 配置)。

常见坑与排查

  • 云防火墙遗忘:最常见的问题是 Nginx 配置正确,但甲骨文云控制台安全列表未放行端口。
  • 系统防火墙冲突:Ubuntu 需确保 ufw 放行,CentOS 需检查 firewalldiptables
  • SELinux 限制:CentOS/RHEL 系统若开启 SELinux,可能阻止 Nginx 连接后端端口。建议优先配置策略(如 setsebool -P http_can_network_connect 1),而非直接关闭 SELinux。
  • 后端监听地址:后端服务若只监听 127.0.0.1,Nginx 可以代理;若监听公网 IP,需注意暴露风险。
  • 证书路径错误:手动配置 HTTPS 时,确保证书路径存在且 Nginx 进程有读取权限。

参考来源

  • Nginx 官方文档 - 入门指南 (https://nginx.org/en/)
  • Oracle Cloud Infrastructure 文档 - 安全列表规则 (https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm)
  • Certbot 官方文档 (https://certbot.eff.org/)