示例案例.我有一个带有一个IPV4地址的网络服务器.我正在托管~50个网站,其中只有两个有ssl证书.我为2个ssl网站配置了vhosts,一切正常,除了一个大问题 – 如果我使用https://前缀访问其他48个站点(他们没有ssl证书),我看到我的最新网站有SSL证书.
可以在非SSL网站上阻止https前缀吗?或者只有一个解决方案 – 使用专用的IP地址.如果我有专用的IP地址,我使用以下配置:
server { listen 111.222.333.444:443 ssl; }
@H_404_10@这样,如果我在非SSL网站上强制https – 没有任何反应.
最佳答案
当没有其他最接近的匹配时,Nginx使用它选择的“默认服务器”来提供页面.如果您尚未指定要使用的默认服务器,我相信它会使用它找到的第一个(在您的情况下是您的一个HTTPS站点).所以你应该能够用你的TLS的IPv4地址创建一个默认服务器vhost(你只使用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; ... }
@H_404_10@另一种方法是继续使用HTTPS设置它们!通过Let’s Encrypt项目(https://www.letsencrypt.org),您可以免费获得所有其他站点的可信证书.这很容易.