在单个Apache实例上配置多个网站

时间:2015-04-23 19:40:32

标签: apache

我正在寻找一种在单个服务器上托管多个网站的方法。目前,我使用反向代理使用以下方法托管其中两个网站:

我在/ var / www / html文件夹中有一个php站点,在localhost:3015上运行了一个nodejs应用程序。我的apache2配置如下: -

<VirtualHost *:80>
        ServerName site1.example.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://localhost:3015/
        ProxyPassReverse / http://localhost:3015/
        ServerName site2.example.com
</VirtualHost>

现在我还希望在以下网站上托管几个旧网站:

site1.example.com/archives/2014,13等

site2.example.com/archives/2014,13等。

在site1.example.com的情况下,我可以使用别名,因为托管的站点是一个php站点。 在我使用反向代理的第二种情况下,什么是托管php网站的最佳方式。

另外,请建议一种方法,可以轻松添加新网站,并将旧网站移动到存档文件夹。这些网站可能在django,ROR等等。

这甚至可能吗?

2 个答案:

答案 0 :(得分:0)

这可能不是你想要的,但试一试。这是我在dev VM中使用的Apache配置的变体,它是为通配符域托管设置的。我没有专门测试过这个配置,但你应该能够调整它以满足你的需求。

这基本上告诉Apache如何查找以下网站:

  • site1.example.com => /var/www/html/site1/public_html
  • site2.example.com => /var/www/html/site1/public_html
  • 2014.archive.site1.example.com => /var/www/html/site1/public_html/archives/2014

    <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
    
        <Directory />
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    
        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    
        DirectoryIndex index.html index.php
    
        RewriteEngine on
    
        RewriteMap lowercase int:tolower
    
        # *.example.com
        RewriteCond ${lowercase:%{SERVER_NAME}} ^[a-zA-Z0-9-]+\.example\.com$
        RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
        RewriteRule ^([a-zA-Z0-9-]+)\.example\.com/(.*) /var/www/html/$1/public_html/$2 
    
        # *.archive.*.example.com
        RewriteCond ${lowercase:%{SERVER_NAME}} ^[a-zA-Z0-9-]+\.archive\.[a-zA-Z0-9-]+\.example\.com$
        RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]
        RewriteRule ^([a-zA-Z0-9-]+)\.archive\.([a-zA-Z0-9-]+)\.example\.com/(.*) /var/www/html/$2/public_html/archives/$1/$3
    </VirtualHost>
    

如果这不是你要求的,请告诉我。

答案 1 :(得分:0)

我终于找到了一种方法来做同样的事情。您需要做的是托管不同端口的所有站点:

<VirtualHost *:80>    
        ProxyPreserveHost On

        ProxyPass /archive/2014/ http://localhost:3014/
        ProxyPassReverse /archive/2014/ http://localhost:3014/

        ProxyPass / http://localhost:3015/
        ProxyPassReverse / http://localhost:3015/

        ServerName site1.example.com    
</VirtualHost>
<VirtualHost *:80>
        ProxyPreserveHost On

        ProxyPass /archive/2014/ http://localhost:4014/
        ProxyPassReverse /archive/2014/ http://localhost:4014/

        ProxyPass / http://localhost:4015/
        ProxyPassReverse / http://localhost:4015/

        ServerName site2.example.com
</VirtualHost>

现在您可以在apache2中配置default.conf,如下所示:

0 * * * * php5 -q /home/curl_call.php >> /home/curl_call.txt

这适用于任何平台上的网站,目前我的site3和site4是php,site1和site2分别是node和django。您可能需要使用网址和链接稍微一点,以使一切工作完美。