网格论坛

 找回密码
 立即注册
查看: 244|回复: 0

[杂记] nginx 443端口错误解决办法 与证书小知识

[复制链接]

72

主题

152

帖子

2万

积分

总大队长

Rank: 9Rank: 9Rank: 9

积分
27168
发表于 2020-4-3 22:21:01 | 显示全部楼层 |阅读模式
163945A48-0.jpg
运行 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
这样设置,说有很的小概率会遇到之前的问题。

最佳的解决办法是 删除没有证书的 配置 哪怕装个过期的证书 也比没有强。

参考


  1. server {
  2.     listen 443 ssl;
  3.     listen 80;

  4.     server_name example.com;
  5.     return 301 https://www.example.com$request_uri;
  6. }

  7. server {
  8.     listen 80 default_server;

  9.     server_name www.example.com;
  10.     return 301 https://www.example.com$request_uri;
  11. }

  12. server {
  13.     listen 443 ssl default_server;

  14.     server_name www.example.com;
  15.     root /var/www/example.com/public;
  16.     index index.php index.html index.nginx-debian.html;

  17.     ssl on;
  18.     ssl_certificate /etc/ssl/wgpro.com.crt;
  19.     ssl_certificate_key /etc/ssl/wgpro.com.key;

  20.     (更多的配置。)
  21. }



  22. #######################################
  23. 个人使用 同时支持http和https两种请求 自行参考
  24. #######################################


  25. server {
  26. listen  80;  
  27. listen 443 ssl;  # 加ssl 就不用 在写 ssl on了

  28. server_name www.wgpro.com;

  29. #指定PEM格式的证书文件
  30. ssl_certificate     /wwwroot/vhost_conf/ssl/wgpro.com.crt;
  31. #指定PEM格式的私钥文件
  32. ssl_certificate_key /wwwroot/vhost_conf/ssl/wgpro.com.key;
  33. #
  34. ssl_session_timeout 5m;
  35. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  36. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  37. ssl_prefer_server_ciphers on;
  38.    
  39.    
  40. #让http请求重定向到https请求  协议或者端口
  41.   if ($scheme = http ) {
  42. #if ($server_port = 80 ) {

  43. return 301 https://$host$request_uri;
  44. }

  45. #我这里的配置本层是ng代理
  46. #这个是转发到底层服务器
  47. #以下自行修改成自己的配置

  48.         location / {
  49.            proxy_pass http://10.0.0.12:20080;
  50.            proxy_redirect http://$host/ http://$http_host/;
  51.            proxy_set_header X-Real-IP $remote_addr;
  52.            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  53.            proxy_set_header Host $host;
  54.        }

  55. }

复制代码




一个小知识
如果使用转发或者 cdn,证书都是配置在 最上层
比如
192.168.1.1  底层web服务器   使用http
192.168.1.2 ng代理  证书在这层配




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|联系我们 ( 京ICP备16001788号 )

GMT+8, 2020-6-2 07:24 , Processed in 0.030272 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表