FisherHub Blog
← 返回列表 | 工具笔记

Nginx 反向代理完整配置教程

从静态文件到 WebSocket,用 Nginx 把多个服务整合到一个域名下

安装

sudo apt install nginx -y
sudo systemctl enable nginx --now

基础反向代理

# /etc/nginx/sites-available/fisherhub.cn
server {
    listen 80;
    server_name fisherhub.cn www.fisherhub.cn;

    location / {
        proxy_pass http://localhost:3000;
        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;
    }
}

多子域名路由

# blog.fisherhub.cn → localhost:3001
server {
    server_name blog.fisherhub.cn;
    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# api.fisherhub.cn → localhost:3002
server {
    server_name api.fisherhub.cn;
    location / {
        proxy_pass http://localhost:3002;
        proxy_set_header Host $host;
    }
}

WebSocket 支持

location /ws {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

HTTPS (Let’s Encrypt)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d fisherhub.cn -d www.fisherhub.cn

静态文件 + API

server {
    server_name fisherhub.cn;

    # 静态文件直出
    root /var/www/fisherhub/dist;
    location / {
        try_files $uri $uri/ /index.html;
    }

    # API 代理
    location /api {
        proxy_pass http://localhost:3002;
    }
}

实用技巧

# gzip 压缩
gzip on;
gzip_types text/css application/javascript application/json;

# 缓存静态资源
location /assets/ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Nginx 的配置语法比想象中简单,关键是理解 location 匹配规则和 proxy_pass