nginx如何反向代理私有证书的内网接口

Gone 是一个基于 Go 语言开发的轻量级依赖注入框架,专注于通过模块化设计和代码生成技术,帮助开发者构建可测试、易维护的应用程序架构。
推挤你使用,项目地址:https://github.com/gone-io/gone

引言

今天有个前端朋友问我:“前端如何配置https证书?”。听的一头雾水,原来是他写的页面访问接口时报了证书错误Met::ERR CERT AUTHORITY INVALID,领导让他在前端配置一下证书;他的页面是http访问的,报错的接口是另外部门提供的,现在从http改成了https,然而使用的却是私有证书。我给他的分析结论是:使用nginx代理中转一下

问题:在nginx上如何反向代理私有证书的接口

一般有两种方案解决,在这里分享给大家。

方法一:禁用SSL证书验证(不推荐生产环境)​

此方法允许Nginx跳过对后端证书的验证,适用于测试或内部安全环境。

server {
    listen 80;
    server_name proxy.example.com;

    location / {
        proxy_pass https://backend.example.com;
        proxy_ssl_verify off;  # 关闭证书验证
        proxy_ssl_server_name on;  # 启用SNI支持
        # 传递必要头信息
        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;
    }
}

方法二:信任私有证书(推荐)

将后端证书或其CA证书添加到Nginx的信任列表中,确保

使用 Nginx 作为反向代理来做请求转发,可以避免直接暴露后端接口,主要原因在于 **Nginx 充当了客户端与后端服务之间的中间层**,所有外部请求都先经过 Nginx,再由 Nginx 转发给后端服务。这样,后端服务就可以部署在内网或防火墙之后,无需直接对外暴露其 IP 和端口。 --- ### ✅ 为什么不需要开放后端接口? 1. **网络隔离(安全)** - 后端服务可以运行在私有网络中(如 `192.168.x.x` 或 Docker 内部网络),只允许 Nginx 所在的服务器访问。 - 外部用户只能访问 Nginx 的公网 IP 和端口(通常是 80/443),无法直接连接到后端服务的端口(如 3000、8080 等)。 2. **统一入口** - 所有请求都通过 Nginx 进入系统,便于集中管理:负载均衡、SSL 终止、缓存、限流、日志记录等。 3. **隐藏技术细节** - 外部看不到你用了什么语言写的后端(Node.js、Python、Java?)、监听什么端口、甚至不知道有多少个服务。 --- ### 🛠 示例配置 假设你的前端是静态页面,后端 API 运行在 `http://localhost:3000`,我们用 Nginx反向代理: ```nginx server { listen 80; server_name api.example.com; # 所有 /api 开头的请求转发到后端 location /api/ { proxy_pass http://localhost:3000/; 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; } # 静态资源(可选) location / { root /var/www/html; index index.html; try_files $uri $uri/ =404; } } ``` #### 解释: - 客户端访问 `http://api.example.com/api/users` → Nginx 接收到请求。 - Nginx 将这个请求转发给 `http://localhost:3000/users`(即后端服务)。 - 后端服务只需监听本地 `3000` 端口,**不需要绑定公网 IP,也不需要开放防火墙给外网**。 - 外部用户根本不知道 `3000` 端口的存在。 --- ### 🔒 安全增强建议 你可以进一步加固后端服务的安全性: ```bash # 只允许本机访问后端服务 app.listen(3000, '127.0.0.1') # Node.js 示例 ``` 或者在防火墙中禁止外部访问 3000 端口: ```bash sudo ufw deny 3000 ``` 这样即使有人扫描你的服务器,也发现不了后端服务。 --- ### 总结优势 | 优势 | 说明 | |------|------| | 安全性提升 | 后端不暴露公网 | | 易于维护 | 统一路由、日志、证书管理 | | 支持负载均衡 | 可将请求分发到多个后端实例 | | SSL 终止 | HTTPS 在 Nginx 解密,后端走 HTTP 内网通信 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值