首页
关于我
Search
1
Vue3 Hooks 的使用
1,405 阅读
2
Vue3 中 ref 标记组件使用
1,221 阅读
3
搭建博客
994 阅读
4
npm i 安装依赖 node-sass 报错
891 阅读
5
Vue2 中混入的使用
726 阅读
Web前端基础
JavaScript
jQuery
css
Vue
ElementUI
博客
Ant Design Vue
友情链接
凌哥技术分享
coder的技术博客
登录
Search
子衿
累计撰写
26
篇文章
累计收到
197
条评论
首页
栏目
Web前端基础
JavaScript
jQuery
css
Vue
ElementUI
博客
Ant Design Vue
页面
关于我
搜索到
3
篇与
博客
的结果
2024-03-14
开启网站HTTPS
使用 acme.sh 为 Nginx 申请、部署 HTTPS 证书并自动续期本文使用虚构示例介绍宝塔与 Nginx 的 HTTPS 申请部署流程。example.com、203.0.113.10 和 DNS 地址均为文档占位符,使用时须替换为自己的配置。一、示例环境与路径项目示例值域名blog.example.com服务器 IP203.0.113.10ACME 客户端/opt/acme/acme.shHTTP 验证目录/www/acmeHTTPS 网站配置/www/server/panel/vhost/nginx/blog.example.com.confHTTP 验证配置/www/server/panel/vhost/nginx/blog-acme-http.conf部署证书目录/www/server/panel/vhost/cert/blog.example.com自动续期任务/etc/cron.d/acme-renew自动续期日志/var/log/acme-renew.log所有配置路径均为示例,应按自己的服务器调整。以下命令在服务器上以 root 执行。证书私钥、ACME 账户密钥不要放入博客或公开仓库。二、先确认域名解析在域名解析控制台添加或修改:记录类型:A 主机记录:blog 记录值:203.0.113.10仅在解析列表里添加记录还不够:域名注册商配置的 DNS 服务器必须与解析服务商分配的地址一致。DNS 地址应使用服务商实际分配的值,以下仅为占位符:ns1.dns-provider.example ns2.dns-provider.example如果控制台提示“未接入使用云解析 DNS,当前配置的解析记录不会生效”,应到域名注册管理中的 DNS 修改页面更改 DNS 服务器,而不是在解析列表中新增 NS 记录代替。其他域名应使用其控制台实际分配的地址。检查解析与网络:getent hosts blog.example.com curl -I --max-time 10 http://blog.example.com/阿里云安全组和服务器防火墙需要允许 TCP 80、443。HTTP-01 验证需要公网访问 80 端口;不要直接关闭防火墙。三、安装 acme.sh(已有安装可跳过)从官方项目下载脚本:mkdir -p /opt/acme-bootstrap cd /opt/acme-bootstrap curl -fL --connect-timeout 10 --max-time 60 \ https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh \ -o acme.sh确认下载成功并查看脚本后,从脚本所在目录执行安装:cd /opt/acme-bootstrap sh acme.sh --install --home /opt/acme --nocron sh /opt/acme/acme.sh --home /opt/acme --version本教程使用独立 cron 任务,因此安装时指定 --nocron,避免重复配置。后续命令始终显式传入 --home /opt/acme。如果服务器无法连接 GitHub,可在自己的电脑从同一官方地址下载,再通过 scp 上传。不要因为网络失败改用来历不明的脚本,也不要关闭 TLS 校验。官方项目与完整说明:https://github.com/acmesh-official/acme.sh四、配置 HTTP 验证路径已有配置时,续期不要重复创建同名 server。新部署时,先备份现有 Nginx 配置,确保这个域名在 80 端口只有一个匹配的虚拟主机。创建验证目录:mkdir -p /www/acme/.well-known/acme-challenge当前 blog-acme-http.conf 的内容为:server { listen 80; listen [::]:80; server_name blog.example.com; location ^~ /.well-known/acme-challenge/ { root /www/acme; default_type text/plain; } location / { return 301 https://$host$request_uri; } }HTTPS 网站原配置中保留 443 监听,并移除该域名重复的 80 监听。验证路径直接返回文件,其余 HTTP 请求跳转 HTTPS。不要在上述 HTTP server 中加入会对所有请求执行的 HTTPS 重写,否则验证文件也可能被重定向。检查并重载配置:/www/server/nginx/sbin/nginx -t && \ /www/server/nginx/sbin/nginx -s reload测试验证路径:printf 'acme-ready\n' > /www/acme/.well-known/acme-challenge/probe curl --max-time 10 http://blog.example.com/.well-known/acme-challenge/probe应该直接输出 acme-ready,而不是 404、登录页或跳转页面。最好同时从另一台电脑测试公网访问。五、申请 Let's Encrypt 证书申请前阅读签发机构条款;提交注册申请可能涉及接受其服务协议。为自己的域名申请,不要使用他人域名。sh /opt/acme/acme.sh --home /opt/acme \ --issue --server letsencrypt \ -d blog.example.com \ -w /www/acme \ --keylength ec-256成功后会显示 Cert success。ECC 证书及密钥保存在:/opt/acme/blog.example.com_ecc/该目录由 acme.sh 管理。部署时使用 --install-cert 复制证书到 Nginx 的固定路径,不要把 Nginx 直接指向 ACME 内部工作文件。六、部署证书并重载 Nginx修改前先备份现有证书及 Nginx 配置。备份应保存在仅 root 可访问的目录,且不要覆盖唯一一份旧备份。CERT_DIR=/www/server/panel/vhost/cert/blog.example.com BACKUP_DIR=/var/backups/https-$(date +%Y%m%d-%H%M%S) mkdir -m 700 "$BACKUP_DIR" cp -a "$CERT_DIR" "$BACKUP_DIR/" cp -a /www/server/panel/vhost/nginx/blog.example.com.conf "$BACKUP_DIR/"安装证书,并让 acme.sh 记住续期后的部署路径和重载命令:sh /opt/acme/acme.sh --home /opt/acme \ --install-cert --ecc -d blog.example.com \ --key-file /www/server/panel/vhost/cert/blog.example.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/blog.example.com/fullchain.pem \ --reloadcmd '/www/server/nginx/sbin/nginx -t && /www/server/nginx/sbin/nginx -s reload' chmod 600 /www/server/panel/vhost/cert/blog.example.com/privkey.pemHTTPS server 中的证书配置应对应:ssl_certificate /www/server/panel/vhost/cert/blog.example.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/blog.example.com/privkey.pem;fullchain.pem 包含站点证书及中间证书链。单独复制站点证书可能造成部分客户端无法建立信任链。七、验证部署结果查看文件中的证书信息:openssl x509 \ -in /www/server/panel/vhost/cert/blog.example.com/fullchain.pem \ -noout -dates -issuer -ext subjectAltName验证公网 HTTPS:curl -I --max-time 15 https://blog.example.com/正常应返回 HTTP 200 或预期的业务跳转,且不能出现证书验证错误。这里不要加 -k,否则会跳过证书校验。若 DNS 缓存尚未一致,可直接验证新服务器,但仍使用域名进行证书校验:curl --resolve blog.example.com:443:203.0.113.10 \ -I https://blog.example.com/浏览器应通过域名访问。证书只覆盖 blog.example.com,不覆盖服务器 IP,也不自动覆盖 www.example.com。八、配置自动续期示例任务文件为 /etc/cron.d/acme-renew,内容为:17 3 * * * root /bin/sh /opt/acme/acme.sh --cron --home /opt/acme >> /var/log/acme-renew.log 2>&1这表示每天按服务器本地时间 03:17 检查是否需要续期,并非每天都重新签发。acme.sh 根据证书状态和 CA 信息决定续期时间;成功后会使用已保存的路径部署,并重载 Nginx。检查任务和服务:cat /etc/cron.d/acme-renew systemctl is-active crond sh /opt/acme/acme.sh --cron --home /opt/acme tail -n 50 /var/log/acme-renew.log显示 Skipping 并给出下次续期时间通常是正常现象,表示现在还不需要续期。若任务尚未运行,日志文件可能还不存在。需要提前续期时先用普通命令:sh /opt/acme/acme.sh --home /opt/acme \ --renew --ecc -d blog.example.com只有确认需要立即重签时才添加 --force。不要反复强制申请,以免触发签发限制。九、常见问题DNS 查询失败或验证一直 Pending检查注册商 DNS 服务器、A 记录、是否有错误 AAAA 记录、80 端口、安全组和验证文件路径。不同递归 DNS 的缓存更新时间可能不同。不要看到某一台机器能解析,就认定所有验证节点都已更新。证书已经更新,但浏览器仍显示“不安全”先确认浏览器访问的是 https://blog.example.com/,再查看它实际收到的证书域名和有效期。用新无痕窗口复测;如仍异常,检查开发者工具 Security、Console、Network 中的证书或混合内容错误。不要简单假定所有异常都是缓存,也不要通过跳过安全警告作为长期解决方法。文件中的证书是新的,但网站仍提供旧证书检查 Nginx 实际使用的虚拟主机和证书路径,执行 nginx -t 后再重载。如果有 CDN 或负载均衡,还要检查入口节点的证书。acme.sh 安装报 cannot stat 'acme.sh'从下载脚本所在目录执行安装。示例:cd /opt/acme-bootstrap sh acme.sh --install --home /opt/acme --nocron续期失败先查看 /var/log/acme-renew.log,确认域名仍指向这台服务器、HTTP 验证目录仍可访问、cron 正常、续期后的 reload 命令仍有效。修改宝塔网站配置后,也要检查验证路径有没有被删除或覆盖。
2024年03月14日
0 阅读
0 评论
0 点赞
2023-08-29
uniapp AndroidApp使用高德地图
uniapp 项目使用高德地图,首先我们先登录高德地图的开放平台,点击登陆进入控制台,点击 应用管理 -> 我的应用 -> 创建新应用,在应用创建完成后,点击添加key,输入key名称(建议格式为应用名 + 应用场景),服务平台选择Android平台。获取SHA1安全码 通过 keytool 获取到 SHA1安全码,目前很多版本的JDK已不再支持MD5,这边分享一下可以获取到MD5的旧版本JDK下载链接,提取码为 tm85,下载到这个JDK后解压,然后右键我的电脑 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量,找到系统变量中的 Path 双击,点击新建将你刚刚解压的jdk路径写进去。 然后进入工作目录,也就是你项目目录,就可以开始生成证书了,使用 keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore命令来生成证书。-alias:证书别名-keyalg:证书秘钥算法名称-keysize:秘钥位大小-validity:有效天数-keystore:证书名keytool-genkey:生成证书 在输入命令行后会让你填写密钥库口令和一些信息,在将信息全部输入完成后就会生成一个 keystore 文件,这个就是你的证书。 创建完成后我们就可以进入你证书的那个目录下,换出 cmd 终端,输入 keytool -list -v -keystore test.keystore 命令行,-keystore 后面的是你证书的名字,然后输入你设置的密钥库口令,就可以得到 SHA1 安全码了。 packageName,就是你 uniapp 的包名,可以通过点击发行 -> 云打包,然后会有一个 Android包名,将那个包名复制过来就好。输入完这些信息后就能获得一个key然后我们将key复制,进入 hbuilderX 中点击 manifest.json 然后点击模块配置,在里面找到 Maps 模块将高德地图勾选上,在 Android 那一栏将你复制的key 粘贴进去就好了。
2023年08月29日
312 阅读
0 评论
0 点赞
2021-09-01
搭建博客
一直想要搭建一个自己的个人博客,最近也是有时间了,便就搭建了一个,也正好将自己学习前端编程的笔记和日常遇见的一些问题,可以放在博客上面,防止在需要时,找不到了首先,我们要租一个服务器 进入阿里云官网,点击云服务器ECS,选择服务器进行购买,在购买完成后,点击右上角进入自己的控制台。 在控制台中选择 云服务器ECS,进入到自己的云服务器中,点击远程连接,在点击远程连接后,会弹出一个弹框,我们选择第一个 Workbench远程连接,然后输入密码后就可以进入自己的服务器实例中。 如果不知道自己的实例密码或者忘记实例密码,则在刚刚ECS云服务器页面,点击实例,进入到该实例的详情页面,然后在基本信息的右上角点击重置实例密码,然后输入你想要更改的实例密码就好了。安装宝塔 为了方便我们后面对服务器实例的使用,我们可以在在服务器实例中安装一个宝塔面板,根据你服务器虚拟机的系统进行选择,我的服务器是Linux系统,点击Linux版,然后点击立即安装,随后按照宝塔Linux的安装教程进行安装即可。进入宝塔界面 在我们安装完成后,会给到我们两个网址,一个内网网址一个外网网址,以及初始用户名和密码,我们复制外网的网址,在游览器中粘贴,即可进入。 如果一直无法进入的话,我们需要在我们服务器实例的详情页面,在基本信息的右上角,点击配置安全组规则,然后再点击配置规则,在入方向下面,点击手动添加,将8888端口加入到安全组规则中,就可以进入了。 在我们进入之后,会让我们下载服务器的相关配置,我们直接选择推荐的进行下载安装即可。域名 想要有一个自己的网站,域名是不可或缺的,我们可以在阿里云官网处,进行域名注册,选择自己喜欢的域名进行查询,然后注册,在注册完成域名后,我们还需要下载阿里云手机app,来进行域名备案,备案完成后,我们在阿里云控制台处,点击 云解析DNS ,然后再点击解析设置,进行添加记录,然后 记录类型 我们选择A,然后主机记录,自己进行添加,记录值将你服务器的公网IP填入。然后在你的宝塔界面中的网站下,添加站点时,将你已经解析的域名进行添加就好了。typecho 该博客使用了typecho模板,我们进入官网,点击立即下载,使用正式稳定版即可,在压缩包下载完成后,我们将压缩包解压,然后再压缩为以zip为后缀的压缩包。 在域名没有完成备案之前,我们可以先开一个外网端口,将博客挂载在该端口上,然后在该端口的文件夹下,将压缩的文件夹进行解压,然后将build文件夹里面的文件剪切粘贴在端口文件夹下,然后就可以输入网址进入博客网页了,网址为你的服务器的公网 ip:端口号。Joe主题 typecho模板有很多主题,该博客使用了Joe主题,在将主题下载完成后,将该主题的压缩包一样进行解压重新压缩为zip格式,将它上传到user文件夹下的themes中,然后进行解压。 进入博客的后台(在你博客的网址后面加 /admin),在控制台下的外观中,启用Joe主题,直接点击启用就可以了。 然后,后续我们可以在设置外观中,进行该主题的自带功能的开启和关闭,也可以添加你自己喜欢的样式。
2021年09月01日
994 阅读
44 评论
8 点赞