插件窝 干货文章 Nginx虚拟主机配置,同时托管多个网站入口

Nginx虚拟主机配置,同时托管多个网站入口

example server index Nginx 176    来源:    2025-04-16

Nginx虚拟主机配置:托管多个网站

Nginx通过虚拟主机(server blocks)可以在一台服务器上托管多个网站。以下是配置多个网站入口的详细方法:

基础配置方法

1. 基于域名的虚拟主机

这是最常见的多网站托管方式,通过不同的域名来区分网站:

# 第一个网站 - example.com
server {
    listen 80;
    server_name example.com www.example.com;

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

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

# 第二个网站 - example.org
server {
    listen 80;
    server_name example.org www.example.org;

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

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

2. 基于端口的虚拟主机

使用不同端口来区分网站:

server {
    listen 8080;
    server_name example.com;

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

server {
    listen 8081;
    server_name example.org;

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

高级配置技巧

1. 使用通配符和正则表达式

server {
    listen 80;
    server_name ~^(www\.)?(?<domain>.+)$;

    root /var/www/$domain;
    index index.html;
}

2. 默认服务器配置

server {
    listen 80 default_server;
    server_name _;
    return 444; # 关闭连接
}

3. HTTPS配置

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

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

最佳实践

  1. 目录结构

    /var/www/
    ├── example.com
    │   └── index.html
    ├── example.org
    │   └── index.html
    └── ...
    
  2. 配置文件组织

    • 主配置文件:/etc/nginx/nginx.conf
    • 各站点配置:/etc/nginx/sites-available/example.com
    • 启用站点:ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  3. 配置检查与重载

    nginx -t        # 测试配置是否正确
    nginx -s reload # 重载配置
    
  4. 日志分离

    server {
       ...
       access_log /var/log/nginx/example.com.access.log;
       error_log /var/log/nginx/example.com.error.log;
    }
    

完整示例

# /etc/nginx/sites-available/example.com

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

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

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

    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;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    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/public;
    index index.php index.html index.htm;

    # 其他SSL配置...
}

通过以上配置,您可以轻松地在单台Nginx服务器上托管多个网站。每个网站可以有独立的配置、日志和资源目录。