比较来自世界各地的卖家的域名和 IT 服务价格

Apache2 VirtualHost IfPort?

我想制作这样的虚拟主机:

<virtualhost *:443="" *:80="">
<ifport 443="">
SSLEngine On
...
</ifport>

...
</virtualhost>

因此,如果通过端口进行对主机的访问 443, 我想添加一些其他功能。 我可以以某种方式实现这一点,否则我需要划分它 2 虚拟主机?
已邀请:

诸葛浮云

赞同来自:

我用

mod_macro

在具有许多不同域的服务器上解决此问题 ... 安装模块 (根据操作系统而不同 / 分配), 然后配置类似的东西:

LoadModule macro_module         libexec/apache22/mod_macro.so

<macro $host="" vhost="">
<virtualhost *:80="">
DocumentRoot /usr/local/www/$host/data
ServerName $host
ServerAlias *.$host

ScriptAlias /cgi-bin/ "/usr/local/www/$host/cgi-bin/"
IncludeOptional etc/apache22/vhosts/$host
</virtualhost>
</macro>
<macro $host="" vhostssl="">
<virtualhost *:80="">
DocumentRoot /usr/local/www/$host/data
ServerName $host
ServerAlias *.$host

ScriptAlias /cgi-bin/ "/usr/local/www/$host/cgi-bin/"
IncludeOptional etc/apache22/vhosts/$host
</virtualhost>
<virtualhost *:443="">
DocumentRoot /usr/local/www/$host/data
ServerName $host
ServerAlias *.$host

SSLEngine on
SSLCertificateFile /usr/local/www/$host/ssl/$host.crt
SSLCertificateKeyFile /usr/local/www/$host/ssl/$host.key

ScriptAlias /cgi-bin/ "/usr/local/www/$host/cgi-bin/"
IncludeOptional etc/apache22/vhosts/$host
</virtualhost>
</macro>

Use VHostSSL example.com
Use VHost example.net

非常简单地添加新域; 在附带的文件中放置了特定于域的任何配置。

二哥

赞同来自:

另一种选择避免重复 - 将虚拟主机配置保存在特定文件中并将其拉出 include:


/etc/path/to/config/example.com.conf

:

ServerName example.com.conf
DocumentRoot /var/www/something
# Any other config you want to apply to both vhosts

和您的虚拟主机文件:

<virtualhost *:443="">
SSLEngine on
# Other SSL directives
Include /etc/path/to/config/example.com.conf
</virtualhost>
<virtualhost *:80="">
Include /etc/path/to/config/example.com.conf
</virtualhost>

风见雨下

赞同来自:

使用约翰的决定,我得到它

Apache 2 is starting ...
AH00526: Syntax error on line 53 of .../httpd-vhosts.conf:
SSLEngine not allowed here

当约翰说,最好的方法 - 有 2 虚拟主机; 但我的虚拟主机代码由超过 150 学期 (许多反向代理), 因为我不想拥有 2 每个代码 (和很长的配置文件) 结果,我做到了它的工作原理:

1.为虚拟主机创建虚拟主机 SSL.

2.为第一个虚拟主机创建另一个虚拟主机并反转代理。

<virtualhost *:443="">
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "...cert.crt"
SSLCertificateKeyFile "...server.ssl.key"
... (any ssl specific config)

ProxyPreserveHost On
ProxyPass / [url=http://localhost:80/]http://localhost:80/[/url]
ProxyPassReverse [url=http://localhost:80/]http://localhost:80/[/url] [url=http://yourdomain.com/]http://yourdomain.com/[/url]
</virtualhost>

这根本不是绩效解决方案都是很好的或方便的,但如果不情愿的原因 2 虚拟主机是防止 2 所有虚拟主机配置的版本 (这意味着改变 2 每次想要改变某些东西的行), 有用。

君笑尘

赞同来自:

看一看 Apache

If

结构和管理查询。 看
http://httpd.apache.org/docs/2.4/expr.html

http://httpd.apache.org/docs/2.4/expr.html
. 你可以做一些这样的事情:

<if "="" "%{server_port}="443">
# Do stuff
</if>

至于你的

VirtualHost

, 我没有在文件中看到这样的决定 Apache2. 看
http://httpd.apache.org/docs/2 ... 3port
并尝试选择: Apache2 使用类似于不同的IP地址而不是不同的端口 (
http://httpd.apache.org/docs/2 ... extra
).

我仍然建议使用 2 不同的虚拟主机,这更清晰。 你需要两个

NameVirtualHost



Listen

在你的

apache2.conf

文件,无论如何。

编辑

我不明白这一决定实际上会导致错误,但让我们回到概念本身 ... 倾听 80 或者 443 事实上,没有问题。 Apache2 如果不是,我很乐意为此提供优雅的解决方案 ... 加密。 Apache2 是由开发的 C, 除了流和叉子,它使用套接字。 在 C 用来 SSL 需要组件的初始化 OpenSSL, 而一些工作围绕基座插座,以出售一切 SSL. 您正在寻找一个简单的解决方案,但整个机制很复杂 ... 这就是你无法打开的原因 SSL 在基本虚拟主机上: HTTP 和 HTTP - 这些是不同的组件和方法 Apache2, 我担心第一和第二之间没有继承概念。

要回复问题请先登录注册