https://blog.csdn.net/cxy35/article/details/106277053

1 检查 Nginx 是否支持 SSL

  1. /usr/local/nginx/sbin/nginx -V

查看是否包含 —with-http_ssl_module 模块,如果没有,则需要在编译时指定或增加该模块。

1 未安装过 Nginx

具体安装步骤参考: Nginx 安装 - Linux

  1. # 只需要在 ./configure 时指定 ssl 模块
  2. --with-http_ssl_module

2 已安装过 Nginx

如果已经安装过 Nginx ,又不想重新安装,则可以单独添加 ssl 模块。

  1. # 关闭 Nginx
  2. /usr/local/nginx/sbin/nginx -s stop
  3. # 查看 Nginx 安装时的配置参数,复制备用
  4. /usr/local/nginx/sbin/nginx -V
  5. # configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module ...
  6. # 进入 nginx-1.16.1 目录
  7. cd /usr/local/nginx-1.16.1
  8. # 重新执行 cofigure 命令,增加 ssl 模块的配置
  9. ./configure \
  10. --prefix=/usr/local/nginx \
  11. --error-log-path=/usr/local/nginx/logs/error.log \
  12. --http-log-path=/usr/local/nginx/logs/access.log \
  13. --pid-path=/usr/local/nginx/logs/nginx.pid \
  14. --lock-path=/usr/local/nginx/logs/nginx.lock \
  15. --http-client-body-temp-path=/usr/local/nginx/temp/client-body \
  16. --http-proxy-temp-path=/usr/local/nginx/temp/proxy \
  17. --http-fastcgi-temp-path=/usr/local/nginx/temp/fastcgi \
  18. --http-uwsgi-temp-path=/usr/local/nginx/temp/uwsgi \
  19. --http-scgi-temp-path=/usr/local/nginx/temp/scgi \
  20. --with-http_stub_status_module \
  21. --with-http_ssl_module \
  22. --with-http_gzip_static_module \
  23. --with-file-aio \
  24. --with-http_realip_module
  25. # 编译(不安装)
  26. make
  27. # 备份原来的 nginx 命令
  28. cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-bak
  29. # 替换原来的 nginx 命令
  30. cp /usr/local/nginx-1.16.1/objs/nginx /usr/local/nginx/sbin/nginx

2 生成证书

  1. # 创建存放证书的目录
  2. mkdir /usr/local/ssl
  3. cd /usr/local/ssl
  4. # 创建服务器私钥,命令会让你输入一个口令。
  5. openssl genrsa -des3 -out server.key 1024
  6. # 再生成一个不带密码的(非必须)
  7. # openssl rsa -in server.key -out server-nopassword.key
  8. # 创建签名请求的证书(CSR
  9. openssl req -new -key server.key -out server.csr
  10. # 标记证书使用上述私钥和 CSR
  11. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  12. # 再生成一个不带密码的(非必须)
  13. # openssl x509 -req -days 365 -in server.csr -signkey server-nopassword.key -out server-nopassword.crt

3 配置 Nginx

修改配置文件,开启 ssl ,并指定标记的证书和私钥。

  1. server {
  2. listen 80;
  3. server_name localhost;
  4. listen 443 ssl;
  5. ssl_certificate /usr/local/ssl/server-nopassword.crt;
  6. ssl_certificate_key /usr/local/ssl/server-nopassword.key;
  7. #rewrite ^(.*)$ https://$host$1 permanent;
  8. #...
  9. }

重启 Nginx ,此时 http 和 https 都支持。