全球主机交流论坛

标题: 大佬们求助,怎么让docker的容器使用https [打印本页]

作者: 大桥未久    时间: 2023-1-12 08:58
标题: 大佬们求助,怎么让docker的容器使用https
小弟想在v2服务器上跑一个vaultwarden,已经知道如何端口转发,但是https 443转发到docker里打不开网页,看官方文档说是要反向代理,但是我查了一下反向代理是宿主机是http才需要反向代理,求大佬指点怎么让docker的容器使用主机的https
作者: sRGB    时间: 2023-1-12 09:07
本帖最后由 sRGB 于 2023-1-12 09:12 编辑

从 CF 申请泛域名的 15年证书
nginx 配置 证书就可以

下面这个方向代理套CF 给你参考一下
/etc/nginx/conf.d/wp.zjpt.wiki.conf


  1.     server {
  2.         listen 443 ssl http2;
  3.         listen [::]:443 http2;
  4.         ssl_certificate       /ssl/xray.crt;
  5.         ssl_certificate_key   /ssl/xray.key;
  6.         ssl_protocols         TLSv1.3;
  7.         ssl_ecdh_curve        X25519:P-256:P-384:P-521;
  8.         server_name           wp.zjpt.wiki;
  9.         index index.html index.htm;
  10.         root  /var/www/html;
  11.         error_page 400 = /400.html;

  12.         # Config for 0-RTT in TLSv1.3
  13.         ssl_early_data on;
  14.         ssl_stapling on;
  15.         ssl_stapling_verify on;
  16.         add_header Strict-Transport-Security "max-age=63072000" always;

  17.         location /3821d8cac325/
  18.         {
  19.             proxy_redirect off;
  20.         proxy_pass http://127.0.0.1:13299;
  21.             proxy_http_version 1.1;
  22.             proxy_set_header X-Real-IP \$remote_addr;
  23.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  24.             proxy_set_header Upgrade $http_upgrade;
  25.             proxy_set_header Connection "upgrade";
  26.             proxy_set_header Host $http_host;
  27.             # Config for 0-RTT in TLSv1.3
  28.             proxy_set_header Early-Data $ssl_early_data;
  29.         }



  30. }
  31.     server {
  32.         listen 80;
  33.         listen [::]:80;
  34.         server_name wp.zjpt.wiki;
  35.         return 301 https://$http_host$request_uri;
  36.     }
复制代码

作者: 大桥未久    时间: 2023-1-12 09:11
sRGB 发表于 2023-1-12 09:07
从 CF 申请泛域名的 15年证书
nginx 配置 证书就可以

nginx已经配置过证书了,但是不知道怎么设置到docker里
作者: shldol    时间: 2023-1-12 09:13
大桥未久 发表于 2023-1-12 09:11
nginx已经配置过证书了,但是不知道怎么设置到docker里

自己进入容器 一般是NGINX 把配置文件映射出来
改那个配置文件就行了

作者: IamZS    时间: 2023-1-12 09:14
https://github.com/lucaslorentz/caddy-docker-proxy
作者: sRGB    时间: 2023-1-12 09:14
大桥未久 发表于 2023-1-12 09:11
nginx已经配置过证书了,但是不知道怎么设置到docker里
  1. docker run -d -p 80:80 -p 443:443  \
  2.     --cpus 0.8   --restart=always   \
  3.     -v /var/www/html:/var/www/html   -v  /var/www/cert:/etc/nginx/cert  \
  4.     -v /var/www/cert/conf.d:/etc/nginx/conf.d  \
  5.     --name  nginx-php      \
  6.     hongwenjun/nginx-php
复制代码


挂载 conf.d 和 证书目录
/var/www/cert/conf.d:/etc/nginx/conf.d
/var/www/cert:/etc/nginx/cert

作者: 大桥未久    时间: 2023-1-12 09:19
sRGB 发表于 2023-1-12 09:14
挂载 conf.d 和 证书目录
/var/www/cert/conf.d:/etc/nginx/conf.d
/var/www/cert:/etc/nginx/cert

大佬,这个例子是意思需要另开一个docker用来跑https还是直接照这个格式去改我要跑https的docker容器的启动参数
作者: woniu    时间: 2023-1-12 09:20
docker inspect 容器id  查看容器的ip地址

在容器的端口确保已经映射的情况下,反代直接设置为

