ScareCrowL's blog

To maintain world peace

Nginx安装ssl证书

《Nginx安装ssl证书》

将域名 证书文件bundle.crt 、私钥文件.key保存到同一个目录,例如/usr/local/nginx/conf目录下。

更新Nginx根目录下 conf/nginx.conf 文件如下:

  1. server {
  2. listen 443;
  3. server_name xx; #填写绑定证书的域名
  4. ssl on;
  5. ssl_certificate xx.crt;
  6. ssl_certificate_key xx.key;
  7. ssl_session_timeout 5m;
  8. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
  9. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
  10. ssl_prefer_server_ciphers on;
  11. location / {
  12. root html; #站点目录
  13. index index.html index.htm;
  14. }
  15. }
配置文件参数 说明
listen 443 SSL访问端口号为443
ssl on 启用ssl功能
ssl_certificate 证书文件
ssl_certificate_key 私钥文件
ssl_protocols 使用的协议
ssl_ciphers 配置加密套件,写法遵循openssl标准

然后 nginx -t 检测配置文件 nginx -s reload 重启nginx就OK了

我是这么想的,但是还是出现了问题…

  • 问题1:unknown directive “ssl”

报错如下:

  1. nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/blog.com.conf:5
  2. nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

出现这个错误说明没有将ssl模块编译进nginx,在configure的时候加上“–with-http_ssl_module”即可

详细一点:

#下载你当前版本的nginx包,并且解压 进到目录
./configure –with-http_ssl_module
#切记千万不要make install 那样就覆盖安装了
make
#将原来的nginx备份 备份之前先kill当前正在启动的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
#make之后会在当前目录生成 objs 目录
cp objs/nginx /usr/local/nginx/sbin/nginx
#然后重新启动nginx
/usr/local/nginx/sbin/nginx

  • 问题2:http 转到 https

据说是有加rewrite的方法:

  1. rewrite ^/(.*)$ http://xx/$1 permanent;

但是好像现在nginx新版本已经换了种写法:

  1. server {
  2. listen 80;
  3. server_name www.opqnext.com;
  4. return 301 https://$server_name$request_uri;
  5. }
  6. server {
  7. listen 443 ssl;
  8. server_name xx;
  9. [....]
  10. }

反正这种方法挺好使,然后重启 nginx 终于完成了!