在甲骨文免费 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:
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 nginxOracle 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 正常但后端服务未启动或地址配置错误。查看日志定位问题:
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