如何使用Apache中的一个域名为不同的Web应用程序提供服务?

时间:2018-07-25 00:02:32

标签: ruby django python-3.x apache virtualhost

我当前正在尝试在Apache Web服务器上部署Django 2.0应用。但是,由于我的虚拟主机配置覆盖了其他项目(Ruby和PHP WebApp)使用的其他虚拟主机,因此在配置它时遇到了困难。目前我们只有一个域名,因此我无法使用其他域名托管我的应用。

是否可以使用Apache虚拟主机通过一个域名提供不同类型的应用程序?

1 个答案:

答案 0 :(得分:0)

由于只能拥有1个VirtualHost(一个域,一个端口,一个IP),因此无法创建附加VH。您需要以其他方式“分割”到不同应用程序的路径。

假设www.example.com:

ServerRoot "/some/path/apache"

[...] OTHER LoadModule directives [...]    
LoadModule alias_module modules/mod_alias.so

Listen *:80
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com

    # Logs
    LogLevel warn
    CustomLog "logs/www.example.com_access-log" combined
    ErrorLog "logs/www.example.com_error-log"

    # Index file.  Add as many as required for your applications
    <IfModule dir_module>    
        DirectoryIndex index.html
    </IfModule>

    # Where the documents are
    DocumentRoot "/some/path/apache/htdocs"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>

    <Directory "/some/path/apache/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

此VirtualHost是www.example.com域的基本配置。现在,您希望在该单一域下拥有Ruby,PHP WebApp和Django 2.0 App。您有3个选择:

  1. 每个应用程序获取1个域,此处不适用,这是您的问题。
  2. 在htdocs中创建一个子目录,并在URI中为每个应用程序创建一个路径。
  3. 将每个应用程序放在某个目录中,而不是放在DocumentRoot下,并使用Alias
  4. 使用子域。

  1. 不适用。

  1. 子目录和路径

创建/some/path/apache/htdocs/Ruby,放入您的Ruby应用。在这里。
将通过http://www.example.com/Ruby

访问

创建/some/path/apache/htdocs/PHPWebApps,放入您的PHP应用程序。在这里。
将通过http://www.example.com/PHPWebApps

访问

创建/some/path/apache/htdocs/Django,放入Django应用。在这里。
将通过http://www.example.com/Django

访问

URI值必须与目录值匹配。


  1. 在某些目录中,使用Alias

如果不需要,或者希望URI与目录名匹配(如2),请使用别名。

创建/SOME_DIR_FOR_Ruby,放入您的Ruby应用。在这里。
添加Alias "/Ruby" "/SOME-DIR-FOR-Ruby"
将通过http://www.example.com/Ruby

访问

创建/SOME_DIR_FOR_PHPWebApps,放入您的PHP应用程序。在这里。
添加Alias "/PHPWebApps" "/SOME_DIR_FOR_PHPWebApps"
将通过http://www.example.com/PHPWebApps

访问

创建/SOME_DIR_FOR_Django,放入Django应用。在这里。
添加Alias "/Django" "/SOME_DIR_FOR_Django"
将通过http://www.example.com/Django

访问
  1. 使用子域

在这里可以使用多个VirtualHost。但是您必须能够创建子域。这可以通过DNS配置或您的托管服务提供商完成。

您可以设置http://ruby.example.comhttp://php.example.comhttp://django.example.com。每个服务器都有1个VirtualHost,但都将被映射到DNS中的相同IP。

然后设置3个VH:

<VirtualHost *:80>
    ServerName ruby.example.com

    # Logs
    LogLevel warn
    CustomLog "logs/ruby.example.com_access-log" combined
    ErrorLog "logs/ruby.example.com_error-log"

    # Index file.  Add as many as required for your applications
    <IfModule dir_module>    
        DirectoryIndex index.html
    </IfModule>

    # Where the documents are
    DocumentRoot "/some/path/apache/htdocs/Ruby"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>

    <Directory "/some/path/apache/htdocs/Ruby">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName php.example.com

    # Logs
    LogLevel warn
    CustomLog "logs/php.example.com_access-log" combined
    ErrorLog "logs/php.example.com_error-log"

    # Index file.  Add as many as required for your applications
    <IfModule dir_module>    
        DirectoryIndex index.html
    </IfModule>

    # Where the documents are
    DocumentRoot "/some/path/apache/htdocs/php"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>

    <Directory "/some/path/apache/htdocs/php">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName django.example.com

    # Logs
    LogLevel warn
    CustomLog "logs/django.example.com_access-log" combined
    ErrorLog "logs/django.example.com_error-log"

    # Index file.  Add as many as required for your applications
    <IfModule dir_module>    
        DirectoryIndex index.html
    </IfModule>

    # Where the documents are
    DocumentRoot "/some/path/apache/htdocs/django"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>

    <Directory "/some/path/apache/htdocs/django">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

在Apache 2.2上,您必须添加NameVirtualHost *:80,在Apache 2.4中,什么也没有,它总是“ on”。

所有这些值都可以随意更改,这只是一个解释概念的示例。