【发布时间】:2010-10-15 07:54:21
【问题描述】:
我有一个长而复杂的
我的
另外,我不能使用 .htaccess 文件。
【问题讨论】:
标签: apache virtualhost
我有一个长而复杂的
我的
另外,我不能使用 .htaccess 文件。
【问题讨论】:
标签: apache virtualhost
【讨论】:
include 指令的 here's an updated version,这是您的答案中第一个链接到的资源
您可以在单个 Virtualhost 指令中使用任意数量的主机和端口。
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
就我而言,我使用过。
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt
</VirtualHost>
【讨论】:
<VirtualHost *:80 *:443> 块,我假设你可以为<VirtualHost *:443> 设置一个单独的块,它只包含 SSL 内容。对吗?
很抱歉冒出这样的旧帖子,但为了帮助其他 Google 员工,我想分享一下我是如何处理它的:
我的本地主机上有几个虚拟主机,例如:localhost、foo.com、bar.com
这是我笔记本电脑 (macosx) 上的本地主机站点,我可以使用自签名证书,因此所有虚拟主机的 ssl 部分都是相同的...
我做的是这样的:
我创建了目录/etc/apache2/extra/vhosts/。
我创建了一个/etc/apache2/extra/vhosts/localhost.conf:
ServerName localhost
DocumentRoot "/www/localhost"
<Directory /www/localhost>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/localhost.error_log"
CustomLog "/var/log/apache2/localhost.access_log" common
/etc/apache2/extra/vhosts/foo.conf:
ServerName foo.com
DocumentRoot "/www/foo.com"
<Directory /www/foo.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/foo.com.error_log"
CustomLog "/var/log/apache2/foo.com.access_log" common
/etc/apache2/extra/vhosts/bar.conf:
ServerName bar.com
DocumentRoot "/www/bar.com"
<Directory /www/bar.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/bar.com.error_log"
CustomLog "/var/log/apache2/bar.com.access_log" common
最后是/etc/apache2/extra/vhosts/ssl.conf:
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
在我的/etc/apache2/extra/httpd-vhosts.conf:
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/localhost.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/localhost.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/foo.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/foo.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/bar.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/bar.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
【讨论】:
另一个不使用Include 的选项是使用Macro(这样您就可以将其全部保存在一个文件中)。
首先启用宏模块:
a2enmod macro
然后将您共享的内容放入宏中,并从您的虚拟主机中use:
<Macro SharedStuff>
ServerName example.com
ServerAdmin example@example.com
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
宏也可以带参数,并在包含的其他文件中定义;所以你可以像使用函数一样使用它们,并在你的 Apache 配置文件中节省大量重复。
更多详情请看这里:
【讨论】:
您可以将通用配置放入单独的文件中,并将其包含在两个 VirtualHost 段中。例如:
<VirtualHost 192.168.1.2:80>
Include conf/common.conf
</VirtualHost>
<VirtualHost 192.168.1.2:443>
Include conf/common.conf
(put your ssl specific cofiguration stuff here ...)
</VirtualHost>
【讨论】:
您还可以在容器内而不是在容器内指定通用指令。这就是我所做的,主要是因为我更喜欢目录级别而不是服务器级别的 mod_rewrite 规则,但它也应该同样适用于您。
【讨论】: