Nginx 配置SSL证书


HTTPS和HTTP的区别

1.https协议需要到ca申请证书,一般免费证书很少,需要交费。

2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

3.http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。

4.http的连接很简单,是无状态的。

5.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

个人理解

HTTP和HTTPS是完全不同的连接方式,用的端口也不一样,前者是80,后者是443.HTTPS就是非对称加密算法,客户端首先会向服务端发起请求,这时服务端会给客户端返回一个证书,证书里面包含产生的公钥,这时,客户端会随机产生对称密钥,然后用服务端返回的公钥对该密钥进行加密,再传输给服务端,服务端用本地的私钥进行解密,得到对称密钥。接下来,客户端和服务端就使用对称密钥进行通信了.

免费获取SSL证书的方式

我们去阿里云网站获取免费的SSL证书

点击购买证书然后按照下图所示你就能看到免费的SSL证书了

下载证书

  • 这里购买免费的SSL证书,申请完成之后,直接在服务平台下载即可
  • 下载完成后把下载好的证书文件上传到 /etc/ssl这个目录中并解压
  • 一定要注意位置,不然启动nginx会出现文件没有找到的错误
  • 证书上传成功后我们要去写几处配置 

对wordpress文章内的图片及后台强制https设置

wordpress上传的图片都写入了绝对地址,也就是启用https前所有上传到文章的图片都是以http://开头的地址存储

如果不转换成https访问网站时浏览器顶部的“小锁”会在某些浏览器显示安全警告

让图片变成https地址很简单,只需要在当前主题的functions.php文件中添加以下代码

/* 替换图片链接为 https */
 function my_content_manipulator($content){
     if( is_ssl() ){
         $content = str_replace('http://www.xxx.com/wp-content/uploads', 'https://www.xxx.com/wp-content/uploads', $content);
     }
     return $content;
 }
 add_filter('the_content', 'my_content_manipulator');

开启登录和后台https访问

打开网站根目录下的wp-config.php文件,在文件底部添加以下代码

/* 强制后台和登录使用 SSL */
 define('FORCE_SSL_LOGIN', true);
 define('FORCE_SSL_ADMIN', true);

配置站点目录的nginx配置文件

把下面配置写入Nginx的配置文件nginx.conf

网站这时候虽然支持了 HTTPS 访问,但是也可以使用 HTTP 来访问

考虑到搜索引擎目前收录的都是 HTTP 链接,需要将http重定向到https

server
 {
  listen 80;
  server_name blog.wgzll.cn;
 access_log logs/access.log main;
 error_log logs/error.log crit;
 rewrite ^(.*) https://$host$1 permanent;
 }
 server
 {
  listen 443;
  server_name blog.wgzll.cn;
  access_log logs/access.log main;
  error_log logs/error.log crit;
  index index.php index.html index.html;
  root /code;
 ssl on;
 ssl_certificate /etc/ssl/4248541_blog.wgzll.cn.pem; #/etc/sll下的.pem文件
  ssl_certificate_key /etc/ssl/4248541_blog.wgzll.cn.key; #/etc/sll下的.key文件
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  location / {
  if (!-e $request_filename)
  {
  rewrite ^(.*)$ /index.php?s=/$1 last;
  }
  }
 location ~ .php$ {
  include fastcgi_params;
  fastcgi_pass unix:/tmp/php-fcgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  location ~ ..(gif|jpg|jpeg|png|bmp|swf)$ {  expires 3d;  access_log off;  }  location ~ ..(js|css)$ {
  expires 3d;
  access_log off;
  }
 }

 

检查配置文件语法是否正确,然后重启服务

nginx -t
systemctl restart nginx

 

出现404报错解决方式

这个是伪静态的问题,使用朴素链接可以解决此问题
网站后台--->设置--->固定链接

部署完成

网页地址栏出现小锁标志,表示证书安装成功
SSL数字证书部署在服务器上后,用户浏览器访问网站时,展示如下

小结

证书安装完成后,如果网站无法通过https正常访问
需确认您安装证书的服务器443端口是否已开启或被其他工具拦截
如果您使用的是阿里云ECS服务器,请前往ECS控制台安全组页面配置放行443端口


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM