Apache基于IP虚拟主机的核心是每个用户独占一个IP并单独配置<VirtualHost>块,通过系统绑定多IP、按IP拆分独立配置文件、目录路径含IP标识、权限设为750且禁用FollowSymLinks、启用后执行apache2ctl -S验证监听,实现网络层强隔离。
apache 通过 ip 虚拟主机隔离不同用户的站点,核心是让每个用户独占一个公网或内网 ip 地址,并为该 ip 单独配置 <virtualhost> 块。这种方式天然避免域名冲突、ssl 绑定干扰和请求路由歧义,适合多租户、高隔离要求或需独立 ssl 证书的场景。
一、前提:确保服务器绑定多个 IP 地址
IP 虚拟主机依赖真实网络层区分,所以必须先在系统层面为网卡配置多个 IP:
- Linux(如 Ubuntu/Rocky)执行:
ip addr add 192.168.1.10/24 dev eth0(临时);永久配置需写入/etc/netplan/或/etc/sysconfig/network-scripts/ifcfg-eth0:0 - 确认生效:
ip addr show应列出所有目标 IP,且 Apache 启动时能监听它们 - 防火墙(如 firewalld/ufw)需放行对应 IP 的 80/443 端口,不能只放行 0.0.0.0
二、为每个 IP 创建独立虚拟主机配置
不推荐混写在同一个文件里,应按 IP 拆分为单独配置(便于启用/禁用与权限审计):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 文件路径建议:
/etc/apache2/sites-available/ip-vhost-192.168.1.10.conf(Debian/Ubuntu)或/etc/httpd/conf.d/vhost-192.168.1.10.conf(RHEL/Rocky) - 配置内容严格限定 IP+端口,不使用
*或_default_:
<VirtualHost 192.168.1.10:80><br> ServerName 192.168.1.10<br> DocumentRoot /srv/www/192.168.1.10/<br> <Directory "/srv/www/192.168.1.10/"><br> Require all granted<br> Options -Indexes -FollowSymLinks<br> AllowOverride None<br> </Directory><br> ErrorLog ${APACHE_LOG_DIR}/192.168.1.10_error.log<br> CustomLog ${APACHE_LOG_DIR}/192.168.1.10_access.log combined<br> </VirtualHost> - HTTPS 配置同理,但需额外指定
SSLCertificateFile和SSLCertificateKeyFile,每个 IP 可配不同证书
三、目录与权限强制隔离
仅靠配置隔离不够,必须从文件系统层切断跨站访问可能:
- 根目录路径含 IP 标识,例如:
/srv/www/192.168.1.10/、/srv/www/192.168.1.11/,禁止共用/var/www/html - 主目录属主设为
root:www-data(Debian)或root:apache(RHEL),权限750—— Web 进程可读不可写,防止被篡改配置或上传恶意脚本 - 若用户需上传(如 CMS 媒体库),仅对子目录(如
/uploads/)设为www-data:www-data且权限750,并启用setgid保证新建文件继承组 - 全局禁用
FollowSymLinks,除非明确需要且已验证符号链接目标在本 IP 目录内
四、启用与验证要点
配置后不是简单重启就完事,关键检查项必须做:
- 启用配置:
a2ensite ip-vhost-192.168.1.10.conf(Debian)或确保conf.d/下文件被自动加载(RHEL) - 语法检查:
apache2ctl -t或httpd -t,必须返回Syntax OK - 查看实际加载的虚拟主机:
apache2ctl -S(Debian)或httpd -S(RHEL),输出中应清晰列出每个 IP 对应的192.168.1.10:80条目及 DocumentRoot - 测试访问:直接用浏览器访问
http://192.168.1.10,确认返回对应站点内容;同时尝试访问http://192.168.1.11,确保不跳转、不显示默认页

















