插件窝 干货文章 Nginx一个域名如何访问多个项目

Nginx一个域名如何访问多个项目

server Location example index 402    来源:    2025-04-24

在Nginx中配置一个域名访问多个项目,可以通过以下几种常见方式实现:

1. 基于URL路径的分发(Location路由)

server {
    listen 80;
    server_name example.com;

    location /project1 {
        alias /var/www/project1;
        try_files $uri $uri/ /project1/index.html;
    }

    location /project2 {
        alias /var/www/project2;
        try_files $uri $uri/ /project2/index.html;
    }
}

访问方式: - example.com/project1 - example.com/project2

2. 基于子域名的分发(Server Block)

server {
    listen 80;
    server_name app1.example.com;
    root /var/www/app1;
    index index.html;
}

server {
    listen 80;
    server_name app2.example.com;
    root /var/www/app2;
    index index.html;
}

访问方式: - app1.example.com - app2.example.com

3. 反向代理到不同后端服务

server {
    listen 80;
    server_name example.com;

    location /api1 {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
    }

    location /api2 {
        proxy_pass http://localhost:3002;
        proxy_set_header Host $host;
    }
}

4. 使用rewrite规则

server {
    listen 80;
    server_name example.com;

    rewrite ^/blog/(.*)$ /wordpress/$1 last;

    location /wordpress {
        root /var/www;
        index index.php;
    }
}

注意事项:

  1. 路径匹配优先级:精确匹配(=) > 正则匹配(~) > 普通匹配
  2. 使用alias时要注意路径拼接问题
  3. 反向代理时建议添加必要的header:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

完整示例(组合使用):

server {
    listen 80;
    server_name example.com;

    # 静态项目A
    location /static-app {
        alias /var/www/static-app;
        try_files $uri $uri/ /static-app/index.html;
    }

    # 动态项目B(反向代理)
    location /api {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
    }

    # 子路径重定向
    location /old-path {
        return 301 /new-path;
    }

    # 默认处理
    location / {
        root /var/www/main-app;
        index index.html;
    }
}

选择哪种方式取决于具体需求: - 路径区分:适合少量项目,简单直接 - 子域名:适合独立性强、需要隔离cookie的项目 - 反向代理:适合后端服务分离的架构

配置完成后记得测试并重载Nginx:

sudo nginx -t  # 测试配置
sudo systemctl reload nginx  # 重载配置