插件窝 干货文章 Nginx虚拟主机配置,实现不同域名访问

Nginx虚拟主机配置,实现不同域名访问

example server Nginx 配置 889    来源:    2025-04-16

Nginx虚拟主机配置:实现不同域名访问

Nginx可以通过配置虚拟主机(server blocks)来实现多个域名共享同一台服务器资源。以下是详细的配置方法:

基本配置方法

1. 创建虚拟主机配置文件

通常Nginx的主配置文件是/etc/nginx/nginx.conf,但最佳实践是为每个站点创建单独的配置文件,存放在/etc/nginx/conf.d//etc/nginx/sites-available/目录中。

sudo nano /etc/nginx/conf.d/example1.com.conf
sudo nano /etc/nginx/conf.d/example2.com.conf

2. 基本虚拟主机配置示例

# example1.com.conf
server {
    listen 80;
    server_name example1.com www.example1.com;

    root /var/www/example1.com;
    index index.html index.htm;

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

# example2.com.conf
server {
    listen 80;
    server_name example2.com www.example2.com;

    root /var/www/example2.com;
    index index.html index.htm;

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

高级配置选项

1. HTTPS配置(使用SSL证书)

server {
    listen 443 ssl;
    server_name example1.com www.example1.com;

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

    root /var/www/example1.com;
    index index.html index.htm;

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

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name example1.com www.example1.com;
    return 301 https://$host$request_uri;
}

2. 通配符子域名配置

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

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

    # 使用变量获取子域名部分
    if ($host ~* ^([a-z0-9-]+)\.example\.com$) {
        set $subdomain $1;
    }

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

3. 负载均衡配置

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

配置完成后

  1. 测试Nginx配置是否正确:
sudo nginx -t
  1. 重新加载Nginx配置:
sudo systemctl reload nginx
# 或
sudo service nginx reload

常见问题解决

  1. 域名解析问题

    • 确保域名已正确解析到服务器IP
    • 检查/etc/hosts文件(本地测试时)
  2. 权限问题

    • 确保Nginx用户有权限访问网站根目录
    sudo chown -R www-data:www-data /var/www/example.com
    sudo chmod -R 755 /var/www/example.com
    
  3. 默认服务器问题

    • 如果没有匹配的server_name,Nginx会使用默认的第一个server块
    • 可以显式指定默认服务器:
    server {
       listen 80 default_server;
       server_name _;
       return 444; # 关闭连接
    }
    
  4. 缓存问题

    • 修改配置后如果看不到变化,尝试清除浏览器缓存或使用无痕模式

通过以上配置,你可以轻松实现Nginx服务器上多个域名的独立访问,每个域名可以有自己的配置、SSL证书和内容目录。