Administrator
发布于 2026-10-05 / 2 阅读
0
0

如何安装Nginx反向代理

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。


评论