Nginx配置HTTPS

2023-05-18 14:20:06 浏览数 (1)

简介

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模块。

  1. 准备证书私钥

将证书文件和私钥文件拷贝到nginx根目录下的/conf目录。 证书文件一般是 .crt 文件,私钥文件是 .key 文件。

  1. 编辑Nginx根目录下的conf/nginx.conf 文件
代码语言:javascript复制
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

  1. 验证配置文件

nginx -t 与步骤1一样,需配置环境变量。 若配置正常会在输出内容末尾看到is successful。否则会输出Error错误信息。

  1. 重启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代码还需要配置。

  1. 编辑Typecho站点根目录下的config.inc.php
代码语言:javascript复制
/** 添加如下代码 */
/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

PHP

  1. 编辑站点主题目录下的 comments.php
代码语言:javascript复制
$this->commentUrl()
/* 将以上代码替换成一下代码*/
/* 注意:域名最后不要添加“/”这个字符 */
echo str_replace("http","https",$this->commentUrl());

PHP

  1. 更新数据库数据

数据库存的旧数据,比如文件的链接可能是以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

0 人点赞