以下是修改完成代码
方案1

server
    {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
        access_log  /www/wwwlogs/default.log;
        error_log  /www/wwwlogs/default.error.log;
    }
server
    {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        server_name _;
        ssl_reject_handshake on;
        access_log  /www/wwwlogs/default.log;
        error_log  /www/wwwlogs/default.error.log;
    }

方案2

server
{
    listen 80 default_server;
    listen 443 ssl default_server;
    listen 443 quic;
    listen [::]:80 default_server;
    listen [::]:443 ssl default_server;
    listen [::]:443 quic;
    http2 on;
    server_name _;
    ssl_reject_handshake on;
    return 500;
    access_log  /www/wwwlogs/default.log;
    error_log  /www/wwwlogs/default.error.log;
}

默认情况下,只要将域名解析到vps的IP上,访问该域名就会访问到默认虚拟主机的默认页面。为了防止别人恶意将域名解析到自己的IP上,可以通过以下方法进行,修改/usr/local/nginx/conf/nginx.conf ,将里面的默认的虚拟主机server{}段修改为如下即可:

server {
listen 80 default_server;
server_name _;
return 500;
}

复制代码
当然也可以将return 500;替换为rewrite ^(.*) https://www.qq.com permanent;将流量导入到你指定的网站上。也可以改成return 444; 这样所有的访问都被直接丢弃。
最后记住,/usr/local/nginx/sbin/nginx -s reload

对于开启了https的用户,未添加https站点的域名,也可以https访问,只是会访问默认的https网站并提示不安全、域名证书不匹配。
开启SSL后https的空主机头的设置

server {
listen 443 ssl default_server;
server_name _;
ssl on;
ssl_certificate 随便设置一个ssl证书;
ssl_certificate_key 随便设置一个ssl证书的key;
return 500;
}

nginx 1.15.0 以上版本去掉ssl on;
如果是nginx 1.19.4或更高版本,可以添加 ssl_reject_handshake on; 不用再设置ssl证书和key及设置return 500,https站点未添加的域名使用https访问会直接拒绝握手,浏览器会报 ERR_SSL_UNRECOGNIZED_NAME_ALERT 的错误。配置如下:

server {
listen 443 ssl default_server;
server_name _;
ssl_reject_handshake on;
}

注意!注意!nginx 1.24.0及更高版本 listen 443 ssl default_server; 需要修改为:listen 443 ssl http2 default_server; 不然会报如下错误:nginx: [warn] protocol options redefined for 0.0.0.0:443 in /usr/local/nginx/conf/vhost/xxxx.conf:56 修过完成都是需要重启或reload nginx使其生效的。

最后修改:2025 年 04 月 21 日
如果觉得我的文章对你有用,请随意赞赏