centos6.9上的wordpress站点添加ssl证书踩坑记

前言

这几天闲着没事干,看到自己站点每次在chrome里打开左上角显示不安全就感觉很不爽,于是乎想搞个ssl证书用https,可是没想到这一搞就搞了一下午。让这件事变得很tough的原因主要是。。。

  • 自己对于web服务器的配置和原理掌握的还是不行,很多地方看半天日志搞不懂什么情况,google也搜不到然后就一通乱改

  • 我当时建站的时候用的是腾讯云的一键安装,他这个自动程序搞出来的结果和正常的自己手动安装的标准流程很多地方不一样,导致我无论是找文件的位置还是设置用户还是设置端口都很头疼

  • 网上各种讲教程的博客,时效性太差,很多命令和软件包早已失效,照着做下来各种报错

言归正传

首先选择一个ssl证书,这里我当然也是选择了免费的Let’s Encrypt。之后就开始参考各种博客来装,基本上他们讲的都是用certbot来装,一条命令yum install certbot,但是我怎么操作都是显示没有软件包,一开始以为是软件源的问题,后来装了个各种依赖,换了阿里的源还是不行,然后就google了半天挖出来一个不用certbot的方法。
他这里讲的要先把python升级到2.7,不过我没升级也成功了。首先获取letsencrypt

#获取letsencrypt
git clone https://github.com/letsencrypt/letsencrypt
#进入letsencrypt目录
cd letsencrypt
#生成证书
./letsencrypt-auto certonly --standalone --email qushipei1998@outlook.com -d itewqq.cn -d www.itewqq.cn

这里的邮箱是自己的邮箱,后面两个是自己的域名
然后这时候就是报错 problem-binding-to-port-80-with-standalone,原因是80端口被占用,哦忘记把nginx停掉了,然后输命令把nginx关掉,又报错关闭失败,关不了?又google一波,stackexchange大佬讲了半天最后也就是你直接kill吧的意思,无语,用

ps -ef |grep nginx

查看nginx有关的进程,总共4个,其中一个是被nginx带动的php-fpm(因为wordpress是网页交给php处理)全部kill掉,ok,这时候我的网站就成功的gg了^_^

这时候再次生成证书,显示congratulations说明成功了,在目录/etc/letsencrypt/live/itewqq.cn/ 下有4个文件就是生成的密钥证书文件。

  • cert.pem – Apache服务器端证书
  • chain.pem – Apache根证书和中继证书
  • fullchain.pem – Nginx所需要ssl_certificate文件
  • privkey.pem – 安全证书KEY文件

然后这时候需要改nginx的配置文件,添加一个server。网上很多教程说的是改/etc/nginx/nginx.conf,但是我这里的情况是这个nginx.conf文件并没有具体的写出配置,而是只有user之类的基本信息,后来接着往下看发现了注释里写配置文件在 /etc/nginx/conf.d/下,cd进去之后发现三个.conf,之前用的是default.conf,然后还有一个ssl.conf,看来nginx是考虑到了这种需求,这样的话就不用再额外写server配置,只需要改ssl.conf里面的配置就可以了。主要的部分改成图中所示即可,最主要的是两行

 ssl_certificate /etc/letsencrypt/live/itewqq.cn/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/itewqq.cn/privkey.pem;

现在搞定配置文件了之后,重启nginx,重启失败,嗯,为什么我一点都不意外

报错 nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

查了一波之后把default.conf中的listen [::]:80 default_server; 注释掉,再次重启成功。

但是这时候进我的网站看到的却是个nginx的测试页面╰(‵□′)╯

佛了,其实刚才那个报错已经让我很迷,我之前只是把nginx给停掉了,又没有修改默认的配置文件,为什么重启一次就不行?我到现在仍然没有搞明白这个问题。。

