![拒绝使用 https 访问 nginx 上的某些不安全域](https://linux22.com/image/801789/%E6%8B%92%E7%BB%9D%E4%BD%BF%E7%94%A8%20https%20%E8%AE%BF%E9%97%AE%20nginx%20%E4%B8%8A%E7%9A%84%E6%9F%90%E4%BA%9B%E4%B8%8D%E5%AE%89%E5%85%A8%E5%9F%9F.png)
我有一个 nginx web 服务器,虚拟主机位于一个 IP 地址上。一些使用 http 的域名:ex1.com、ex2.com、ex3.com,以及一个使用 https 的域名:se1.com。
当我尝试在 ex1.com、ex2 或 ex3 上使用 httpS 时,我收到的内容https://se1.com网站。我该如何否认呢?
默认站点 http 配置:
server {
listen 80 default;
server_name localhost;
deny all;
}
基本 http vhost 配置:
server {
listen 80;
server_name ex1.com;
root /var/www/ex1.com;
index index.html;
}
https 站点配置:
server {
listen 443;
server_name se1.com;
ssl on;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/se1.crt;
ssl_certificate_key /etc/nginx/ssl/se1.key;
root /var/www/se1.com;
index index.html;
}
答案1
来自几乎相同的问题的解决方案和谷歌的最佳结果(https://serverfault.com/a/382779/3256),就是为每个非 SSL 站点添加服务器块,并向 http 站点添加重写,从而将任何访问 https 地址的人弹回到 http 地址。虽然笨重,但很有效!
例如:
server {
listen 443 ssl;
server_name ex1.com;
ssl on;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/se1.crt;
ssl_certificate_key /etc/nginx/ssl/se1.key;
rewrite ^ http://$server_name$request_uri? permanent;
}