目前我有一个Apache2侦听端口80.这是在/etc/apache2/listen.confconfiguration
在/etc/apache2/conf.d我有正常的configuration文件和:
site1.conf , site2.conf和site3.conf文件。
每个conf文件configuration非常相似:
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>
所以去我的浏览器,我可以input:
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
我想要的是:
路由器只有8080和8888打开和路由。
任何想法我怎么能做到这一点?
谢谢
我从来没有尝试过,我只是testing使用Apaches DocumentRoot指令没有一个相应的ServerName命名主机 – 我得到它在我的机器上工作。
这个想法是尝试让虚拟主机匹配一个文件path,尝试replace这个:
Alias /site2 /home/user/www/site2/
同
DocumentRoot /home/user/www/site2
Apache文档说
应该指定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>
尝试一个虚拟主机的网站组合,如果它的作品重复其他。 – 不要忘记在修改虚拟主机之后重新启动apache – 如果更改了Listen指令,则可能必须重新启动虚拟主机。
Apache有一个在不同端口上运行多个网站的指南 。
这是基于Apache 2.2和文档说
[您必须使用] NameVirtualHost xxxx:8080 – 如果没有NameVirtualHost名称:端口,或者您尝试使用Listen指令,则您的configuration将不起作用。
我在没有NameVirtualHost Ubuntu上进行了2.4testing,对我来说工作得很好