CentOS nginx配置SSL证书

一、在可信机构申请ssl证书(如阿里云);

二、nginx配置ssl

1、修改nginx.conf配置文件

  1. server {
  2. listen 80;
  3. listen 443 ssl;
  4. server_name mes.ywlin.cn;
  5. ssl_certificate cert/mes.ywlin.cn.pem;
  6. ssl_certificate_key cert/mes.ywlin.cn.key;
  7. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  8. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  9. ssl_prefer_server_ciphers on;
  10. set $node_port 18003;
  11. location / {
  12. proxy_redirect off;
  13. proxy_set_header Host $host;
  14. proxy_set_header X-Real-IP $remote_addr;
  15. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  16. proxy_pass http://127.0.0.1:$node_port;
  17. }
  18. }

2、重启nginx

  1. cd cd /usr/local/nginx/sbin
  2. ./nginx -s reload

三、unknown directive “ssl”错误

错误原因:nginx安装时未配置ssl

处理方法:

1、cd到nginx解压目录,若已删除,则重新下载解压

2、执行配置

  1. ./configure --with-http_ssl_module

3、覆盖旧的nginx目录

  1. make
  2. cp objs/nginx /usr/local/nginx/sbin/nginx

也可以make & make install覆盖安装

4、需要重启nginx

  1. cd cd /usr/local/nginx/sbin
  2. ./nginx -s quit
  3. ./nginx

四、https访问被拒绝

1、查看端口是否开启

  1. netstat -tlunp

如果发现443端口未监听,则可能是上面重新配置nginx后你没有退出重启nginx

2、查看nginx安全模块是否安装

  1. rpm -qa | grep openssl
  2. rpm -qa | grep mod_ssl

没有安装的话就安装

  1. yum -y install mod_ssl openssl

6、80端口重定向到443

1、修改nginx.conf文件,将原来网站对80端口的监听注释,只留443端口的监听

  1. server {
  2. #listen 80;
  3. listen 443 ssl;
  4. ...
  5. }

2、添加新规则,将指定域名的80端口重写到443端口,域名可以是多个

  1. server {
  2. listen 80;
  3. server_name doc.ywlin.cn mes.ywlin.cn;
  4. rewrite ^(.*)$ https://${server_name}$1 permanent;
  5. }

3、重启ngin

  1. cd cd /usr/local/nginx/sbin
  2. ./nginx -s reload