我发现(通过查看 mod_pagespeed 缓存条目)一个我以前从未听说过的完全随机域正在解析到我的网站。
如果我访问这个域,我的网站就会加载。该域的 DNS 指向我服务器的 IP。
现在在我的 vhost 配置中我有 *:80,我猜这是我出错的地方。
我立即将其更改为 example.com:80,其中 example.com 是我的域。假设这意味着服务器只会响应和满足对我的域名的请求,而不是端口 80 上的任何请求。
我原来的 vhost 配置;
<VirtualHost *:80>
DocumentRoot "/var/www/example.com"
<Directory "/var/www/example.com">
Order allow,deny
Allow from all
Allowoverride all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我新尝试的配置;
Listen 80
ServerName example.com
<VirtualHost example.com:80>
DocumentRoot "/var/www/example.com"
<Directory "/var/www/example.com">
Order allow,deny
Allow from all
Allowoverride all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
当我尝试使用新配置重新启动 apache 时,出现以下错误:
* Restarting web server apache2 [Fri Mar 28 08:55:47.821904 2014] [core:error] [pid 5555] (EAI 2)Name or service not known: AH00549: Failed to …Run Code Online (Sandbox Code Playgroud) 这是我在启动 Apache2 时遇到的错误:
* Starting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Wed Oct 21 16:37:26 2009] [error] VirtualHost *:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
[Wed Oct 21 16:37:26 2009] [error] VirtualHost *:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
[Wed Oct 21 16:37:26 2009] …Run Code Online (Sandbox Code Playgroud) 我有一个 Nginx 服务器,并禁用了隐藏文件 nginx_vhost.conf
## Disable .htaccess and other hidden files
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
Run Code Online (Sandbox Code Playgroud)
但是 LetsEncrypt 需要访问该 .well-known目录。
如何允许.well-known目录并拒绝其他隐藏文件?
我有带有 mod_ssl 的 Apache 2.2 和一堆 HTTPS 站点,位于与 VirtualHosting 相同的 IP/端口上,因此客户端必须支持 SNI 才能连接到这些虚拟主机。
我想通过以下方式配置我的服务器:
当用户输入 www.dummysite.com 并且他的浏览器支持SNI(服务器名称指示)时,任何 HTTP 请求都会被重定向到https://发送 HSTS 标头的位置。但如果浏览器不支持SNI,则请求由 HTTP 提供。
上面的规则,按原样陈述,实际上是那些仍然运行旧浏览器的人的后备规则,因为 Mozilla 和 Chrome 没有这个问题,只是为了避免让这些用户离开网站。
我想在 Apache 配置级别执行此重定向,可能在用户代理上使用过滤器。我不想触摸正在运行的应用程序,除非确保不存在直接的 http:// 引用(否则它们意味着安全警告)
[编辑](在编辑问题时我忘记了问题):要重定向的启用 SNI 的用户代理列表是什么?
最近将 Apache2 升级到 2.2.31 版后,我发现 SSL VirtualHost 设置中有一个奇怪的行为。
即使客户端Server Name Identification知道,我托管的一些网站也会显示默认主机的证书,而这仅发生在其中一些网站上。这显示为常见的 Firefox/Chrome 的护照警告,如果您正在浏览您的家庭银行,您可能会被骗,但事实并非如此。
需要明确的是,如果服务器host.hostingdomain.org有自己的 SSL,则尝试访问 的https://www.hostedsite.org报告证书host.hostingdomain.org,但少数https://www.hostedsite.me报告了正确的证书。
所有站点都托管在相同的 IP 地址上,在端口 443 上。事实上,VirtualHosting 在 HTTP 端工作并自动将支持 SNI 的客户端重定向到 SSL,因此它向后兼容不支持 SNI 的客户端。
检查违规 VirtualHosts 的错误日志显示以下文本
[Tue Dec 25 16:02:45 2012] [error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] (/path/to/www.site.org.conf:20)
Run Code Online (Sandbox Code Playgroud)
事实上,虚拟主机已正确配置了 SSLCertificateFile。
问题很明显:如何解决这个问题?
如果我不在虚拟主机内设置错误日志,它将默认为默认错误/访问日志。有没有办法为一个虚拟主机关闭它?
我在同一个 IP 上有一个通配符 SSL 证书和几个子域。现在我希望我的 nginx 只处理提到的服务器名称并为其他人断开连接,这样它看起来 nginx就不会为未列出的服务器名称运行(不响应,拒绝,死,没有响应的单个字节)。我做以下
ssl_certificate tls/domain.crt;
ssl_certificate_key tls/domain.key;
server {
listen 1.2.3.4:443 ssl;
server_name validname.domain.com;
//
}
server {
listen 1.2.3.4:443 ssl;
server_name _;
// deny all;
// return 444;
// return 404;
//location {
// deny all;
//}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了最后一个服务器块中的几乎所有内容,但没有成功。我收到来自已知虚拟服务器的有效响应或错误代码。请帮忙。
我目前有一个在 Nginx 上为 foo.domain.com 运行的虚拟主机,一切正常。
我为要添加的新子域创建了一个新文件,名为 bar.domain.com。我对两者使用相同的设置。
当我重新启动 Nginx 时,我得到
Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.
Run Code Online (Sandbox Code Playgroud)
当我访问 bar.domain.com 时,我看到了我应该看到的内容,但是当我访问 foo.domain.com 时,我看到了 bar.domain.com 链接到的页面。
富
upstream php-handler {
server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name foo.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate [path_foo]/cacert.pem;
ssl_certificate_key [path_foo]/privkey.pem;
root [path]/foo;
...
}
Run Code Online (Sandbox Code Playgroud)
酒吧
server {
listen 80;
server_name bar.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate [path_bar]/cacert.pem;
ssl_certificate_key …Run Code Online (Sandbox Code Playgroud) 我有两个由 CentOS 实例提供服务的网站。其中一个启用了 SSL,另一个仅在端口 80 上提供服务。
所以,http://siteone.com和https://siteone.com两个做工精细,一样http://sitetwo.com。
问题是https://sitetwo.com显示https://siteone.com.
我有一个可用的公共 IP 地址。
我认为我无法从一个 IP 为两个 https 站点提供服务,但是否至少有一种方法可以将 https 重定向到端口 80,https://sitetwo.com而不是为错误的站点提供服务?
sudo apachectl -S
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
?
xxx.xxx.xxx.xxx:443 siteone.com (/etc/httpd/sites-enabled/ssl-siteone.conf:1)
*:80 is a NameVirtualHost
default server beta-siteone (/etc/httpd/sites-enabled/beta-siteone.conf:1)
port 80 namevhost beta-ilegis (/etc/httpd/sites-enabled/beta-siteone.conf:1)
alias beta.siteone.com
port 80 …Run Code Online (Sandbox Code Playgroud) virtualhost ×10
apache-2.2 ×6
ssl ×4
nginx ×3
linux ×2
sni ×2
centos ×1
https ×1
lets-encrypt ×1
mamp ×1
ubuntu ×1