Nginx配置HTTPS

#简介
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

  1. http_ssl_module模块
    http_ssl_module模块提供了Nginx支持https的功能。若没有这个模块,配置会失败。
    验证是否安装http_ssl_module模块(需配置nginx的环境变量):
    nginx -V
    若没有配置环境变量,需要到nginx目录下的sbin目录执行。
    输出包含--with-http_ssl_module字符串则代表已经安装http_ssl_module模块。
  2. 准备证书私钥
    将证书文件和私钥文件拷贝到nginx根目录下的/conf目录。
    证书文件一般是 .crt 文件,私钥文件是 .key 文件。
  3. 编辑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;
     }
 }

  1. 验证配置文件
    nginx -t
    与步骤1一样,需配置环境变量。
    若配置正常会在输出内容末尾看到is successful。否则会输出Error错误信息。
  2. 重启nginx
    nginx -s reload 或者 systemctl restart nginx
    同样需配置环境变量。

##http重定向https
配置好https后,http依然可以访问。若不想http访问,可以重定向到https。
在上述的步骤3中追加如下内容。

server {
 listen 80;
 #请填写绑定证书的域名
 server_name example.com;    #注意填写自己的域名
 #把http的域名请求转成https
 return 301 https://$host$request_uri; 
}

然后继续执行步骤4和步骤5。

#typecho开启https
给nginx配置好https还不行,typecho代码还需要配置。

  1. 编辑Typecho站点根目录下的config.inc.php
/** 添加如下代码 */
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);
  1. 编辑站点主题目录下的 comments.php
$this->commentUrl()
/* 将以上代码替换成一下代码*/
/* 注意:域名最后不要添加“/”这个字符 */
echo str_replace("http","https",$this->commentUrl());
  1. 更新数据库数据
    数据库存的旧数据,比如文件的链接可能是以http开头的,需要换成https。
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')

你可能感兴趣的:(nginx,https,服务器)