我当前正在尝试在Apache Web服务器上部署Django 2.0应用。但是,由于我的虚拟主机配置覆盖了其他项目(Ruby和PHP WebApp)使用的其他虚拟主机,因此在配置它时遇到了困难。目前我们只有一个域名,因此我无法使用其他域名托管我的应用。
是否可以使用Apache虚拟主机通过一个域名提供不同类型的应用程序?
答案 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个选择:
DocumentRoot
下,并使用Alias
。创建/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值必须与目录值匹配。
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
在这里可以使用多个VirtualHost。但是您必须能够创建子域。这可以通过DNS配置或您的托管服务提供商完成。
您可以设置http://ruby.example.com,http://php.example.com,http://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”。
所有这些值都可以随意更改,这只是一个解释概念的示例。