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版本。
-
检查当前版本Nginx是否包含
http_ssl_module模块。-
执行以下命令,查看当前Nginx的编译参数。
nginx -V | grep http_ssl_module -
如下所示,如果输出中包含
--with-http_ssl_module字样,即说明已经包含http_ssl_module模块,否则表示当前Nginx安装版本中不包含该模块,您需要手动添加。[root@xxx ~]# nginx -V nginx version: nginx/1.14.1 built with gcc 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC) built with OpenSSL 1.1.1 FIPS 11 Sep 2018 (running with OpenSSL 1.1.1k FIPS 25 Mar 2021) TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
-
-
安装
http_ssl_module。# CentOS为例,openssl 1.1.1k版本,请根据Nginx选择兼容的openssl版本。 sudo yum install openssl-devel-1.1.1k -
配置
http_ssl_module并编译。# 前往Nginx安装目录(示例目录,请替换为实际的Nginx安装目录) cd /usr/local/nginx/ # 配置http_ssl_module,其他参数可自定义 ./configure --with-http_ssl_module # 编译 sudo make重要注意不能make install,否则会覆盖原有Nginx的配置。
-
再次检查
http_ssl_module模块是否成功安装。如果未成功安装,请重复步骤2-3。nginx -V | grep http_ssl_module -
重启Nginx服务。
# 进入Nginx服务的可执行目录(示例目录,请以实际路径为准)。 cd /usr/local/nginx/sbin # 重新载入配置文件。 ./nginx -s reload
该文章对您有帮助吗?