简介
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。----摘自百度百科。 HTTPS (全称:Hypertext Transfer Protocol Secure [5] ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。----摘自百度百科。
详解
配置https
- http_ssl_module模块
http_ssl_module模块提供了Nginx支持https的功能。若没有这个模块,配置会失败。
验证是否安装http_ssl_module模块(需配置nginx的环境变量):
nginx -V
若没有配置环境变量,需要到nginx目录下的sbin目录执行。
输出包含--with-http_ssl_module
字符串则代表已经安装http_ssl_module模块。
- 准备证书私钥
将证书文件和私钥文件拷贝到nginx根目录下的/conf目录。 证书文件一般是 .crt 文件,私钥文件是 .key 文件。
- 编辑Nginx根目录下的conf/nginx.conf 文件
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name example.com; #注意填写自己的域名
#请填写证书文件的相对路径或绝对路径
ssl_certificate example.crt; #步骤2中拷贝的证书文件
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key example.key; #步骤2中拷贝的私钥文件
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
root html;
index index.html index.htm;
}
}
YAML
- 验证配置文件
nginx -t
与步骤1一样,需配置环境变量。
若配置正常会在输出内容末尾看到is successful
。否则会输出Error
错误信息。
- 重启nginx
nginx -s reload
或者 systemctl restart nginx
同样需配置环境变量。
http重定向https
配置好https后,http依然可以访问。若不想http访问,可以重定向到https。 在上述的步骤3中追加如下内容。
代码语言:javascript复制server {
listen 80;
#请填写绑定证书的域名
server_name example.com; #注意填写自己的域名
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
YAML
然后继续执行步骤4和步骤5。
typecho开启https
给nginx配置好https还不行,typecho代码还需要配置。
- 编辑Typecho站点根目录下的config.inc.php
/** 添加如下代码 */
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);
PHP
- 编辑站点主题目录下的 comments.php
$this->commentUrl()
/* 将以上代码替换成一下代码*/
/* 注意:域名最后不要添加“/”这个字符 */
echo str_replace("http","https",$this->commentUrl());
PHP
- 更新数据库数据
数据库存的旧数据,比如文件的链接可能是以http开头的,需要换成https。
代码语言:javascript复制UPDATE `typecho_contents` SET `text` = replace (`text`, 'http://example.com', 'https://example.com')
/* 链接替换为自己的网站 */
/* 这是我的 */
UPDATE `typecho_contents` SET `text` = replace (`text`, 'http://example.com', 'https://example.com')
SQL