+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in

没有配置 https://xxx.com 跳转到 https://www.xxx.com 时,使用 nginx -t 检测没有异常。 配置文件如下 ``` server { listen 80; server_name xxx.com; rewrite ^(.*) $scheme://www.$server_name$1 permanent; } server { listen 80; server_name www.xxx.com; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; server_name www.xxx.com; ssl_certificate /etc/nginx/cert/xxx.com.pem; ssl_certificate_key /etc/nginx/cert/xxx.com.key; ... ``` 配置 https://xxx.com 跳转到 https://www.xxx.com,在配置文件中新增 ``` server { listen 443 ssl; server_name xxx.com; rewrite ^(.*) $scheme://www.$server_name$1 permanent; } ``` 配置完成后,使用 nginx -t 命令检测,报错“nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in...” 原因是 ssl 证书位置未被正确识别,但是之前的配置文件没有更改,知识新增了个了一个到 www 的跳转。按照逻辑顺序,需要在新增的 www 跳转里也要加上 ssl 证书,完整的配置文件如下 ``` server { listen 80; server_name xxx.com; rewrite ^(.*) $scheme://www.$server_name$1 permanent; } server { listen 80; server_name www.xxx.com; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; server_name xxx.com; rewrite ^(.*) $scheme://www.$server_name$1 permanent; ssl_certificate /etc/nginx/cert/xxx.com.pem; ssl_certificate_key /etc/nginx/cert/xxx.com.key; ... } server { listen 443 ssl; server_name www.xxx.com; ssl_certificate /etc/nginx/cert/xxx.com.pem; ssl_certificate_key /etc/nginx/cert/xxx.com.key; ... ```
我的笔记