最近工作上的是多数在晚上完成,白天完全没有心情工作,只好倒腾一点和工作没什么关系的内容
之前在服务器上起的所有服务都是http的,存在一定的安全性问题,尤其是我的密码本服务,如果泄露的话问题就比较大了,故准备将大多数服务转换成https以供之后使用
将http服务都切换成https服务面临两个问题
第一步自然先去阿里云看一看,nnd居然要花钱,免费的当然也有,但是需要三个月更新一次,那我肯定不能三个月更新一次啊,自然要找自动更新的方案,那就是利用脚本设置定时任务然后去请求更新证书,总体流程不复杂,但是要自己写一下还是有点麻烦的。
第二步每个服务单独设置自己的https,管理维护成本肯定会比较大,不如用nginx统一进行管理,这样也方便进行二级域名的设置,更好地管理服务。
综上我搜索了一下找到了使用nginx_proxy_manager管理的方式,点击进入github。
简单部署逻辑如下:
ymlversion: '3.8'
services:
app:
image: 'docker.io/jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
部署完成之后即可开始使用,浏览器打开对应的地址,重置好账号密码等基础配置,之后我面对的问题有如下几个
针对问题1:
修改映射端口,80->8888,81->1022,443->7894,故访问nginx_proxy_manager本身http的话是通过1022端口,而访问https服务则都是通过7894端口,从体验上来说肯定是不好的,但是想不到什么好的办法姑且只能这样了,如果再其中再转一个机器的话就显得比较麻烦了
针对问题2:
要对二级域名进行解析,即解析*.uncleyiba.com到部署nginx_proxy_manager的服务器,说到这个域名,之后也可能换一个新的,毕竟com没啥卵用而且还贵,我记得我这个上次续费了五年,看了一眼,28年8月。。。那算了等到了那时候再说吧。ddns相关的文章好像还没写,可以自行了解一下jeessy/ddns-go。
针对问题3
申请通配符证书,比如我申请的就是*.uncleyiba.com
这些问题都有了解决方案之后开始配置nginx_proxy_manager
其他功能还在摸索中,等之后更新,以下是踩过的一些坑。
踩坑1,ip配置
配置New Proxy Host的Forward Hostname/IP 的时候,写了127.0.0.1以及localhost,ngxinProxyManager服务内部进行访问的时候就会有问题,用外网ip+端口的形式面对电信ip会变以及原本打算关闭端口对外访问两个问题,最终也是只能使用内网ip+端口的方式,这其实也不一定算得上坑点吧
踩坑2,证书获取失败
看了一下相关的日志信息显示
txt[5/15/2024] [9:43:31 AM] [Global ] › ⬤ debug CMD: . /opt/certbot/bin/activate && pip install --no-cache-dir certbot-dns-aliyun~=0.38.1 && deactivate [5/15/2024] [9:45:29 AM] [Certbot ] › ✖ error WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out. (read timeout=15)")': /packages/a1/95/88da3bdf0488df92e73a5dc60f77a17d098b1dd0ecc0fa60802db1d6a5d2/certbot_dns_aliyun-0.38.1-py2.py3-none-any.whl.metadata
实际上也就是我们在使用阿里云的accessKey进行域名合法性验证的时候,nginxProxyManager需要安装阿里云对应的依赖从而去调用key验证,在安装依赖的时候通过pip源files.pythonhosted.org出现了失败,我好像没看到配置源的地方,只好手动进容器里帮它进行安装(如果服务挂了重启的话,可能需要再重新安装,毕竟容器内的操作是没同步到镜像层面的)
shdocker ps | grep nginx # 获取到nginxProxyManager容器的id
docker exec -it container_id bash # 进入nginxProxyManager容器
. /opt/certbot/bin/activate # 使用指定的python环境
pip install --no-cache-dir certbot-dns-aliyun~=0.38.1 -i https://mirrors.aliyun.com/pypi/simple # 使用阿里源进行相关的依赖安装
deactivate
exit
之后再重新获取证书即可
踩坑3,按步骤操作了依旧无法访问服务
主要涉及ddns-go服务,目前还没头绪,可能和ddns-go的网络设置有关,等有空研究一下再说,其他服务都没啥问题
好好好解决了,太傻比了,ddns服务因为要获取到宿主机的ip所以才启动服务的时候采用的是--net=host方式,我原本访问的一直是1012端口,我就以为它就是这个端口了,也一直在用这个端口配置ngxinProxyManager的映射,但是我查看了一下配置文件启动命令!都没有1012相关的配置!我又搜了一下我使用的jeessy_ddns_go服务的默认端口是9876,尬住了,看了是我之前在使用的时候在路由器上配置了转发,是的路由器的1012端口转发到了内网机器的9876上面,真是坑啊。。。
映射改成了9876之后没问题可以正常访问了
本文作者:康恩
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 Copyright © 2024 KangEn 许可协议。转载请注明出处!