运行 nginx -t 进行测试 一切正常
但运行nginx 无法启动 error.log中显示
client: 101.38.133.223, server: 0.0.0.0:443
2020/04/03 21:15:12 [error] 832#1448: *73 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking,
经过搜索总结如下
conf配置中,已有listen 443 而新的配置 又配置 listen 443
也就是 现在有两处地方 监听了443
而443 需要配合证书一起用!
例子
# 第一个配置大概这样
server {
listen 443 ssl;
server_name _;
#...
}
#新的配置增加 default_server 和证书
server {
listen 443 ssl default_server; # 多了ssl default_server
server_name ;
ssl_certificate wgpro.com.crt;
ssl_certificate_key wgpro.com.key;
#...
}
在需要使用443的时候,需要吧有证书的那个域名设置为 默认首选 default_server
我到现在依然没有找到资料,大概的意思是 如果只有一个443监听 没问题。
如果两个监听,一个https请求过来,返回那个配置 不知道,程序就返回了第一个
结果那个没证书 不符合格则 自检失败崩溃了。
解决办法就是设置一个带证书的默认配置,default_server
这样设置,说有很的小概率会遇到之前的问题。
最佳的解决办法是 删除没有证书的 配置 哪怕装个过期的证书 也比没有强。
参考
- server {
- listen 443 ssl;
- listen 80;
- server_name example.com;
- return 301 https://www.example.com$request_uri;
- }
- server {
- listen 80 default_server;
- server_name www.example.com;
- return 301 https://www.example.com$request_uri;
- }
- server {
- listen 443 ssl default_server;
- server_name www.example.com;
- root /var/www/example.com/public;
- index index.php index.html index.nginx-debian.html;
- ssl on;
- ssl_certificate /etc/ssl/wgpro.com.crt;
- ssl_certificate_key /etc/ssl/wgpro.com.key;
- (更多的配置。)
- }
- #######################################
- 个人使用 同时支持http和https两种请求 自行参考
- #######################################
- server {
- listen 80;
- listen 443 ssl; # 加ssl 就不用 在写 ssl on了
- server_name www.wgpro.com;
-
- #指定PEM格式的证书文件
- ssl_certificate /wwwroot/vhost_conf/ssl/wgpro.com.crt;
- #指定PEM格式的私钥文件
- ssl_certificate_key /wwwroot/vhost_conf/ssl/wgpro.com.key;
- #
- ssl_session_timeout 5m;
- ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_prefer_server_ciphers on;
-
-
- #让http请求重定向到https请求 协议或者端口
- if ($scheme = http ) {
- #if ($server_port = 80 ) {
- return 301 https://$host$request_uri;
- }
- #我这里的配置本层是ng代理
- #这个是转发到底层服务器
- #以下自行修改成自己的配置
- location / {
- proxy_pass http://10.0.0.12:20080;
- proxy_redirect http://$host/ http://$http_host/;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header Host $host;
- }
- }
复制代码
一个小知识
如果使用转发或者 cdn,证书都是配置在 最上层
比如
192.168.1.1 底层web服务器 使用http
192.168.1.2 ng代理 证书在这层配
|