Nginx配置HTTPS

Posted by aclyyx on 05-16,2019

环境说明

  • 系统:Linux | CentOS 7.4
  • Nginx:版本 1.8.1
  • Nginx 通过编译安装到/usr/local/nginx

配置过程(踩坑)

修改nginx.conf配置

在 Nginx 配置文件 nginx.conf 中追加如下配置,保存:

server {
    listen 443;
    server_name wechat.zhongcaile.net;
    ssl on;
    ssl_certificate      /root/server/ssl/wechat/XXXXXX.crt;
    ssl_certificate_key  /root/server/ssl/wechat/XXXXXX.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://XXX.XXX.XXX.XXX:80;
        proxy_set_header Host $host;
    }
}

使用命令/usr/local/nginx/sbin/nginx -s reload让 Nginx 重新加载配置。

呃 ... ... 问题来了,在重载配置时 Nginx 报出错误:unknown directive "ssl" in XXX

解决问题

经查,是在编译安装 Nginx 时没有加入 SSL 支持参数的原因。

可以使用命令 /usr/local/nginx -V 查看配置参数中是否添加 SSL 支持。
支持的查询结果(注意最后一行)

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

不支持的查询结果

nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
configure arguments: --prefix=/usr/local/nginx

如果是这样,那么就需要重新配置编译 Nginx,步骤如下。

  • 在nginx的安装目录执行命令,添加配置;
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 在nginx的安装目录执行命令 make
  • 【重中之重】不要执行make install命令,否则会意想不到的事情发生。
  • make之后,将编译得到的结果nginx文件cp/usr/local/nginx/sbin目录下(注意备份之前的老版本哟,以备不时之需)
  • 假如一切正常的话,进行上述步骤之后,再来执行nginx -s reload应该就没有问题了。

👆为什么是“假如”?

因为不会那么顺利的,呵呵!

比较不幸的时候,在执行上面步骤时./configure第一步,就会发生错误,错误信息如下:

SSL modules require the OpenSSL library.

解决问题

这时需要在系统安装 openssl 支持,执行以下命令。

yum -y install openssl openssl-devel

安装完成后,再操作上面的步骤,就OK啦。

注意

由于博客程序问题,文章中“=”等于符号问中文字符,执行命令时请替换后使用。

参考