五十六、【Linux系统nginx服务】nginx虚拟主机实现
虚拟主机技术全景图
虚拟主机类型深度对比
特性 | 基于域名 | 基于IP | 基于端口 | 最佳适用场景 |
---|---|---|---|---|
IP资源需求 | 1个IP | 多个IP | 1个IP | 域名型:IP资源紧张 IP型:需要独立IP服务 |
访问方式 | 域名访问 | IP直接访问 | IP:端口访问 | IP型:内部系统直接调用 |
SSL支持 | 支持SNI | 原生支持 | 支持 | IP型:传统SSL证书绑定 |
SEO影响 | 无影响 | 无独立域名 | 需处理端口规范 | 域名型:公开网站首选 |
配置复杂度 | ★★☆☆☆ | ★★★☆☆ | ★★☆☆☆ | 端口型:测试环境快速部署 |
维护成本 | 中 | 高 | 低 | 端口型:临时服务 |
安全性 | 依赖域名解析 | 直接暴露IP | 端口可隐藏 | IP型:减少DNS依赖风险 |
典型应用 | 企业官网集群 | 独立SSL服务 | 开发测试环境 | 按需求选择 |
功能作用详解
1. 基于域名的虚拟主机
功能说明
- 同一IP和端口(80)服务多个网站
- 通过HTTP请求头中的
Host
字段区分站点 - 需配置DNS解析或本地hosts文件
应用场景
- 单服务器托管多个域名网站
- 节省IP地址资源
2. 基于IP的虚拟主机
功能说明
- 每个网站使用独立的IP地址
- 不依赖域名解析,直接通过IP访问
- 需服务器配置多个IP地址
应用场景
- 需要直接IP访问的服务
- SSL证书绑定IP的特殊需求
3. 基于端口的虚拟主机
功能说明
- 同一IP通过不同端口提供多服务
- 需在URL中显式指定端口号
- 需防火墙开放对应端口
应用场景
- 测试环境运行多个服务
- 内部管理接口隔离
- HTTP服务与API服务分离
一、基础环境准备
# 安装Nginx
[root@localhost ~]# yum install nginx -y# 创建站点目录
[root@localhost ~]# mkdir -p /var/www/{domain,ip,port}# 创建测试页面
[root@localhost ~]# echo "Domain-based Virtual Host" > /var/www/domain/index.html
[root@localhost ~]# echo "IP-based Virtual Host" > /var/www/ip/index.html
[root@localhost ~]# echo "Port-based Virtual Host" > /var/www/port/index.html
二、三种虚拟主机配置
1. 基于域名 (example.com / test.com)
# 创建域名配置
[root@localhost ~]# cat > /etc/nginx/conf.d/domain.conf <<EOF
server {listen 80;server_name example.com;root /var/www/domain;index index.html;
}
server {listen 80;server_name test.com;root /var/www/domain; # 同一服务器不同内容目录
}
EOF
2. 基于IP (192.168.1.100 / 192.168.1.200)
# 添加临时IP地址(永久IP需修改网络配置)
[root@localhost ~]# ip addr add 192.168.1.200/24 dev eth0# 创建IP配置
[root@localhost ~]# cat > /etc/nginx/conf.d/ip.conf <<EOF
server {listen 192.168.1.100:80;root /var/www/ip;index index.html;
}
server {listen 192.168.1.200:80;root /var/www/ip; # 同目录演示
}
EOF
3. 基于端口 (8080 / 8081)
# 创建端口配置
[root@localhost ~]# cat > /etc/nginx/conf.d/port.conf <<EOF
server {listen 8080;server_name localhost;root /var/www/port;index index.html;
}
server {listen 8081;server_name localhost;root /var/www/port; # 同目录演示
}
EOF# 开放防火墙端口
[root@localhost ~]# firewall-cmd --add-port={8080,8081}/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
4. 重载Nginx配置
[root@localhost ~]# nginx -t # 测试配置
[root@localhost ~]# systemctl reload nginx
三、验证配置
# 域名测试(需配置hosts或DNS解析)
[root@localhost ~]# curl -H "Host: example.com" http://localhost
[root@localhost ~]# curl -H "Host: test.com" http://localhost# IP测试
[root@localhost ~]# curl http://192.168.1.100
[root@localhost ~]# curl http://192.168.1.200# 端口测试
[root@localhost ~]# curl http://localhost:8080
[root@localhost ~]# curl http://localhost:8081
四、命令总结表格
演示命令 | 功能描述 | 关键参数说明 |
---|---|---|
server_name example.com; | 设置域名虚拟主机 | 在80端口区分不同域名 |
listen 192.168.1.100:80; | 设置IP虚拟主机 | 绑定指定IP地址 |
listen 8080; | 设置端口虚拟主机 | 通过端口区分站点 |
firewall-cmd --add-port=8080/tcp | 开放防火墙端口 | 允许外部访问非标准端口 |
curl -H "Host: example.com" http://localhost | 域名访问测试 | 模拟域名请求 |
五、故障排查命令
命令 | 功能 |
---|---|
nginx -t | 检查配置文件语法 |
journalctl -u nginx | 查看服务日志 |
`ss -tulnp | grep nginx` |
curl -Iv http://example.com | 跟踪请求头 |
六、性能优化与安全加固
优化方向 | 域名型 | IP型 | 端口型 | 实施建议 |
---|---|---|---|---|
连接复用 | keepalive | keepalive | keepalive | 统一开启 |
缓存策略 | 按域名独立 | 按IP独立 | 按端口独立 | 独立缓存区 |
压缩优化 | 按内容类型 | 按内容类型 | 按内容类型 | 文本资源必开 |
访问控制 | 域名白名单 | IP白名单 | IP+端口控制 | 多层防护 |
日志分割 | 按域名分割 | 按IP分割 | 按端口分割 | 便于审计 |