上一篇
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>查看)。
通过上述配置体系与调试方法,您可以轻松构建高可用、易维护的多租
