插件窝 干货文章 nginx同一个端口不同域名如何配置

nginx同一个端口不同域名如何配置

server 配置 Nginx com 456    来源:    2025-04-05

Nginx 同一端口不同域名配置指南

要在Nginx上配置同一端口(通常是80或443)服务多个不同域名的网站,可以使用Nginx的"server_name"指令来实现基于名称的虚拟主机。

基本配置方法

  1. 在Nginx配置目录(通常是/etc/nginx/conf.d//etc/nginx/sites-available/)中为每个网站创建单独的配置文件,或者在一个配置文件中包含多个server块。

  2. 每个server块对应一个域名,使用server_name指令指定该块对应的域名。

示例配置

# 第一个域名 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;
    }
}

# 第二个域名 test.com 的配置
server {
    listen 80;
    server_name test.com www.test.com;

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

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

HTTPS配置

对于HTTPS(443端口),配置类似,但需要指定SSL证书:

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

    ssl_certificate /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;

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

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

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

    ssl_certificate /path/to/test.com.crt;
    ssl_certificate_key /path/to/test.com.key;

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

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

默认服务器

可以设置一个默认服务器来处理不匹配任何server_name的请求:

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

配置完成后

  1. 测试Nginx配置是否正确:

    sudo nginx -t
    
  2. 重新加载Nginx配置:

    sudo systemctl reload nginx
    

注意事项

  1. 确保DNS记录已将域名解析到服务器IP
  2. 每个域名需要有自己的SSL证书(或使用通配符证书)
  3. 对于HTTPS,建议配置HTTP到HTTPS的重定向
  4. 确保服务器资源足够处理所有网站的流量

这种基于名称的虚拟主机技术允许你在同一IP地址和端口上托管多个网站,是现代Web服务器的基础功能之一。