省流:有了证书直接改 nginx 的配置即可。
背景#
因为在自己的服务器上利用 Nexus 搭建了一个私有的 docker 镜像库,为了支持 K8s 的默认行为不得不将其升级至 https 。当然也有通过设置 /etc/docker/daemon.json 内的 insecure-registries 字段可支持拉取镜像时允许使用 http 请求,但很不幸在 v1.23.6 的 k8s 下这个配置死活不生效。在浪费了近两天的大好时光之后本着能靠花钱解决的问题绝对不死磕的原则,在花费 8 块钱之后顺利解决了(主要是因为买了个域名)。虽然升级服务器到 https 并不复杂,但作为人生的第一次还是觉得有记录一下的意义。
准备 SSL 证书#
由于我的服务器是在阿里云那买的,因此后续的域名与证书也是直接通过阿里云获取的。关于申请免费证书的步骤可以看 这里。当然如果是公司的项目那还是得去花钱买个靠谱证书(2k 多一年这特么也太贵了吧!)。不过需要注意的是在获取 SSL 证书前还需要为自己的服务器准备一个域名,毕竟申请的证书需要与域名绑定,虽然也存在与 IP 绑定的 SSL 证书,但这种东西并不常见(至少阿里云没有)。申请域名之后比较麻烦的事情主要在于把域名挂上 DNS 解析(解析服务也能被分档次卖钱。。。建站实在是太贵了!虽然也有免费的 QAQ)
将证书上传到服务器#
在申请到证书后还需要将证书上传到目标服务器中,可以借助 scp 这一命令
scp fileName user@targetIp:目标文件路径
在连接到远程服务器后需要输入密码进行验证,随后上传到文件便会出现在目标服务器上。
配置 nginx#
修改 /etc/nginx/nginx.conf 内的 server 项
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "修改为密钥文件路径";
ssl_certificate_key "修改为密钥key的路径";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
上面的配置也顺便把服务器开了 http2,也算是个小优化。
配置后重启 nginx 便可生效,随后可通过 curl -I hostName 来进行验证访问,当然也可以使用浏览器来测试,但如果证书出现问题,你只能在浏览器上看见 502 而缺少信息来定位具体问题。
虽然内容有点水,但水文章真开心哇!特别是这种花不了半小时写的东西实在是太快乐了。