Nginx安装SSL证书时http_ssl_module相关报错及解决方法

Nginx服务器需要通过http_ssl_module模块来加载SSL证书,因此安装SSL证书前,需要保证当前Nginx已包含此模块。

常见报错

报错1:the "ssl" parameter requires ngx_http_ssl_module

原因:当前Nginx服务器未编译http_ssl_module模块。

报错2:nginx: [emerg] unknown directive “ssl” in /usr/local/nginx/conf/nginx.conf

原因:修改配置文件后,执行nginx -s reload报上述错误,表明当前版本的Nginx未编译http_ssl_module模块。

报错3:./configure: error: SSL modules require the OpenSSL library

原因:缺少OpenSSL依赖库。

解决方法

确认服务器中已安装了openssl,若当前Nginx未编译http_ssl_module,还需重新编译Nginx使其包含http_ssl_module

示例方案

说明

本文以CentOS 8.0 64位系统,Nginx 1.14.1版本,OpenSSL 1.1.1k版本为例。仅供参考,请根据Nginx的版本,选择安装兼容的OpenSSL版本。

  1. 检查当前版本Nginx是否包含http_ssl_module模块。

    1. 执行以下命令,查看当前Nginx的编译参数。

      nginx -V | grep http_ssl_module
    2. 如下图所示,如果输出中包含--with-http_ssl_module字样,即说明已经包含http_ssl_module模块,否则表示当前Nginx安装版本中不包含该模块,您需要手动添加。

      image

  2. 安装http_ssl_module

    # CentOS为例,openssl 1.1.1k版本,请根据Nginx选择兼容的openssl版本。
    sudo yum install openssl-devel-1.1.1k
  3. 配置http_ssl_module并编译。

    # 前往Nginx安装目录(示例目录,请替换为实际的Nginx安装目录)
    cd /usr/local/nginx/
    # 配置http_ssl_module,其他参数可自定义
    ./configure --with-http_ssl_module
    # 编译
    sudo make 
    重要

    注意不能make install,否则会覆盖原有Nginx的配置。

  4. 再次检查http_ssl_module模块是否成功安装。如果未成功安装,请重复步骤2-3。

    nginx -V | grep http_ssl_module
  5. 重启Nginx服务。

    # 进入Nginx服务的可执行目录(示例目录,请以实际路径为准)。
    cd /usr/local/nginx/sbin
    # 重新载入配置文件。
    ./nginx -s reload