技术解析

如何使用 Nginx 反代一个内部自签名 https 到外部站点
0
2021-05-20 21:30:44
idczone

首先由一个内部 openshift 集群中的 docker registry URL,通过 openshift 的 Route 功能生产,在内部可用。
即内部地址 https://docker-registry-default.apps.vpclub.io ,自签名不受信任

现在需要将其放到公网上访问,通过另一个域名,在外部 NAT 443 端口的内部主机上做反代理,配置如下:

结果无大带宽服务器法访问 https://registry.vpclub.cn
尝试了多种方法均没解决,求指点!

  • 内部地址必需用域名才能访问
  • 外部的 HTTPS 证书是受信任的,各位可以尝试访问

应该无解吧。浏览器就不信任你这个 ca 机构

典型的 HTTPS 劫持.
第一步
nginx 本地弄一个私钥主要是反代 HTTPS, 客户端(外网用户)信任 nginx 的证书
第二步
nginx proxy 目标地址的 HTTPS, 需要装载目标地址的证书 proxy_ssl_xxxx http://nginx.org/en/docs/http/ngx_http_proxy_module.html
你已经做了第一步

```
proxy_ssl_trusted_certificate ...';
proxy_ssl_verify off;
```
不过话说回来,干嘛不在原来的 server_name 里加个 registry.vpclub.cn ,何必再套个 nginx...

而且 这样 你这个 nginx 承担了 解密 又加密 ssl,直接配个转发不更好...

我也有类似的需求,但是看了楼上几位,有点困惑,到底能不能实现?
我这边的应用是这样的:
从第三方(比如天气服务,具体名称就不给了,以免广告嫌疑)获得了 appid
想让用户访问我自己的后台时,通过 nginx 代理(设置 appid 等头部)直接访问第三方
我的服务和第三方服务都需要 https 访问
我目前这样的设置是不行的,直接 301 回来了
location /test/ {
proxy_pass https://xxx/path/to/api;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header app_id "...";
proxy_set_header app_key "...."
proxy_set_header Content_Type "application/json";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host "xxx.xxx.com";
}

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服