我一直在寻找以下代码的答案:
server {
listen 443 ssl;
server_name "host.domain.com";
location / {
proxy_pass http://host.domain.com;
}
ssl_certificate /etc/httpd/ssl/Sample_StarCert.crt;
ssl_certificate_key /etc/httpd/ssl/Sample-NPW.key;
}
这可以通过在同一台计算机上针对host.domain.com请求(按设计)反向代理SSL请求来完成大部分工作。
当我尝试访问同一网站https://ipaddress
时出现问题现在,以这种方式访问网站的浏览器面临证书警告。我需要证书警告在这些情况下消失,要么阻止该尝试,要么重定向到FQDN请求。要么没事。
我一直试图用其他服务器块来实现这一点,但我一直遇到的问题是SSL服务器块似乎真的想在处理请求之前开始向浏览器提交证书,这对我来说很奇怪我认为SNI(这个服务器是编译的)是为了在提交证书之前识别请求是必要的吗?我很可能误解了这一切是如何运作的,并欢迎指导。
我尝试了条件语句也没有成功。有什么想法吗?
答案 0 :(得分:0)
我经常看到这种尝试使用 80 端口:
server {
listen 80;
server_name _;
return 444;
}
但是,这不适用于 SSL,并导致在通过域请求时无法访问您的网站。
我想通了,您可以简单地检查 http 主机是否是 SSL 的主服务器块中的服务器名称,如下所示:
server {
listen 443 ssl;
server_name YOUR_DOMAIN;
index index.php index.html;
root /var/www/html/;
# block direct IP access
if ($http_host != $server_name) {
return 444;
}
}
这种尝试也适用于 HTTP,如果您更喜欢一些一致性。