【问题标题】:Treat URL path as virtual host using Apache使用 Apache 将 URL 路径视为虚拟主机
【发布时间】:2011-10-17 06:57:41
【问题描述】:

问题是我只有一个域名,需要在其上运行三种不同的产品(其中两种基于 PHP,一种基于 Python)。所以我需要将 URL 中的路径视为不同的虚拟主机;即:

www.domain.com/first_URL/
www.domain.com/second_URL/
www.domain.com/third_URL/

第一个到第三个将充当单独的虚拟主机。

我该怎么做?

【问题讨论】:

    标签: url apache2 virtualhost


    【解决方案1】:

    这可以通过使用 Alias 或 AliasMatch 指令来实现:

    Alias /first_url/ /var/www/first_url_resources
    

    更多详情请见Apache Module mod_alias

    【讨论】:

    • 旧答案甚至更旧的问题,我知道,但这正是我所追求的单行解决方案类型。当您不确定要查找的内容的语法或上下文时,搜索某些内容并不容易。谢谢!
    • 还有一点需要注意:Alias /url /path/to/dir 指令后面可以跟 <Directory /path/to/dir/> 指令以允许覆盖该特定目录。
    • 这并没有回答问题,因为Alias 指令不会创建虚拟主机。因此,所有只能在虚拟主机中使用的指令(例如SuexecUserGroup)都不能与此Alias 解决方法一起使用。
    【解决方案2】:

    Apache 中的“虚拟主机”仅适用于域名,而不适用于部分路径。你无法实现你想要的。

    【讨论】:

    • 大多数人认为虚拟主机设置在最终用户功能方面类似于反向代理。这个问题可以这样解释。 Apache可以做反向代理。
    【解决方案3】:

    这个例子解释了如何为每个目录分配不同的 PHP 版本。它还可以通过在特定端口上以fast_cgi 的身份运行 Python 解释器来添加 Python 支持。

    出于示例的目的,我假设每个 PHP 版本都有一个单独的目录,并且根据运行它们的 PHP 版本命名,但这可以调整。

    mkdir /home/user/www
    mkdir /home/user/www/5.6.5
    mkdir /home/user/www/7.0.2
    mkdir /home/user/www/7.0.4
    mkdir /home/user/www/7.0.6
    

    创建指向应由不同 PHP 版本处理的目录的符号链接:

    sudo ln -s /home/user/www/7.0.2/ /var/www/html/7.0.2
    sudo ln -s /home/user/www/7.0.4/ /var/www/html/7.0.4
    sudo ln -s /home/user/www/7.0.6/ /var/www/html/7.0.6
    

    然后将以下行添加到默认虚拟主机*:80中的/etc/apache2/sites-enabled/000-default.conf中

    (根据您的需要,您可以在此处为需要 Python 的网站多设置一个 FastCGI 处理程序)。我假设 PHP 5.6.5 在端口 9999 上运行,7.0.2 在端口 9998 上运行,等等。

    DirectoryIndex index.html index.php
    ProxyPassMatch ^/5.6.5/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9999/var/www/html/
    ProxyPassMatch ^/7.0.2/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9998/var/www/html/
    ProxyPassMatch ^/7.0.4/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9997/var/www/html/
    ProxyPassMatch ^/7.0.6/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9996/var/www/html/
    

    假设您的服务器由example.com 指向,您可以在以下位置对其进行测试:

    http://example.com/5.6.5/
    http://example.com/7.0.2/
    http://example.com/7.0.4/
    http://example.com/7.0.6/
    

    【讨论】:

    • 这个例子看起来过于复杂了。
    【解决方案4】:

    您可能想对 apache-config 指令做一些事情,因为您需要一个虚拟主机解决方案。 Apache 只能使用 virtualHosts 作为实际域,如 cweiske explained

    这种情况下的解决方案是在您正在使用的子目录中使用.htaccess 文件,或者在您当前的(虚拟)主机配置中设置一个<Directory "/web/root/subdir">..</Directory> 块。

    如果您本身想将它们作为 VirtualHosts ('app1.domain.org') 运行,您也可以选择将它们托管在不同的子域上。

    【讨论】:

    • 嗯,问题是我只有 1 个域,无法添加更多子域。我需要在上面运行 3 个不同的应用程序。目录指令不是一个选项,因为我不能在其中放置 WSGI 初始化脚本。
    • @Ruslan:在没有任何 WSGI 经验的情况下,快速浏览文档表明您可以在 WSGIScriptAlias /app1 /usr/local/wsgi/scripts/app1.wsgi 后跟 WSGIScriptAlias /app2 /usr/local/wsgi/scripts/app2.wsgi 等。不确定这是否足够?
    • 在常规虚拟主机配置中? (不是上面建议的目录块之一)。 scriptAlias 可以针对不同的路径多次调用。
    • 抱歉,我打错了
    猜你喜欢
    • 2015-03-06
    • 2014-12-24
    • 2011-03-25
    • 2020-09-28
    • 2013-10-18
    • 2013-04-04
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多