你还没有升级到Https吗

一颗蔬菜 2019-09-15 PM 79℃ 0条

早就想给博客配置Https,感觉挺难的,今天上手试了一下,真的挺难的。

参考了几位博主的方法,理论上应该半小时就足够了,按照室友的办法15分钟应该差不多。

我的情况是从早上9点弄到下午5点才完全配置好。

遇到的问题大概有以下几点:

1.Nginx绑定Https证书
2.访问网站时,浏览器直接把源码文件(.php)下载下来
3.除主页以外的其他页面都是404

问题出在哪?

都出在Nginx的配置文件上。

接下来,我来描述一下我的操作过程:

遇到的第一个疑问是Nginx的配置文件是/usr/local/nginx/conf/nginx.conf还是/etc/nginx/nginx.conf?

我对Nginx不熟悉,除了手动搭建过Nginx服务器之外没有接触过Nginx。百度了一下两者的区别,得到的很多答案都不是地球的语言。最简单的办法就是执行nginx -t命令,会得到下面的执行结果:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

显然,本机的Nginx配置文件就是/etc/nginx/nginx.conf

下面,我们先申请Https证书,申请证书的平台很多,个人首推腾讯云,快捷方便,申请页面都是中国字,还配有近期发布的教程,含视频。

申请地址:腾讯云

申请好证书后,将证书上传到服务器的/etc/nginx/目录下,如果存放的目录不正确,Nginx会提示正确的存放位置。

接着,我们就把注意力放在Nginx配置文件上吧。

不,我们还有一点小问题需要解决一下:

1.编辑Typecho站点根目录下的文件config.inc.php加入下面一行配置,否则网站后台还是会调用HTTP资源。

define('__TYPECHO_SECURE__',true);

2.找到站点主题目录下的 comments.php 文件,并搜索 $this->commentUrl(),将其替换为:echostr_replace("http","https",$this->commentUrl());

好的,我们现在集中精力搞定Nginx配置文件。

先不说我经历了什么,我直接贴代码吧。

server {
                listen 443 ssl;
                server_name www.suwenjin.com; // 域名
                ssl on;
                ssl_certificate 1_www.suwenjin.com_bundle.crt; // Https证书名称
                ssl_certificate_key 2_www.suwenjin.com.key;  // 私钥名称

                index index.html index.htm index.php;
                root /home/wwwroot/www.suwenjin.com; // Typecho站点目录
                
                // 若缺失以下两行代码,会遇到问题3.
                include typecho.conf; 
                include enable-php-pathinfo.conf;
               
                // 若缺失location~ \.php${...}代码块,会遇到问题2。原因是Nginx并不能直接解析php文件,它需要将php文件通过cgi提交给fpm来解析,然后再将解析结果返回给Nginx。
                location ~ \.php$ {
                                   fastcgi_pass   unix:/tmp/php-cgi.sock;
                                   fastcgi_index  index.php;
                                   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                                   include        fastcgi_params;
                                 }
                }
// 下面的代码块的作用是当以http的方式访问博客时,自动改用https访问。
server {
                listen 80;
                server_name suwenjin.com www.suwenjin.com;
                rewrite ^(.*) https://www.suwenjin.com$1 permanent;
       }

特别注意,/etc/nginx/nginx.conf的代码结构如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
       ....
}

http {
      server {
            ...
      }
      server {
            ...
      }
      ...
}

需要修改的地方,我已在代码中注释。不需要修改的地方,在没有异常的情况下我不建议你随便修改。

在配置的过程中,记得及时清除浏览器缓存。

本文仅提供参考,不同Linux平台或Nginx版本都可能导致配置不同。有任何问题,欢迎在评论区留言,希望本文能够帮到你。

标签: 踩坑

非特殊说明,本博所有文章均为博主原创。