如何在甲骨文免费 VPS 上部署 Nginx 反向代理

文章导读
在甲骨文免费 VPS 上部署 Nginx 反向代理,核心是打通云平台安全组与系统防火墙,并正确配置 proxy_pass 指令,适用于需要隐藏后端服务或统一入口的场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

在甲骨文免费 VPS 上部署 Nginx 反向代理,核心是打通云平台安全组与系统防火墙,并正确配置 proxy_pass 指令,适用于需要隐藏后端服务或统一入口的场景。

先说结论:部署本身技术门槛不高,但甲骨文云平台特有的两层防火墙机制最容易导致配置后无法访问。

  • 适合:需要为后端服务提供 HTTPS 终止、负载均衡或隐藏真实后端 IP 的 Web 架构。
  • 先准备:确认实例所在区域的安全列表已放行 80/443 端口,且域名已解析至 VPS 公网 IP。
  • 验收:通过 curl 命令检查响应头,并查看 Nginx 访问日志确认请求已正确转发。

命令速用版

以下命令基于 Ubuntu 系统,Oracle Linux 请将 apt 替换为 dnf 或 yum,配置文件路径也有所不同。

# 安装 Nginx
sudo apt update
sudo apt install nginx -y

# 启动并设置开机自启
sudo systemctl enable nginx
sudo systemctl start nginx

# 检查状态
sudo systemctl status nginx

为什么会这样

Nginx 反向代理的本质是接收客户端请求,再由服务器代为向后端服务发起请求,最后将结果返回给客户端。在甲骨文 VPS 上,流量到达 Nginx 之前需要经过两道关卡:首先是甲骨文云控制台(VCN)的安全列表,其次是操作系统内部的防火墙(如 ufw 或 firewalld)。

很多用户配置完 Nginx 后发现无法访问,通常是因为只在系统内开放了端口,却忽略了云控制台的安全规则。此外,免费实例多为 ARM 架构,但主流 Nginx 发行版均支持该架构,一般无需特殊处理。

分步处理

1. 配置云平台安全列表

登录甲骨文云控制台,进入实例详情,点击子网链接,找到安全列表(Security List)。在入站规则(Ingress Rules)中添加 TCP 协议,目标端口范围填写 80 和 443,源 CIDR 填写 0.0.0.0/0。保存后生效,这一步不需要重启实例。

2. 配置系统防火墙

Ubuntu 默认可能未开启 ufw,若已开启需放行端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

若是 Oracle Linux 8/9,通常使用 firewalld:

如何在甲骨文免费 VPS 上部署 Nginx 反向代理
sudo firewall-cmd `--permanent` `--add-service`=http
sudo firewall-cmd `--permanent` `--add-service`=https
sudo firewall-cmd `--reload`

3. 编写反向代理配置

Ubuntu 系统:在/etc/nginx/sites-available/下新建配置文件,例如 proxy.conf:

server {
    listen 80;
    server_name your_domain.com;

    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;
    }
}

启用配置并重启:

sudo ln -s /etc/nginx/sites-available/proxy.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Oracle Linux 系统:直接在/etc/nginx/conf.d/下新建配置文件,例如 proxy.conf:

sudo vim /etc/nginx/conf.d/proxy.conf
# 填入上述 server 配置内容
sudo nginx -t
sudo systemctl reload nginx

注意将 your_domain.com 替换为实际域名,proxy_pass 后的地址替换为实际后端服务地址。

怎么验证是否生效

首先在服务器本地测试 Nginx 配置语法是否正确:

sudo nginx -t

若显示 successful 则语法无误。接着在本地或外部机器使用 curl 测试:

curl -I http://your_domain.com

若返回 HTTP/1.1 200 OK 或 301/302 跳转,说明链路通畅。若返回 502 Bad Gateway,说明 Nginx 正常但后端服务未启动或地址配置错误。查看日志定位问题:

如何在甲骨文免费 VPS 上部署 Nginx 反向代理
sudo tail -f /var/log/nginx/error.log

常见坑

1. 控制台安全列表未放行

这是最高频的问题。即使系统防火墙全开,若云控制台安全列表未放行,外部流量也无法到达 VPS。务必确认入站规则已添加。

2. 后端服务监听地址

若后端服务只监听 127.0.0.1,Nginx 在同一台机器可以代理;若后端在另一台机器,需确保后端机器的防火墙也允许来自 Nginx 服务器的连接。

3. SELinux 限制

Oracle Linux 默认开启 SELinux,可能禁止 Nginx 发起网络连接。若日志显示 Permission denied,可尝试临时设置为宽容模式排查:

sudo setenforce 0

注意:该命令仅用于临时排查,确认后请立即恢复安全模式:sudo setenforce 1。建议配置正确的 SELinux 策略而非长期关闭,否则可能导致系统安全风险。

4. 域名解析延迟

配置完成后若无法访问,检查本地 DNS 缓存。可使用 dig 命令确认域名是否已解析到正确的公网 IP。

参考来源

  • Nginx 官方文档 - Engine x documentation
  • Oracle Cloud Infrastructure 文档 - Security Lists