VPS‑Linux安装Nginx做反向代理
环境:一般Debian / Ubuntu。你的用途:一个Nginx监听80、443;根据子域名Host,转发到本机docker服务(Halo‑8090,库管‑8100);docker端口全部绑定127.0.0.1,不对外暴露
1、安装 Nginx(Ubuntu / Debian)
sudo apt update
sudo apt install nginx -y
检查是否安装成功
systemctl status nginx
看到 active (running) 代表运行。
防火墙设置(ufw,如果你的vps用ufw)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
❗不要开放8090、8100公网端口!这些只是内网。
2、SSL证书获取(使用acme‑sh申请证书,推荐)
域名:blog.myfamily2027.top,stockapi.myfamily2027.top
Cloudflare开启橙色代理情况下,建议DNS‑01方式申请证书。
安装acme‑sh
curl https://get.acme.sh | sh
source ~/.bashrc
设置cloudflare的API密钥,acme‑sh自动DNS验证域名所有权
export CF_Email="你的cloudflare登录邮箱"
export CF_API_Key="Cloudflare‑Global‑API‑Key"
申请证书(两个子域名一张证书)
~/.acme.sh/acme.sh --issue --dns dns_cf -d blog.myfamily2027.top -d stockapi.myfamily2027.top
把证书复制到nginx目录
sudo mkdir -p /etc/nginx/ssl
~/.acme.sh/acme.sh --install-cert -d blog.myfamily2027.top \
--key-file /etc/nginx/ssl/blog.key \
--fullchain-file /etc/nginx/ssl/blog.crt \
--reloadcmd "sudo systemctl reload nginx"
证书会自动续期,不用手动操作。
3、建立站点配置文件
Nginx站点配置目录:/etc/nginx/sites-available/
新建文件
sudo nano /etc/nginx/sites-available/myproxy.conf
粘贴下面全部内容
# http全部跳转https
server {
listen 80;
server_name blog.myfamily2027.top stockapi.myfamily2027.top;
return 301 https://$host$request_uri;
}
# Halo博客 blog.myfamily2027.top
server {
listen 443 ssl;
server_name blog.myfamily2027.top;
ssl_certificate /etc/nginx/ssl/blog.crt;
ssl_certificate_key /etc/nginx/ssl/blog.key;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X‑Real‑IP $remote_addr;
proxy_set_header X‑Forwarded‑For $proxy_add_x_forwarded_for;
proxy_set_header X‑Forwarded‑Proto $scheme;
}
}
#库管后端 stockapi.myfamily2027.top
server {
listen 443 ssl;
server_name stockapi.myfamily2027.top;
ssl_certificate /etc/nginx/ssl/blog.crt;
ssl_certificate_key /etc/nginx/ssl/blog.key;
location / {
proxy_pass http://127.0.0.1:8100;
proxy_set_header Host $host;
proxy_set_header X‑Real‑IP $remote_addr;
proxy_set_header X‑Forwarded‑For $proxy_add_x_forwarded_for;
proxy_set_header X‑Forwarded‑Proto $scheme;
}
}
Ctrl+O保存,Ctrl+X退出nano编辑器。
启用这个配置(建立软链接)
sudo ln -s /etc/nginx/sites-available/myproxy.conf /etc/nginx/sites-enabled/
测试nginx配置语法是否有错!非常重要
sudo nginx -t
输出
test is successful代表没问题。如果报错,回去检查配置。
重新加载nginx生效
sudo systemctl reload nginx
4、docker容器端口映射的关键设置(必须!)
Halo的docker,端口映射不要写0.0.0.0:8090:8090
✅正确写法(只绑定本机回环,公网访问不到)
ports:
- "127.0.0.1:8090:8090"
库管后端同理
ports:
- "127.0.0.1:8100:8100"
这样docker服务只能Nginx本机访问,互联网不能直接访问8090端口,保证安全。
5、整体访问流程回顾
浏览器 → Cloudflare(橙色代理) → VPS的443端口(Nginx)
Nginx读取Host子域名
blog → http://127.0.0.1:8090(Halo)
stockapi → http://127.0.0.1:8100(库管后端)
访问地址:
https://blog.myfamily2027.top
https://stockapi.myfamily2027.top
后面不要加端口号!
排错清单
1、nginx -t一定要先测试配置,不通过不要reload
2、docker端口必须绑定127.0.0.1,不能0.0.0.0
3、VPS防火墙只放行80和443;8090/8100不要对外开放
4、Cloudflare两个子域名DNS记录A已经建立,云朵是橙色Proxied
如果你需要,我可以告诉你怎么修改配置以后增加新的子域名服务。
补充:如果你是CentOS系统,安装命令不一样告诉我。绝大多数海外VPS是Ubuntu/Debian。
获取Cloudflare Global‑API‑Key位置:CF主页‑My‑Profile‑API‑Tokens,Global API Key。注意不是普通token,是Global。