在我们的 LAN 上,我在 DNS 服务器中设置了几个“假”TLD,目的是将它们用于基于 Apache 名称的虚拟主机。我想将其与 Ubuntu 10.04 LAMP 服务器上的大规模虚拟托管(即 VirtualDocumentRoot)结合起来。
但是,我无法让它选择正确的虚拟主机!
以下是 Apache 配置的摘要:
NameVirtualHost 10.10.0.205
<VirtualHost 10.10.0.205>
ServerName *.test
VirtualDocumentRoot /var/www/%-3.0.%-2/test/%1/
CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>
<VirtualHost 10.10.0.205>
ServerName *.dev
VirtualDocumentRoot /var/www/%-3.0.%-2/dev/%1/
CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
主机名(例如www.domain.com.dev)正确解析为 10.10.0.205,但始终选择最匹配的顶部虚拟主机,而不是底部虚拟主机。
我的印象是 Apache 会首先尝试匹配 ServerName,然后再默认为给定 IP 的顶级虚拟主机。我究竟做错了什么?或者这是不可能的,我必须为每个 TLD 使用另一个 IP?
apachectl -S 输出(修剪):
10.10.0.205:* is a NameVirtualHost
default server *.test
port * namevhost *.test
port * namevhost *.dev
Run Code Online (Sandbox Code Playgroud) 我有一个小的私人网络服务器,我有几个虚拟主机。我知道不可能为每个单独的虚拟主机分配一个证书,因为服务器仅在建立 SSL 连接后才发现请求哪个虚拟主机。但是是否可以拥有一个列出多个域的 SSL 证书?或者至少是一个通配符域,例如 *.example.com。如果是,我必须编写哪些 Linux 命令来制作这样的自签名证书?
补充:澄清 - 我只有一个 IP 地址用于所有虚拟主机。
我在 Web 服务器上设置了许多虚拟主机,每个主机都有自己的错误和访问日志。的相关行httpd.conf
是这样的:
ErrorLog /var/log/httpd-error.log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/httpd-access.log combined
NameVirtualHost *:80
<VirtualHost *:80>
ServerName myhost.com
ServerAlias www.myhost.com
DocumentRoot /var/www/myhost.com/htdocs
ErrorLog /var/www/myhost.com/log/error.log
CustomLog /var/www/myhost.com/log/access.log combined
</VirtualHost>
# ... many more VirtualHosts
Run Code Online (Sandbox Code Playgroud)
目前,我在 /var/log/httpd-error.log 中收到了一些随机错误,但在 /var/log/httpd-access.log 中却什么也没有。是否可以将所有访问和错误复制到共享日志文件中?是否可以在不向每个 VirtualHost 添加新条目的情况下执行此操作?
我在这里提到了 apache Web 服务器,因为我正在使用它。
我刚刚学习了这篇关于在 Apache 中设置基于名称的虚拟化的教程,它运行得非常好。
本教程基本上让您将配置文件添加到sites-available
被调用的yourdomain.com
,然后将其链接到sites-enabled
.
默认情况下,apache 在sites-available
、default
和 中包含两个站点配置文件defualt-ssl
。
您应该编辑这些文件还是从sites-enabled
目录中删除链接?
在玩弄这个(本地)之后,我意识到默认情况下默认站点指向您的根/var/www
目录,因此如果有人直接访问您服务器的 IP,他们是否会看到 中的所有虚拟主机和其他目录/var/www
,除非默认的 vhost 配置已更改为指向不同的目录,或从sites-enabled
?
我只是想知道如果服务器用于基于名称的虚拟化,默认站点通常会做什么?
对不起,如果我有一些不正确的,因为我对运行自己的网络服务器很陌生。
我想设置一个默认的全能服务器块来处理任何与我的确切server_name
值不匹配的主机名。但我不确定我应该使用哪一个。
server {
listen 80 default_server;
server_name ""; # this is by default if no server_name specified
return 444;
}
Run Code Online (Sandbox Code Playgroud)
或者
server {
listen 80 default_server;
server_name _;
return 444;
}
Run Code Online (Sandbox Code Playgroud)
我已经测试过,它们似乎表现得一样。它们之间有什么区别吗?
我有一个相当大的 VirtualHost 定义,我不想复制它,这样站点也将通过 HTTPS 运行。
这是我想要做的:
<VirtualHost *>
ServerName example.com
<If port=443>
SSLEngine on
SSLCertificateFile ...
SSLCertificateKeyFile ...
SSLCertificateChainFile ...
</If>
(other config)
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我是否缺少其他不复制配置的方法?
我有两个主机名共享相同的域名,我想通过 HTTPs 提供服务。我有一个通配符 SSL 证书并创建了两个 vhost 配置:
主机 A
listen 127.0.0.1:443 ssl;
server_name a.example.com;
root /data/httpd/a.example.com;
ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
Run Code Online (Sandbox Code Playgroud)
主机B
listen 127.0.0.1:443 ssl;
server_name b.example.com;
root /data/httpd/b.example.com;
ssl_certificate /etc/ssl/wildcard.cer;
ssl_certificate_key /etc/ssl/wildcard.key;
Run Code Online (Sandbox Code Playgroud)
但是,我为任一主机名提供了相同的虚拟主机。
我想检索当前加载并侦听请求的虚拟主机列表,即不仅仅是 grepping 配置文件。
看起来apache2ctl -S
是这样,但我不能 100% 确定这是否只是返回配置文件中包含的内容。
我正在尝试针对涉及在我的 Web 服务器上禁用 SSLv3的贵宾犬漏洞测试补丁。为了首先在非生产环境中进行测试,我在 VirtualHost 上为不同的测试服务器设置 SSLProtocol。我的配置看起来像这样:
<VirtualHost *:443>
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
ServerName test.mysite.com
# bunch of other stuff omitted
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
然而,即使在重新启动 apache 之后,我的测试站点仍然声称易受攻击。这是预期的工作吗?我想知道我是否必须在全局 ssl 配置中设置它,或者是否有其他微妙的东西导致设置不采用和/或工作。
virtualhost ×10
apache-2.2 ×7
ssl ×4
apache-2.4 ×2
nginx ×2
ubuntu ×2
certificate ×1
https ×1
lamp ×1
log-files ×1
security ×1