Apache – 多个站点 – 一个服务器 – 不同的端口 – Linux

目前我有一个Apache2侦听端口80.这是在/etc/apache2/listen.confconfiguration

在/etc/apache2/conf.d我有正常的configuration文件和:

site1.confsite2.confsite3.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

我想要的是:

  • 站点1只能从端口80获得
  • 站点2只能从端口8080获得
  • 站点3只能从端口8888获得

路由器只有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,对我来说工作得很好