Nginx 一个ip和多个ssl证书

Ale*_*Kim 8 ssl nginx

示例案例。我有一个带有一个 IPV4 地址的网络服务器。我托管了大约 50 个网站,其中只有两个拥有 ssl 证书。我已经为 2 个 ssl 网站配置了虚拟主机,一切正常,除了一个大问题 - 如果我使用 https:// 前缀访问其他 48 个站点(它们没有 ssl 证书),我看到我的最新网站带有 SSL 证书.

可以在非 SSL 网站上阻止 https 前缀吗?或者只有一种解决方案 - 使用专用 IP 地址。如果我有专用的 IP 地址,我将使用以下配置:

server {
        listen 111.222.333.444:443 ssl;
}
Run Code Online (Sandbox Code Playgroud)

这样,如果我在非 SSL 网站上强制使用 https - 没有任何反应。

ruh*_*net 7

Nginx 使用一个“默认服务器”,当没有另一个最接近的匹配时,它会选择它来提供页面。如果您没有指定要使用的默认服务器,我相信它会使用它找到的第一个服务器(在您的情况下是您的 HTTPS 站点之一)。因此,您应该能够使用 TLS 的 IPv4 地址创建默认服务器虚拟主机(您现在只使用 TLS 而不是 SSL,对吗?)并让它侦听将捕获随机 HTTPS 请求的 IP。您可能还需要为 48 个非安全站点在其中添加 server_name 项,但如果没有它,它也可以工作。

#Your catch-all HTTPS server:
server {
  listen 104.218.234.204:443 default_server;
  server_name ruel.in ruel.pro;
  root /var/www/ruel.pro;
  index index.html;
  ssl on;
  ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
  ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
  ssl_dhparam /etc/ssl/private/dhparams_4096.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

#Regular HTTP server
server {
  listen ruel.in:80;
  server_name ruel.in;
  root /var/www/ruel.in;
  index index.php index.html index.htm;
  ...
}

#Regular HTTP server
server {
  listen ruel.pro:80;
  server_name ruel.pro;
  root /var/www/ruel.pro;
  index index.php index.html index.htm;
  ...
}

#Your HTTPS server
server {
  listen dallas.ruhnet.net:443 ssl;
  server_name dallas.ruhnet.net;
  ...
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是继续使用 HTTPS 设置它们!通过 Let's Encrypt 项目 ( https://www.letsencrypt.org ),您可以免费获得所有其他站点的可信证书。这很容易。