上一篇
nginx实现多虚拟主机配置文件
- 虚拟主机
- 2025-08-23
- 4
inx通过server块配置不同域名/IP及根目录,实现多
基础概念
Nginx通过在主配置文件(通常是/etc/nginx/nginx.conf
或/usr/local/nginx/conf/nginx.conf
)中定义多个server
块来实现多虚拟主机,每个server
块对应一个独立的网站站点,基于客户端请求头中的Host
字段进行匹配和路由,以下是具体实施步骤:
配置步骤详解
操作环节 | 示例代码片段 | |
---|---|---|
编辑主文件 | 在http{} 区域内添加多个server 段落,每个代表一个虚拟主机 |
http { ... server { ... } server { ... } ... } |
设置监听端口 | 所有虚拟主机共享同一端口(如80/443),Nginx根据域名自动区分流量 | listen 80; (所有主机共用)或为特定IP绑定端口(例:listen 192.168.1.1:80; ) |
定义域名解析规则 | 使用server_name 指定允许访问该站点的完整合格域名(FQDN) |
server_name example.com www.example.com; |
关联网站根目录 | 通过root 指令设置站点静态资源的存储路径 |
root /var/www/html/site1; (对应第一个站点)、root /data/webapps/blog; (第二个站点) |
日志分离管理 | 为不同站点分配独立访问日志与错误日志,便于故障排查 | access_log /var/log/nginx/site1_access.log combined; error_log /var/log/nginx/site1_error.log; |
支持 | 若涉及PHP等脚本语言,需配合location 指令配置FastCGI代理参数 |
location ~ .php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; include fastcgi_params; }} |
高级优化技巧
SSL证书部署
为每个域名申请独立证书并启用HTTPS:
server { listen 443 ssl http2; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; ... }
注:推荐使用Let’s Encrypt免费证书,并通过ACME协议自动续签。
路径别名映射
利用alias
实现非标准目录结构的文件服务:
location /images/ { alias /storage/uploads/2025/; }
此配置可将URL路径/images/
重定向到服务器本地的/storage/uploads/2025/
物理路径。
负载均衡扩展
当单台服务器性能不足时,可在upstream
模块定义后端集群:
upstream backend_cluster { server 10.0.0.101 weight=3; server 10.0.0.102 max_fails=2; } server { location /api/ { proxy_pass http://backend_cluster; } }
常见问题与解答
Q1: 为什么修改配置后新站点仍然无法访问?
解决方案:依次执行以下检查流程:
- 确保语法正确性 → 运行
nginx -t
进行校验; - 重新加载配置 → 执行
nginx -s reload
命令; - 防火墙放行端口 → 使用
ufw allow 80/tcp
和ufw allow 443/tcp
; - SELinux策略调整(CentOS特有)→ 设置
setsebool httpd_can_network_connect on
。
Q2: 如何快速定位哪个站点占用过多资源?
监控方法:结合Prometheus+Grafana采集指标,重点关注:
nginx.stub_status
模块提供的实时连接数统计;ngx_http_request_count
计数器分析各location的流量分布;- worker进程CPU利用率(通过
top -Hp <PID>
查看)。
通过上述配置体系与调试方法,您可以轻松构建高可用、易维护的多租