在nginx下配置ssl证书,实现https访问

发布于 / Geek-无尽探索 / 0 条评论

网站为什么要开启HTTPS?首先需要了解HTTPS是什么。根据维基百科的解释

超文本传输安全协议Https(全称:Hypertext Transfer Protocol Secure,也被称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。

下面来了解如何实现https

一.购买或申请免费的SSL证书。

由于只有浏览器或者系统信赖的 CA 才可以让所有的访问者通畅的访问你的加密网站,而不是出现证书错误的提示。所以我们跳过自签证书的步骤,直接开始签署第三方可信任的 SSL 证书。 可以到let’s encrypt上面申请。我用了阿里云的云盾证书。

二.Nginx 配置 HTTPS 网站以及增加安全的配置

修改Nginx.conf文件,端口为443

server {
	listen 443 ;
	ssl on;
	ssl_certificate /etc/ssl/private/certificate.crt;
	ssl_certificate_key /etc/ssl/private/private.key;
	ssl_session_timeout 10m;
}

再单独开一个 Nginx 配置,把 HTTP 的访问请求都用 301 跳转到 HTTPS

server {
	listen 80;
	server_name www.example.com example.com;
	rewrite ^ https://$server_name$request_uri permanent;
}

如上,我们80端口的http全部301重定向到https。这样就不会对SEO产生什么不利的影响。

至此,访问不带https也会跳转到加密的https

三.实现wordpress全站https

1.登录和后台强制开启SSL

修改WP-config.php文件,直接在文件末尾加入以下两行代码:

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

2.WordPress开启站内链接支持SSL

我们都知道,我们如果使用了WordPress的多媒体上传和插入图片附件的时候,附件都被WordPress标记为了绝对链接,一般需要修改数据库,但这种方法是非常不推荐的,对于不是非常熟悉数据库的同学们估计网站直接被毁也是可能的。我从泪雪博客上找到了以下方法

编辑当前主题下的 function.php 文件,加入以下代码:

方法一:HTTPS绝对链接替换
//WordPress SSL at 2016/12/29 update
add_filter('get_header', 'fanly_ssl');
function fanly_ssl(){
	if( is_ssl() ){
		function fanly_ssl_main ($content){
			$siteurl = get_option('siteurl');
			$upload_dir = wp_upload_dir();
			$content = str_replace( 'http:'.strstr($siteurl, '//'), 'https:'.strstr($siteurl, '//'), $content);
			$content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), 'https:'.strstr($upload_dir['baseurl'], '//'), $content);
			return $content;
		}
		ob_start("fanly_ssl_main");
	}
}
方法二:HTTPS相对链接替换

//WordPress SSL
add_filter('get_header', 'fanly_ssl');
function fanly_ssl(){
	if( is_ssl() ){
		function fanly_ssl_main ($content){
			$siteurl = get_option('siteurl');
			$upload_dir = wp_upload_dir();
			$content = str_replace( 'http:'.strstr($siteurl, '//'), strstr($siteurl, '//'), $content);
			$content = str_replace( 'http:'.strstr($upload_dir['baseurl'], '//'), strstr($upload_dir['baseurl'], '//'), $content);
			return $content;
		}
		ob_start("fanly_ssl_main");
	}
}

以上两种方法都可以完美支持HTTPS协议,如果你的站点需要支持HTTP和HTTPS双协议共存,那么就选择使用方法二的相对链接替换方法吧。

转载原创文章请注明,转载自: everglow » 在nginx下配置ssl证书,实现https访问
Not Comment Found