nginx通过多个server块实现多虚拟主机,采用域名(server_name)、端口(listen)或ip地址区分请求;推荐将配置分离至sites-available/sites-enabled或conf.d目录,配合include引入,并通过nginx -t、-t和reload确保安全生效。

Nginx 通过在配置中定义多个 server 块来实现多个虚拟主机,每个 server 块代表一个独立站点。关键不在于“加多少块”,而在于如何组织这些块,让它们互不冲突、清晰可维护。
配置文件层级与组织方式
Nginx 主配置入口是 `/etc/nginx/nginx.conf`,它通常只做全局设置(如 worker 进程、日志格式、MIME 类型),再用 `include` 引入其他配置片段。 实际的虚拟主机配置一般不直接写在 `nginx.conf` 里,而是放在以下位置之一: - `/etc/nginx/sites-available/`:存放所有站点配置文件(未启用) - `/etc/nginx/sites-enabled/`:存放已启用的配置(通常是 `sites-available` 中文件的软链接) - `/etc/nginx/conf.d/`:按 `.conf` 后缀自动加载,适合简单部署或容器环境这样分离后,增删一个站点只需操作单个文件,不影响整体结构。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
三种主流虚拟主机区分方式
Nginx 区分不同虚拟主机,靠的是请求到达时的匹配维度,主要有三类:-
基于域名(最常用)
用server_name匹配 HTTP 请求头中的Host字段。例如:server { listen 80; server_name example.com www.example.com; root /var/www/example; index index.html; } -
基于端口(调试/内网常用)
不依赖域名解析,直接用listen端口号隔离。比如:server { listen 8080; server_name localhost; root /var/www/app-a; index index-a.html; } server { listen 8081; server_name localhost; root /var/www/app-b; index dashboard.php; } -
基于 IP 地址(较少见,需多 IP 或别名)
绑定到特定 IP + 端口,适用于有多个公网 IP 的服务器:server { listen 192.168.1.100:80; server_name _; root /var/www/site-ip1; }
避免常见冲突的关键点
多个 `server` 块共存时,容易因配置重叠导致启动失败或请求错配:- 同一
listen地址+端口不能重复(如两个listen 80;且无server_name差异,会报错) - 若多个
server都监听80且server_name都是_或空,Nginx 默认选第一个为“默认主机” - 使用通配符或正则
server_name时,注意匹配优先级:精确匹配 > 通配符 > 正则 - 大量域名站点需调大哈希参数,防止
server_names_hash_bucket_size不足:http { server_names_hash_bucket_size 256; server_names_hash_max_size 4096; }
配置生效与验证流程
每次修改后务必走完闭环步骤: - 用 `nginx -t` 检查语法是否正确 - 用 `nginx -T` 查看最终合并后的完整配置(含所有 `include`) - 用 `systemctl reload nginx` 平滑重载(不中断连接) - 测试访问时,注意客户端是否能正确解析域名(如本地测试需改 `/etc/hosts`)或是否带对端口(如 `http://localhost:8081`)不复杂但容易忽略。










