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;
...
```
我的笔记