如果你的服务器有站点使用了https,但另外有站点没有https,默认的nginx设置会造成没有启用https的站点可以通过加https而访问到另外一个站点,造成一个站点绑定了两个或者多个域名的现象(特别是搜索引擎会忽略ssl证书错误,直接进行收录)。这时就需要给nginx设置一个默认的https站点。
server {
listen 443 ssl;
server_name _;
ssl_certificate /home/ssl/server.crt; #crt 和 key 的生成方法见文章最后。
ssl_certificate_key /home/ssl/server.key;
return 444;
}
#这段要放在nginx.conf的http里,加载其他站点配置之前
Nginx是1.19.4及以上版本,不需要key和crt
server {
listen 443 ssl default_server;
ssl_reject_handshake on;
}
#如果你的网站有cdn等反代,请用第一种方法,否则会造成反代服务器ssl连接失败。
#未绑定域名的80端口禁止访问
server {
listen 80 default_server;
server_name _;
return 444;
}
#这段要放在nginx.conf的http里,加载其他站点配置之前
#生成一个自用crt和key
openssl genrsa -des3 -out server.key 2048 #输入一个4位密码
openssl rsa -in server.key -out server.key #去掉密码
openssl req -new -x509 -key server.key -out ca.crt -days 3650 #中间要输入的地方全部直接回车
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt