我有带有以下虚拟主机的 nginx:
gitlab 虚拟主机:
server {
listen 443;
server_name gitlab.mydomain.com; # e.g., server_name source.example.com;
server_tokens off; # don't show the version number, a security best practice
root /home/git/gitlab/public;
ssl on;
ssl_certificate /etc/nginx/ssl/gitlab.crt;
ssl_certificate_key /etc/nginx/ssl/gitlab.key;
...
# individual nginx logs for this gitlab vhost
access_log /var/log/nginx/gitlab_access.log;
error_log /var/log/nginx/gitlab_error.log;
...
}
默认虚拟主机用于捕获所有其他域名
server {
listen 80;
return 444;
}
server {
listen 443;
return 444;
}
但是现在如果访问 gitlab.mydomain.com,我只能得到
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.
没有别的。而且,如果没有默认规则,gitlab.mydomain.com
在每个 上也是可访问的*.mydomain.com
。这是不可接受的。
如何配置 nginx 以使其仅响应配置的名称?
答案1
您的默认端口 443 服务器不知道任何证书,因此您会收到此错误,因为它无法在没有证书的情况下执行 SSL。更好的方法是在 http 部分(或每个需要 SSL 的服务器部分)中定义 ssl* 行,然后在每个服务器部分中启用端口 443 和 ssl,并使用您要查找的相同路由。