在AI辅助下很快把几乎忘记的小vps捡起来了
简介
问了大模型Nginx Proxy Manager怎么配置
问了二级域名怎么往vps上挂,能用来做什么,考虑后面新建一些站点,作为以后的实用型页面或者纯粹没用的小玩意
AI可真好用啊
四月虽然也很忙,不过最近终于重新登录,把FGO第一部打完了,建号十年只玩了这么一点,上去一看感觉熟悉又陌生。
如果不是因为新手机空间够大、够折腾,我是不会折磨自己玩手机游戏的。
第一阶段:部署Nginx Proxy Manager(反向代理)
1 | mkdir -p ~/npm && cd ~/npm |
1 | # docker-compose.yml |
作用:NPM作为统一入口,占用服务器的80/443端口,负责SSL证书申请+域名分发。
第二阶段:准备任意站点文件
projectname改为任意需要的二级域名
1 | sudo mkdir -p /opt/projectname |
作用:站点文件放在宿主机,方便直接修改。
第三阶段:启动projectname容器(第一次,失败)
1 | docker run -d \ |
问题:projectname容器用了
-p 127.0.0.1:8081:80,但NPM也在容器里。容器访问宿主机
127.0.0.1 不是宿主机本身,导致NPM无法通过
127.0.0.1:8081找到projectname。
第三阶段(重复):关键修复 —— 加入同一Docker网络
1 | # 先查NPM在哪个网络 |
核心点: -
去掉-p端口映射(外部根本不需要直接访问projectname)
-
加上--network npm_default,让projectname和NPM在同一个Docker网络里
-
两个容器可以通过容器名直接通信(http://projectname)
第四阶段:域名解析
登录域名解析管理 → Networking →
Domains → 选择domain.com
添加一条A记录:
| 字段 | 值 | 说明 |
|---|---|---|
| Type | A |
IPv4解析 |
| Hostname | projectname |
只填子域名部分,不要写完整域名 |
| Will Direct To | 你的服务器IP | 就是NPM所在的那台vps |
| TTL | 3600(默认) |
或改成 600 加快生效 |
填完点Create Record。
如果有IPv6,再加一条AAAA记录,Hostname同样是projectname,指向服务器的
IPv6 地址。
为什么这步必须在 SSL 之前
Let's Encrypt的HTTP-01验证流程是:
1 | Let's Encrypt服务器 |
如果DNS没生效就点Request SSL Certificate,NPM
会报错: 1
2Internal Error / CommunicationError /
unauthorized :: ... DNS problem: NXDOMAIN
验证DNS是否生效
在本机或服务器上跑:
1 | # 方法 1:dig |
只有当dig返回正确IP后,才去NPM点SSL。
泛域名的省事做法(推荐)
如果你以后还会加 xxx.domain.com
各种子域名,一次性配置泛解析更省心:
在域名解析页面加一条:
| Type | Hostname | Will Direct To |
|---|---|---|
| A | * |
服务器 IP |
这样以后新加blog.domain.com、api.domain.com、whatever.domain.com都不用再动DNS,直接在NPM里加Proxy
Host就行。
不过要注意:泛解析 + Let's Encrypt通配符证书 需要DNS-01验证(要在NPM里配域名解析页面的API Token),比单域名麻烦一点。如果只是每个子域名单独申请证书,泛A记录 + HTTP-01仍然能正常工作,推荐这种。
第五阶段:验证 + 上线
1 | # 从NPM容器内部测试能否访问projectname |
projectname之后的修改方式
静态页面极简修改流程:
1 | sudo vim /opt/projectname/index.html |
立即生效! 不需要重启容器,因为: -
-v /opt/projectname:/usr/share/nginx/html:ro是挂载,不是拷贝
- 浏览器刷新即可看到新内容(如有缓存加 ?v=2)
如果要加新页面/图片: 1
2sudo cp about.html /opt/projectname/
sudo cp -r images /opt/projectname/
只有在修改nginx配置(不是html)时才需要:
1
docker restart projectname