插件窝 干货文章 Nginx虚拟主机怎么配置

Nginx虚拟主机怎么配置

example Nginx 配置 server 44    来源:    2025-04-24

Nginx虚拟主机配置指南

Nginx虚拟主机(也称为server blocks)允许您在一台服务器上托管多个网站。以下是配置Nginx虚拟主机的详细步骤:

基本配置步骤

  1. 创建网站目录

    sudo mkdir -p /var/www/example.com/html
    sudo chown -R $USER:$USER /var/www/example.com/html
    sudo chmod -R 755 /var/www/example.com
    
  2. 创建示例页面

    nano /var/www/example.com/html/index.html
    

    添加内容:

    <html>
       <head>
           <title>Welcome to Example.com!</title>
       </head>
       <body>
           <h1>Success! The example.com server block is working!</h1>
       </body>
    </html>
    
  3. 创建虚拟主机配置文件

    sudo nano /etc/nginx/sites-available/example.com
    

    添加以下内容:

    server {
       listen 80;
       listen [::]:80;
    
       server_name example.com www.example.com;
    
       root /var/www/example.com/html;
       index index.html;
    
       location / {
           try_files $uri $uri/ =404;
       }
    }
    
  4. 启用虚拟主机

    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
    
  5. 测试配置并重启Nginx

    sudo nginx -t
    sudo systemctl restart nginx
    

高级配置选项

1. HTTPS配置

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

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

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

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

2. PHP支持

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

    root /var/www/example.com/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

3. 反向代理配置

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

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

常见问题解决

  1. 测试配置时报错

    • 运行 sudo nginx -t 查看具体错误
    • 常见错误包括:语法错误、缺少分号、括号不匹配等
  2. 权限问题

    • 确保Nginx用户(通常是www-data)有权限访问网站目录
    • 使用 sudo chown -R www-data:www-data /var/www/example.com
  3. 虚拟主机不生效

    • 检查server_name是否正确
    • 确保已创建符号链接到sites-enabled目录
    • 检查是否有其他配置冲突
  4. 重定向循环

    • 检查HTTPS配置是否正确
    • 确保没有多个server块处理相同请求

最佳实践

  1. 每个网站使用单独的配置文件
  2. 将配置文件放在sites-available中,通过符号链接启用
  3. 定期检查Nginx错误日志:/var/log/nginx/error.log
  4. 使用include指令组织大型配置
  5. 为生产环境启用HTTPS

通过以上配置,您可以灵活地在单台Nginx服务器上托管多个网站或应用。