sco*_*tts 59 apache virtualhost
我有一个冗长而复杂的<VirtualHost>指令列表,我必须将它们复制到端口80和443的单独<VirtualHost>组中,因为我使用的是SSL.每当我更新我的mod_rewrite规则时,我必须记住在两个地方都这样做,否则我会破坏我的应用程序...这个重复是在寻找麻烦.有没有办法将这些组合或别名 - 两者之间的唯一区别是端口443版本包含SSLEngine,SSLCertificateFile等.
我的<Virtualhost>包含许多mod_rewrite规则,LocationMatch规则,CGI指令等.
另外,我不能使用.htaccess文件.
sfo*_*sen 50
你不能使用include指令来包含通用规则.这里
例如.:
<VirtualHost _default_:80>
...
include conf/common_rule.conf
</VirtualHost>
<VirtualHost _default_:*>
...
include conf/common_rule.conf
</VirtualHost>
<VirtualHost _default_:443>
... #SSL rules
include conf/common_rule.conf
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
Sam*_*era 34
您可以在单个Virtualhost指令中使用任何#个主机和端口.
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我用过.
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
很抱歉打破这样的老帖子,但是为了帮助其他Google员工,我想分享我处理它的方式:
我有一对夫妇在我的本地虚拟主机的,说:localhost,foo.com,bar.com
这是我的笔记本电脑上的本地主机站点(macosx)我可以使用自签名证书,因此所有虚拟机的ssl-part都是相同的...
我做的是这样的:
我创建了目录/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
Run Code Online (Sandbox Code Playgroud)
答/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
Run Code Online (Sandbox Code Playgroud)
答/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
Run Code Online (Sandbox Code Playgroud)
最后一个/etc/apache2/extra/vhosts/ssl.conf:
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
Run Code Online (Sandbox Code Playgroud)
在我的/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>
Run Code Online (Sandbox Code Playgroud)
另一种不使用的选项Include是使用Macro(因此您可以将其全部保存在一个文件中)。
首先启用宏模块:
a2enmod macro
Run Code Online (Sandbox Code Playgroud)
然后将您共享的内容放在一个宏中,并将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>
Run Code Online (Sandbox Code Playgroud)
宏也可以带参数,并在包含的其他文件中定义;所以你可以像使用函数一样使用它们,并在你的 Apache 配置文件中节省大量重复。
请参阅此处了解更多详情:
https://httpd.apache.org/docs/2.4/mod/mod_macro.html