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

Nginx如何实现基于域名的虚拟主机配置

example Nginx 配置 com 264    来源:    2025-04-10

Nginx 基于域名的虚拟主机配置指南

基于域名的虚拟主机(Virtual Host)允许你在同一台服务器上通过不同的域名来托管多个网站。以下是详细的配置步骤:

基本配置步骤

  1. 创建网站目录结构

    sudo mkdir -p /var/www/example1.com/html
    sudo mkdir -p /var/www/example2.com/html
    
  2. 设置目录权限

    sudo chown -R $USER:$USER /var/www/example1.com/html
    sudo chown -R $USER:$USER /var/www/example2.com/html
    sudo chmod -R 755 /var/www
    
  3. 创建测试页面

    echo "<h1>Welcome to Example1.com</h1>" > /var/www/example1.com/html/index.html
    echo "<h1>Welcome to Example2.com</h1>" > /var/www/example2.com/html/index.html
    
  4. 创建虚拟主机配置文件

    /etc/nginx/sites-available/ 目录下为每个域名创建配置文件:

  • example1.com 配置 (/etc/nginx/sites-available/example1.com): ```nginx server { listen 80; listen [::]:80;

     server_name example1.com www.example1.com;
    
     root /var/www/example1.com/html;
     index index.html;
    
     location / {
         try_files $uri $uri/ =404;
     }
    

    } ```

  • example2.com 配置 (/etc/nginx/sites-available/example2.com): ```nginx server { listen 80; listen [::]:80;

     server_name example2.com www.example2.com;
    
     root /var/www/example2.com/html;
     index index.html;
    
     location / {
         try_files $uri $uri/ =404;
     }
    

    } ```

  1. 启用虚拟主机配置

    创建符号链接到 sites-enabled 目录:

    sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/
    
  2. 测试并重启Nginx

    sudo nginx -t  # 测试配置语法
    sudo systemctl restart nginx
    

高级配置选项

  1. SSL/TLS 配置(HTTPS)

    server {
       listen 443 ssl;
       listen [::]:443 ssl;
    
       server_name example1.com www.example1.com;
    
       ssl_certificate /path/to/your/certificate.crt;
       ssl_certificate_key /path/to/your/private.key;
    
       root /var/www/example1.com/html;
       index index.html;
    
       location / {
           try_files $uri $uri/ =404;
       }
    }
    
  2. HTTP 重定向到 HTTPS

    server {
       listen 80;
       listen [::]:80;
    
       server_name example1.com www.example1.com;
    
       return 301 https://$server_name$request_uri;
    }
    
  3. 自定义错误页面

    error_page 404 /404.html;
    location = /404.html {
       root /var/www/example1.com/html;
       internal;
    }
    
  4. 日志配置

    access_log /var/log/nginx/example1.com.access.log;
    error_log /var/log/nginx/example1.com.error.log;
    

注意事项

  1. 确保域名已正确解析到服务器IP地址
  2. 每次修改配置后,使用 nginx -t 测试配置语法
  3. 如果使用防火墙,确保80和443端口已开放
  4. 对于生产环境,建议使用Let's Encrypt等工具自动管理SSL证书

常见问题解决

  1. 配置不生效

    • 检查 server_name 是否正确
    • 确保配置已链接到 sites-enabled 目录
    • 检查是否有其他配置冲突
  2. 权限问题

    • 确保Nginx用户(通常是www-data)有权限访问网站目录
    • 检查SELinux/AppArmor是否阻止了访问
  3. SSL证书问题

    • 确保证书链完整
    • 检查证书和私钥路径是否正确
    • 验证证书是否过期

通过以上配置,你可以轻松地在同一台Nginx服务器上托管多个基于不同域名的网站。