proxy_pass http://容器ip:端口
作者: sRGB    时间: 2023-1-12 09:22
大桥未久 发表于 2023-1-12 09:19
大佬,这个例子是意思需要另开一个docker用来跑https还是直接照这个格式去改我要跑https的docker容器的启 ...

你可以 进入 docker 容器去修改这2个目录,配置好了

可以把配置目录 复制出来,以后新建容器挂载就方便了

也可以使用一键脚本建立配置,然后
把目录备份,修改下配置,然后 新建容器挂载就行
作者: 大桥未久    时间: 2023-1-12 09:27
woniu 发表于 2023-1-12 09:20
docker inspect 容器id  查看容器的ip地址

在容器的端口确保已经映射的情况下,反代直接设置为

谢谢大佬,用你的方法成功了。
作者: 大桥未久    时间: 2023-1-12 09:29
sRGB 发表于 2023-1-12 09:22
你可以 进入 docker 容器去修改这2个目录,配置好了

可以把配置目录 复制出来,以后新建容器挂载就方便 ...

好的大佬,不过我用楼上的办法找到了容器的IP地址,再反带过去就有https了,我一直以为proxy_pass 是端口转发的意思
作者: ColinDemon    时间: 2023-1-12 09:33
宿主机nginx配置

  1.         location / {
  2.             proxy_pass http://127.0.0.1:5678;
  3.             proxy_set_header Host $host;
  4.             proxy_set_header X-Real-IP $remote_addr;
  5.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6.             proxy_set_header X-Forwarded-Proto $scheme;
  7.         }
  8.   
  9.         location /notifications/hub {
  10.             proxy_pass http://127.0.0.1:3012;
  11.             proxy_set_header Upgrade $http_upgrade;
  12.             proxy_set_header Connection "upgrade";
  13.         }
  14.   
  15.         location /notifications/hub/negotiate {
  16.             proxy_pass http://127.0.0.1:5678;
  17.         }
复制代码


docker-compose配置

  1.     ports:
  2.       - "127.0.0.1:5678:80"
  3.       - "127.0.0.1:3012:3012"
复制代码

作者: 大桥未久    时间: 2023-1-12 13:52
woniu 发表于 2023-1-12 09:20
docker inspect 容器id  查看容器的ip地址

在容器的端口确保已经映射的情况下,反代直接设置为

大佬,我试着更新了一下vw的docker现在再用这个办法开始报502的错误,日志提示*1 upstream prematurely closed connection while reading response header from upstream。

因为没保存之前正常的docker运行配置不知道是运行配置写错了还是哪里设置出问题,大佬知道怎么解决吗。现在直接用域名加映射出来的端口号可以访问,但是不能转发到主机的443端口



作者: Bai.    时间: 2023-1-12 14:21
大桥未久 发表于 2023-1-12 13:52
大佬,我试着更新了一下vw的docker现在再用这个办法开始报502的错误,日志提示*1 upstream prematurely c ...


502是因为容器内网ip变了
直接映射到本机 -p 11180:80
反代就反代本机端口 127.0.0.1:11180


ps
如果反代的程序和容器在同一个容器网络下
直接访问容器名加端口就行
作者: 大桥未久    时间: 2023-1-12 15:17
Bai. 发表于 2023-1-12 14:21
502是因为容器内网ip变了
直接映射到本机 -p 11180:80
反代就反代本机端口 127.0.0.1:11180

反代本机端口也没有区别,访问已经可以看到图标了

报错是这样的
  1. 2023/01/12 15:15:25 [error] 16213#0: *4 upstream prematurely closed connection while reading response header from upstream, client: 1********, server: *********.xyz, request: "GET /favicon.ico HTTP/2.0", upstream: "http://127.0.0.1:88/favicon.ico", host: "*******.xyz", referrer: "https://*******.xyz/"
复制代码

作者: cici9911    时间: 2023-1-12 15:22
我也是折腾好久.觉得超出我能力范围了...直接不要https了. docker出来直接http,前面套个cf,直接让cf加https
作者: woniu    时间: 2023-1-12 20:12
先创建一个network   

然后搞两个镜像 一个nginx 一个你的应用

两个镜像公用一个network

nginx这边直接用服务名就能访问你的应用

这样可以解决重启镜像 ip改变的问题





欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4