目前我有一个 Apache2 在监听端口 80。这是在 /etc/apache2/listen.conf 中配置的
在 /etc/apache2/conf.d 中我有常规配置文件和:
站点1.conf, 站点2.conf和 站点3.conf 文件。
每个配置文件的配置非常相似:
Alias /site1 /home/user/www/site1/
AddHandler cgi-script cgi
<Directory "/home/user/www/site1/">
AllowOverride All
Options +ExecCGI
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
DirectoryIndex index.cgi
</Directory>
因此,我可以进入浏览器输入:
http://10.10.0.1/site1并获取 site1,http://10.10.0.1/site2并获取 site2 等
这在内部运行良好。
我现在想允许 site2 和 site3 被外部访问。
如果我在路由器上打开端口 80 并将其路由到 10.10.0.1,那么所有站点都可用。
我已将 8080 和 8888 添加到 /etc/listen.conf,并将 site2.conf 编辑为:
<VirtualHost *:8080>
Alias /site2 /home/user/www/site2/
AddHandler cgi-script cgi
<Directory "/home/user/www/site2/">
AllowOverride All
Options +ExecCGI
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
DirectoryIndex index.cgi
</Directory>
</VirtualHost>
和 site3 相同,但将 VirtualHost 设置为 *:8888
这有效。我只能在 8080 上访问 site2,只能在 8888 上访问 site3但
我还可以通过端口 8080 和端口 8888 访问 site1
我想要的是:
- site1 仅可从端口 80 访问
- site2 仅可从端口 8080 访问
- site3 仅可从端口 8888 访问
路由器只开放了8080和8888并进行路由。
知道该怎么做吗?
谢谢
答案1
我从未尝试过,我只是使用DocumentRoot
没有相应命名主机的 Apaches 指令进行了测试ServerName
- 并且在我的计算机上成功运行。
这个想法是尝试让虚拟主机与文件路径匹配,尝试替换此内容:
Alias /site2 /home/user/www/site2/
和
DocumentRoot /home/user/www/site2
指定的 DocumentRoot 不应带有尾部斜杠。
所以你得到
<VirtualHost *:8080>
DocumentRoot /home/user/www/site2
AddHandler cgi-script cgi
<Directory "/home/user/www/site2/">
AllowOverride All
Options +ExecCGI
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
DirectoryIndex index.cgi
</Directory>
</VirtualHost>
在一个虚拟主机网站组合上尝试,如果有效则在其他组合上重复。 - 修改 vhosts 后不要忘记重新启动 apache - 如果更改指令,则可能必须这样做Listen
。
Apache 有在不同端口上运行多个网站的指南。
这是基于 apache 2.2 的,文档说
[您必须使用] NameVirtualHost xxxx:8080 - 如果没有 NameVirtualHost 名称:端口或者您尝试使用 Listen 指令,您的配置将不起作用。
我在 Ubuntu 2.4 上测试过,没有这个NameVirtualHost
,运行良好