插件窝 干货文章 如何使用Nginx实现基于域名和路径的虚拟主机配置

如何使用Nginx实现基于域名和路径的虚拟主机配置

location 配置 路径 server 577    来源:    2025-04-13

使用Nginx实现基于域名和路径的虚拟主机配置

Nginx可以通过配置实现基于域名和路径的虚拟主机功能。下面我将详细介绍两种配置方式。

1. 基于域名的虚拟主机配置

这是最常见的虚拟主机配置方式,通过不同的域名来区分不同的网站。

配置示例

server {
    listen 80;
    server_name domain1.com www.domain1.com;

    root /var/www/domain1;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name domain2.com www.domain2.com;

    root /var/www/domain2;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

关键点说明

  • server_name 指令指定该server块响应的域名
  • 每个域名可以有独立的root目录和配置
  • 可以配置多个域名指向同一个server块

2. 基于路径的虚拟主机配置

当需要在同一域名下通过不同路径访问不同内容时,可以使用路径虚拟主机。

配置示例

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

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

        # 可以添加额外的配置
        # proxy_pass http://localhost:3000;
    }

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

关键点说明

  • 使用location指令定义路径规则
  • 可以使用alias指定不同于root的目录
  • 每个路径可以有自己的配置和处理方式
  • 路径匹配支持正则表达式

3. 混合配置示例

可以同时使用域名和路径来区分不同的虚拟主机。

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3001;
    }

    location /v2 {
        proxy_pass http://localhost:3002;
    }
}

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/main;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /static {
        alias /var/www/static;
        expires 30d;
    }
}

4. 配置注意事项

  1. 路径匹配优先级

    • Nginx会按照以下顺序匹配location:
      1. 精确匹配 location = /path
      2. 前缀匹配 location ^~ /path
      3. 正则匹配 location ~ /path
      4. 普通前缀匹配 location /path
  2. alias与root区别

    • root会将location路径附加到指定目录后
    • alias会完全替换location路径为指定目录
  3. 测试配置

    nginx -t  # 测试配置语法
    nginx -s reload  # 重新加载配置
    
  4. 性能考虑

    • 正则匹配比前缀匹配消耗更多资源
    • 对于静态内容,考虑添加缓存头

通过以上配置方式,您可以灵活地实现基于域名和路径的虚拟主机功能,满足各种网站架构需求。