插件窝 干货文章 nginx怎么实现在一个服务器可以访问多个网站

nginx怎么实现在一个服务器可以访问多个网站

配置 Nginx Server 网站 1001    来源:    2025-04-21

在Nginx服务器上托管多个网站的方法

要在单个Nginx服务器上托管多个网站,主要有以下几种实现方式:

1. 基于名称的虚拟主机(Server Blocks)

这是最常见的方法,通过不同的域名访问不同的网站。

配置步骤:

  1. /etc/nginx/conf.d//etc/nginx/sites-available/目录下为每个网站创建单独的配置文件
  2. 每个配置文件包含一个server块,例如:
# 网站1配置
server {
    listen 80;
    server_name example.com www.example.com;

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

    # 其他配置...
}

# 网站2配置
server {
    listen 80;
    server_name anothersite.com www.anothersite.com;

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

    # 其他配置...
}
  1. 创建符号链接到sites-enabled目录(如果使用sites-available/sites-enabled结构):

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

    nginx -t
    systemctl restart nginx
    

2. 基于端口的虚拟主机

通过不同的端口号访问不同的网站:

server {
    listen 8080;
    server_name example.com;
    root /var/www/example.com;
    # 其他配置...
}

server {
    listen 8081;
    server_name anothersite.com;
    root /var/www/anothersite.com;
    # 其他配置...
}

3. 基于IP地址的虚拟主机

如果服务器有多个IP地址,可以为每个网站分配不同的IP:

server {
    listen 192.168.1.1:80;
    server_name example.com;
    root /var/www/example.com;
    # 其他配置...
}

server {
    listen 192.168.1.2:80;
    server_name anothersite.com;
    root /var/www/anothersite.com;
    # 其他配置...
}

4. 使用子目录托管多个网站

也可以在一个主网站下通过子目录访问不同的网站:

server {
    listen 80;
    server_name example.com;

    location /site1 {
        alias /var/www/site1;
        # 其他配置...
    }

    location /site2 {
        alias /var/www/site2;
        # 其他配置...
    }
}

最佳实践建议

  1. 使用基于名称的虚拟主机是最推荐的方式
  2. 为每个网站创建单独的配置文件,便于管理
  3. 确保每个网站的root目录权限设置正确
  4. 考虑使用Let's Encrypt为每个网站配置SSL证书
  5. 使用nginx -t测试配置语法后再重启服务

常见问题解决

如果配置后无法访问,可以检查: - 域名DNS解析是否正确 - 服务器防火墙是否开放了相应端口 - Nginx错误日志:/var/log/nginx/error.log - 确保没有其他服务占用80端口

需要更详细的配置示例或有特定需求,可以告诉我您具体的场景,我会提供更针对性的解决方案。