如何使用 Nginx 反代一个内部自签名 https 到外部站点

2017-09-19 12:38:50 +08:00
 ifaii

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

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

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

4820 次点击
所在节点    NGINX
5 条回复
a1044634486
2017-09-19 12:43:02 +08:00
应该无解吧。浏览器就不信任你这个 ca 机构
aqqwiyth
2017-09-19 13:29:13 +08:00
典型的 HTTPS 劫持.

第一步
nginx 本地弄一个私钥主要是反代 HTTPS, 客户端(外网用户)信任 nginx 的证书

第二步
nginx proxy 目标地址的 HTTPS, 需要装载目标地址的证书 proxy_ssl_xxxx http://nginx.org/en/docs/http/ngx_http_proxy_module.html

你已经做了第一步
Niphor
2017-09-19 13:37:43 +08:00
```
proxy_ssl_trusted_certificate ...';
proxy_ssl_verify off;
```

不过话说回来,干嘛不在原来的 server_name 里加个 registry.vpclub.cn ,何必再套个 nginx...
Niphor
2017-09-19 13:40:17 +08:00
而且 这样 你这个 nginx 承担了 解密 又加密 ssl,直接配个转发不更好...
jiewuza
2017-09-22 14:52:18 +08:00
我也有类似的需求,但是看了楼上几位,有点困惑,到底能不能实现?
我这边的应用是这样的:
从第三方(比如天气服务,具体名称就不给了,以免广告嫌疑)获得了 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";
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/391931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX