示例案例.我有一个带有一个IPV4地址的网络服务器.我正在托管~50个网站,其中只有两个有ssl证书.我为2个ssl网站配置了vhosts,一切正常,除了一个大问题 – 如果我使用https://前缀访问其他48个站点(他们没有ssl证书),我看到我的最新网站有SSL证书.
可以在非SSL网站上阻止https前缀吗?或者只有一个解决方案 – 使用专用的IP地址.如果我有专用的IP地址,我使用以下配置:
server {
listen 111.222.333.444:443 ssl;
}
这样,如果我在非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;
...
}
另一种方法是继续使用HTTPS设置它们!通过Let’s Encrypt项目(https://www.letsencrypt.org),您可以免费获得所有其他站点的可信证书.这很容易.