无需使用虚拟主机在Windows系统Apache服务器部署两个Web应用的方案咨询
无需使用虚拟主机在Windows系统Apache服务器部署两个Web应用的方案咨询
嘿,我完全理解你们的顾虑——修改客户机的hosts文件不仅可能涉及权限问题,还容易给非技术用户带来困惑,确实不是理想的选择。不用虚拟主机的话,有几个简单可靠的方案能帮你们在同一台Windows Apache上搞定两个Web应用,我给你详细说说:
方案一:基于URL路径的别名映射(最推荐)
这个方案是把两个应用分别绑定到localhost的不同子路径下,比如localhost/app1对应第一个应用,localhost/app2对应第二个,完全不需要改hosts,也不用虚拟主机,配置起来很直观。
配置步骤:
- 打开Apache的主配置文件
httpd.conf,先确认mod_alias模块已经启用(一般默认是开的,找到LoadModule alias_module modules/mod_alias.so这行,如果前面有#注释就去掉)。 - 在文件末尾添加以下配置,替换成你们实际的应用路径:
# 映射第一个应用到 /app1 路径 Alias /app1 "C:/YourSoftware/FirstWebApp" <Directory "C:/YourSoftware/FirstWebApp"> AllowOverride All Require all granted # 如果应用是PHP、Python这类动态语言,记得确保对应的Apache模块已经配置生效 # 比如PHP的话,要保证php_module已经加载,并且有对应的Handler配置 </Directory> # 映射第二个应用到 /app2 路径 Alias /app2 "C:/YourSoftware/SecondWebApp" <Directory "C:/YourSoftware/SecondWebApp"> AllowOverride All Require all granted # 同样根据应用类型添加对应的模块配置 </Directory>
- 重启Apache服务,之后嵌入式浏览器访问
localhost/app1就能打开第一个应用,访问localhost/app2打开第二个。
注意:如果应用内部有硬编码的绝对路径(比如资源引用写死了/css/style.css),需要改成相对路径,或者调整为/app1/css/style.css这类带前缀的路径,避免资源加载错误。
方案二:基于不同端口部署
如果你们的应用依赖根路径(没法改路径前缀),可以给第二个应用分配一个新的端口,比如第一个用默认的80端口,第二个用8080或者其他未被占用的端口,全程不需要修改hosts文件。
配置步骤:
- 打开
httpd.conf,找到Listen指令,原来应该有Listen 80,再加一行新的监听端口:
Listen 80 Listen 8080
- 添加端口对应的应用目录配置(这里用的是端口绑定的虚拟主机,但不需要设置ServerName,完全不用改hosts):
# 80端口对应第一个应用 <VirtualHost *:80> DocumentRoot "C:/YourSoftware/FirstWebApp" <Directory "C:/YourSoftware/FirstWebApp"> AllowOverride All Require all granted </Directory> </VirtualHost> # 8080端口对应第二个应用 <VirtualHost *:8080> DocumentRoot "C:/YourSoftware/SecondWebApp" <Directory "C:/YourSoftware/SecondWebApp"> AllowOverride All Require all granted </Directory> </VirtualHost>
- 重启Apache后,嵌入式浏览器访问
localhost打开第一个应用,访问localhost:8080打开第二个。
注意:选择端口的时候要避开系统已占用的端口(比如3389、443这些),并且要确保客户机的防火墙允许该端口的入站请求,一般8080这类常用端口是没问题的。
方案三:使用回环地址的不同别名(不推荐,略复杂)
Windows的回环地址不止127.0.0.1,还有127.0.0.2、127.0.0.3等,这些都指向本地,不需要修改hosts。你可以让Apache监听这些不同的回环地址,每个地址对应一个应用。不过这个方案配置起来比前两个麻烦,而且嵌入式浏览器需要访问不同的IP(比如127.0.0.2),不如前两个直观,所以除非有特殊需求,不推荐。
备注:内容来源于stack exchange,提问作者DecentWig




