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.conf
网站这时候虽然支持了 HTTPS 访问,但是也可以使用 HTTP 来访问,
考虑到搜索引擎目前收录的都是 HTTP 链接,需要将http重定向到https
server
{
listen 80;
server_name www.hyithack.com;
# access_log logs/access.log main;
# error_log logs/error.log crit;
rewrite ^(.*) https://$host$1 permanent;
}
server
{
listen 443 ssl;
server_name www.hyithack.com;
access_log logs/access.log main;
error_log logs/error.log crit;
index index.php index.html;
root /code;
# ssl on;
ssl_certificate /etc/ssl/.pem;
ssl_certificate_key /etc/ssl/.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
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 127.0.0.1:9000;
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 #查看 Nginx 当前的状态
systemctl restart nginx #重启Nginx
完成安装
网页地址栏出现小锁标志,表示证书安装成功
SSL数字证书部署在服务器上后,用户浏览器访问网站时,展示如下
小结
证书安装完成后,如果网站无法通过https正常访问
需确认您安装证书的服务器443端口是否已开启或被其他工具拦截
如果您使用的是阿里云ECS服务器,请前往ECS控制台安全组页面配置放行443端口
主页和后台管理https访问正常,其他页面访问出现404错误
这个是伪静态的问题,使用朴素链接可以解决此问题
网站后台—>设置—>固定链接