Typecho全站https

给你的typecho加上安全锁。

一、修改Typecho设置

一共需要注意3点:
1.用管理员登录Typecho,并将所有设置中的链接逐一改为 https;
2.在外观设置中,编辑 comments.php ,找到 “添加新评论”的地方,将 commentUrl() 修改为:

<span id="response" class="widget-title"><?php _e('添加新评论'); ?></span>
<form method="post" action="<?php echo str_replace("http","https",$this->commentUrl());  ?>" id="comment-form">

3.修改 /var/www/html/config.inc.php ,增加如下内容:

/** 启用HTTPS */
define('__TYPECHO_SECURE__', 'true');



二、准备SSL证书

将申请的证书文件放置在一个安全目录下,例如 /etc/nginx/ssl/,然后修改Nginx的配置文件:

server {
    listen 80;
    server_name psicmi.cc;
    server_name www.psicmi.cc;
    server_tokens off;

    rewrite ^(.*)$  https://$host$1 permanent;
}

server {
    listen 443;
    server_name psicmi.cc;
    server_name www.psicmi.cc;
    server_tokens off;



    ssl on;

    ssl_certificate /etc/nginx/ssl/psicmi.cc.cer;
    ssl_certificate_key /etc/nginx/ssl/psicmi.cc.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'DHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;


    access_log /var/log/nginx/psicmi.cc.access.log main;
    error_log /var/log/nginx/psicmi.cc.error.log debug;

    location / {
      root /var/www/html;
      index index.php index.html index.htm;
    }

    location ~ .php$ {
      root /var/www/html;
      fastcgi_pass   127.0.0.1:19000;
      fastcgi_index  index.php;

      ## /var/www/html 是docker 容器里面的目录
      fastcgi_param  SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
      include        fastcgi_params;
    }

    ##匹配nginx需要交给php-fpm执行的URI,先要允许pathinfo格式的URL能够被匹配到
    ##所以要去掉$
    ##nginx文档中的匹配规则为:^(.+\.php)(.*)$
    ##还有~ \.php这种写法 和 ~ \.php($|/)这种写法
    ##都是差不多意思没啥严格区别
    ##唯一区别就是有多个匹配php的location的话需要留意权重差异
    location ~ ^(.+\.php)(.*)$ {
         root /var/www/html;
         fastcgi_pass   127.0.0.1:19000;
         fastcgi_index  index.php;

         ##增加 fastcgi_split_path_info指令,将URI匹配成PHP脚本的URI和pathinfo两个变量
         ##即$fastcgi_script_name 和$fastcgi_path_info
         fastcgi_split_path_info  ^(.+\.php)(.*)$;

         ##PHP中要能读取到pathinfo这个变量
         ##就要通过fastcgi_param指令将fastcgi_split_path_info指令匹配到的pathinfo部分赋值给PATH_INFO
         ##这样PHP中$_SERVER['PATH_INFO']才会存在值
         fastcgi_param PATH_INFO $fastcgi_path_info;

         ##在将这个请求的URI匹配完毕后,检查这个绝对地址的PHP脚本文件是否存在
         ##如果这个PHP脚本文件不存在就不用交给php-fpm来执行了
         ##否者页面将出现由php-fpm返回的:`File not found.`的提示
         ## 代码在Docker里面,无需判断!!!
         ##if (!-e /var/www/html/$fastcgi_script_name) {
             ##此处直接返回404错误
             ##你也可以rewrite 到新地址去,然后break;
             # return 404;
         #}

         fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
         include        fastcgi_params;
    }

}

然后,重启Nginx即可!