但是这个问题确实出现了我也没办法,只能重新把nginx所有的配置文件想办法重新写一下让网站活过来,但是我又发现当初的一键脚本安装的结果和正常安装的差别很大。。。我之前在另一台Ubuntu上装的时候都是按照标准流程来的,所以写配置文件也是想当然的以为是那样,所以肯定不行。首先我发现wordpress的根目录根本就不是正常的 /var/www/xxxx ,实际上这目录里什么都没有。找了半天在很奇特的另一个文件夹里找到了我的wordpress根目录,然后把他设置为nginx的root目录,再把该目录权限给了nginx,并且这里我把之前的nginx配置文件全删了,按照ngxin官网上的配置wordpress的脚本重新写了一下。

# Upstream to abstract backend connection(s) for php
upstream php {
        #我不用socks所以这个注释掉
        #server unix:/tmp/php-cgi.socket;
        #默认的是9000,但是我后来改成了我自己的7288
        server 127.0.0.1:9000;
}

server {
        ## Your website name goes here.
        server_name domain.tld;
        ## Your only path reference.
        root /var/www/wordpress;
        ## This should be in your http block and if it is, it's not needed here.
        index index.php;
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

然后再说php的问题。因为nginx里写php的本地server 端口号要跟php-fpm的配置文件一致,我翻看之前的记录发现我原来的网站用的php5.6,然后去找到这个版本的配置文件 /var/php-fpm/5.6/xxx我的ftp用户名xxxxx/php-fpm.conf , 发现里面的端口号7288,就把nginx的也改成这个,但是这时候重启服务却显示失败,查nginx的 /var/log/nginx/error.log ,发现一堆英语说连接到php什么的失败?然后我将信将疑(瞎几把试)的把nginx里的端口号改成了默认的9000,这时候竟然成功了,而且浏览器也成功刷出来了我的wordpress网页(泪目,好久不见)

但是问题还远没有结束,我随手更新了下统计插件却弹出来个 要执行请求的操作,wordpress需要访问您网页服务器的权限 的窗口

~~wdnmd?什么鬼~~ 输进去ftp账号密码然后还是不行报个404什么的,这时候想了想,应该又是权限问题,然后按照网上两种常用的方法改了权限但都还是不行,不会再弹出需要ftp了但是并没有成功安装,思考一波去看日志,但是查nginx日志此时没有任何错误,挠头,忽然想起来是php的锅,因为网站装插件的时候操作者应该是php-fpm,而他的user好像不是nginx?然后又想起来那个7288端口号俩不一致的坑还没填,查了半天各种文档无果。

xjb搞了半天,又 ps -ef |grep nginx 一下发现这时候只有3个进程???并没有看到php这三个字母,但是为什么能显示出正确的网页呢???疯狂挠头意识到问题并不简单。首先是killall php-fpm,然后再 /usr/local/php5.6/sbin/php-fpm 重重启一下,但是问题并没有解决。htop找所有的进程看看,然后发现了一个极其zz的bug

在我用 /usr/local/php5.6/sbin/php-fpm 命令重启的时候他采用的配置文件竟然不是 /var/php-fpm/5.6/xxx我的ftp用户名xxxxx/php-fpm.conf 而是 /usr/local/php5.6/etc/php-fpm.conf ,妈卖批哦怎么还有这种操作,于是把配置文件换成正确的 /usr/local/php5.6/sbin/php-fpm -y /var/php-fpm/5.6/KZYJSHklEzs/php-fpm.conf ,重启php-fpm和niginx,重启失败,想起来nginx里配置文件端口号还没改,又去改成7288,再次重启服务。终于能够正常更新插件了,而且这时候再查nginx进程也是4个了。

但是这时候试了下写文章发现插入图片会报找不到临时文件夹,检查权限发现php-fpm.conf所指向的tmp文件夹权限不是nginx的(因为我把配置文件全部重写了。。所以用户全变了),改完之后重启。

嗯,终于搞定了O(∩_∩)O

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用 Akismet 来减少垃圾评论。了解我们如何处理您的评论数据