WordPress密码找回或修改

自己的Wordpress出现了两次密码忘记的情况,第一次是浏览器Chrome有记忆密码可以进入控制面板的情况,另一次手贱改了密码直接控制面板都进不去了,网上找了各种介绍,感觉不是很系统,乱七八糟,对于一个我类似的小白都把简单问题说的复杂化了,总结一下我的方法吧,希望对大家有用。

WordPress我目前用的4.99版本,在忘记密码后,控制台点忘记密码,发送的邮件无法修改密码,据说是Wordpress的问题,几年了还没改。所以不要指望这个方式改密码了。网上有通过修改页面的语句的,但是我没有成功,后来也觉得比下面方式麻烦风险也更大些。

未分类

一. 浏览器还记忆着wordpress控制面板密码的情况,能进入控制台。

这种情况很好解决,进入控制台。也就是进入:你的网址/wp-admin/

进入后找到左侧的-用户

未分类

然后左侧中央就会出现自己的wordpress的账户了,点击”编辑”,英文版本就是”Edit”,话说英语好学编程都容易,难怪当初我那时候高考招生软件的有英语成绩要求,还是外教授课英文教材,学费也是吓退一群人,那还是软件没火的年代。。。

未分类

然后下拉菜单,找到”新密码-生成密码”,点击生成密码,

未分类

点击后会随机生成一个密码,删除它,修改成自己想要的密码,然后点击左下角的”更新个人资料”,就完成了更新密码。别忘了把浏览器的记忆密码改成这个密码,这样就算忘记了密码,只要能默认进入控制台还是能随便改密码的。

未分类

二. 浏览器默认密码不能直接进入控制面板了。。。我第二次就是,通过上面方式更新了密码后没有及时修改chrome浏览器的默认进入密码,大家记得及时修改。或者用小本本记下wordpress密码,毕竟这东西不是银行卡密码,记本上也没事的。

这种修改其实也很简单,但是查了很多网址说的不是很清楚,搞得晕头转向好像很复杂。方式就是通过数据直接修改,用到的软件是PhpMyAdmin,又称php。

刚开始看了好多文章就直接说用这个软件登录数据库,尼玛都不说怎么安装的,看了一堆教材怎么在自己服务器安装,最后才发现如果一般人们用的LNMP一键安装安装包就默认安装了这个软件。。。哎。这下更觉得LNMP这个傻瓜安装包真的想的挺周到的。支持!!!

登录方式也很简单:直接输入自己的网址的iP地址进入LNMP页面,别告诉IP地址我这个你也能忘,快去查查吧。通过这个地方我终于知道我的DNS带免费的反查功能,也就是通过leiyin.info反查IP地址是多么重要了,可以保护自己的服务器安全啊。

未分类

点击PhpMyAdmin进入软件。这时要求输入用户名和密码,1.5之前版本如果安装时不输入直接回车,密码为root,否则为你输入的密码。1.5及之后版本为 lnmp.org#随机数字。如果又忘记了密码也可以恢复默认,方法可以在LNMP的网站找方法,地址如下https://lnmp.org/faq/lnmp-1-2-tools.html

未分类

这时候我无法登录PhpMyAdmin,以为悲剧了,可是明明记录了密码啊。后来又是网上各种找,不过后来想起来不会和浏览器有关吧,换上IE直接试试,顺利进入。。。好吧

进入后找到wp_users这个语句,点击进入。

未分类

点击Edit进行编辑。

未分类

在user_pass中,把varchar(255)改成MD5,后面设置成123456,也就是登录密码改成了123456。

这里varchar(255)有的不是255,无所谓的。

未分类

点击最下端的”Go”完成修改。然后可以使用123456的密码登录wordpress控制面板了。记得登陆后把密码123456用第一种方法修改成别的,然后记录在小本本上。

未分类

第二步参考了下面网址,表示感谢https://www.bwgyhw.com/bandwagonhost-build-page-phpmyadmin/

大功告成。又学会了一些网站的假设和使用,虽然很简单吧,还是很有成就感的。越发觉得LNMP挺好的,下一步准备升级1.5版本,然后把网站改成加密的,涉及到wordpress的备份恢复了,等我的帖子吧。

WordPress文章页添加面包屑导航

前言

浏览网站的时候经常会发现许多网站页面上有个如下图所示的面包屑导航,非常漂亮而且有利于帮助用户快速学习和了解网站内容和组织方式,从而形成很好的位置感。DUX主题4.0版本开始增加了这么个功能,之前有网友也像我询问过这个功能,这两天刚好有时间就简单整理了下分享出来,希望大家喜欢。

未分类

额,出于好奇,还是先了解一下为什么这个导航叫面包屑导航吧。以下内容来自百度百科。

汉赛尔与格莱特是一对兄妹,为樵夫的前妻所生,在后母的逼迫下被父亲抛弃。兄妹俩前后经历了两次遗弃,第一次,汉赛尔沿途用石子做记号,兄妹俩重新回到了家中。第二次被遗弃,汉赛尔用面包屑做记号,却被鸟儿啄食干净,兄妹俩在森林中迷了路。不天的寻路,让他们饥饿难忍,腿脚无力,来到了一个用面包做屋项,糖果做窗户的小屋。饥饿让他们忘记了疲惫,及潜在的危险,啃起了屋子。结果在巫婆的诱骗下,哥哥被锁屋中,妹妹被迫做劳力,就在巫婆要吃掉哥哥之时,妹妹借向巫婆学习添柴之机。将巫婆推入炉中,兄妹俩带着巫婆的财宝,回到了家中。后母己经去世,兄妹俩和父亲一起过上了幸福的生活。

正文

对于面包屑导航网上有很多实现的方法,很多代码也非常细心的提供了对主页、标签页,搜索页、独立页等的支持,但是个人感觉一般也就文章页上真正能用的上,其他页面添加这个功能后多少显得累赘,故这里只提供文章页面添加此功能的方法,其他页面的添加可参照此法进行。

生成函数

将以下代码添加到主题的 functions.php 文件中去:

//面包屑导航生成函数
function qgg_breadcrumbs(){
    if( !is_single() ) return false;

    $categorys = get_the_category();
    $category = $categorys[0]; 
    return '当前位置:<a href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a> <small>></small> '.get_category_parents($category->term_id, true, ' <small>></small> ').get_the_title();
}

前端显示

将以下代码添加到主题的 single.php 文件中去:

<!-- 面包屑导航前端显示代码 -->
<div class="breadcrumbs">
    <div class="container"><?php echo qgg_breadcrumbs() ?></div>
</div>

样式美化

将以下代码添加到主题的主样式表里面去,DUX主题是 main.css文件,其他主题可能是 style.css 文件,具体请咨询主题作者。

.breadcrumbs{padding: 15px 0;font-size: 12px;line-height: 1;text-align: left;background-color: #fff;margin-bottom: 15px;margin-top: -15px;border-bottom: 1px solid #EBEBEB; box-shadow: 0 1px 3px rgba(0,0,0,.04);color: #999;}
.breadcrumbs small{font-size: 12px;font-family: serif;color: #bbb;margin: 0 2px;font-weight: bold;}
.breadcrumbs a{color: #999;}
.breadcrumbs a:hover{color: #666;}
@media (max-width:640px){
 .breadcrumbs{margin-top: 1px;margin-bottom: 0;padding: 10px 15px;border-bottom: none;margin-bottom: 1px;}
}

样式代码直接复制的 DUX 主题的,具体样式大家可自行调整。

将WordPress上面的网站迁移至另外一台VPS

站长们可能会遇到一个问题,之前的VPS配置可能不够用了,所以需要换一个VPS(比如:搬瓦工VPS)。
  
一、打包源网站

打包一下源网站的数据,这个操作应该很简单,相信大家都会做。比如你的网站目录是/data/www/bwh.idcspy.com,那么我们打包一下这个目录:

zip -r oldtang.com.zip /data/www/bwh.idcspy.com

这样我们就在当前目录下生成了一个 bwh.idcspy.com.zip 的压缩文件,里面包含了网站的所有文件。

二、打包数据库

进入 phpmyadmin,然后选择对应的MySQL 数据库,导出即可,另存为 .sql 文件就行。
  
三、迁移数据

迁移也很简单,我们将 .zip 文件放到网站目录下,然后我们从新的 VPS 上直接 wget 这个文件即可。

wget http://bwh.idcspy.com/bwh.idcspy.com.zip

然后解压到新的 VPS 上对应的目录下

unzip bwh.idcspy.com.zip /data/www/bwh.idcspy.com

接下来导入数据库,进入新的 VPS 的 phpmyadmin 里面,选择对应的数据库,导入.sql 文件。

四、更改解析

将域名的解析从原来的搬瓦工VPS 指向新的搬瓦工VPS 的 IP 地址就可以了,然后等待解析生效。

WordPress 教程:如何通过 PHP 代码修改表结构和索引

我们在 WordPress 创建表之后,由于业务的需求,可能需要对表结构进行修改,比如增加多一些字段,或者删除一些无用的字段,也有可能因为优化的问题需要对某个表结构增加索引。我们怎么操作呢?

修改表结构

比如我们需要给表 $table 增加一个 field1 字段。

首先我们判断一下,$table 是否已有该字段:

$wpdb->query("SHOW COLUMNS FROM `{$table}` WHERE field='field1'")

如果不含,我们增加:

if(!$wpdb->query("SHOW COLUMNS FROM `{$table}` WHERE field='field1'")){
    $wpdb->query("ALTER TABLE `{$table}` ADD COLUMN `field1` var(15) NOT NULL");
}

修改表索引

比如我们需要给表 $table 增加一个 field1_idx 索引。

首先我们判断一下,$table 是否已有该索引:

$wpdb->query("SHOW INDEX FROM `{$table}` WHERE Key_name='field1_idx'")

如果没有,我们增加:

if(!$wpdb->query("SHOW INDEX FROM `{$table}` WHERE Key_name='field1_idx'")){
    $wpdb->query("ALTER TABLE `{$table}` ADD KEY `field1_idx` (`field1`);");
}

WordPress基础配置文件wp-config.php详解

在安装WordPress博客程序的时候我们常常会碰到下面的问题:当我们按照安装步骤一步步填写好数据库名、用户名、密码/数据库主机以及表前缀的时候,WordPress突然给我们来一句“抱歉,我不能写入wp-config.php文件。”,这就很尴尬了不是。那么wp-config.php文件到底是什么呢,为什么我们安装个博客程序还要写入这么个文件呢?wp-config.php是wordpress的基础配置文件,有了它我们才可以正常的访问数据库,并针对自己的情况进行一些常规的配置。你的服务器之所以无法写入wp-config.php文件,多半是由于文件夹权限不足,一般情况下改为777就可以了,当然你也可以将程序自带的wp-config-sample.php下载下来,等配置完成后重命名为wp-config.php上传至服务器亦可。下面我们就来详细了解一下wp-config.php的一些基本配置。

未分类

告诉你一个小秘密:一定不要使用如Microsoft Word类型的文字处理程序来编辑WordPress文件哦!建议使用Notepad++进行编辑。

配置MySQL数据库参数

/** WordPress数据库的名称 */
define('DB_NAME', 'database_name_here');

/** MySQL数据库用户名 */
define('DB_USER', 'username_here');

/** MySQL数据库密码 */
define('DB_PASSWORD', 'password_here');

/** MySQL主机 */
define('DB_HOST', 'localhost');

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');

首先是DB_NAME的配置,你需要将“database_name_here”替换成你自己的数据库名称。记住,是你的数据库名称而不是你登陆数据库的用户名,一般情况下,如果你选用的是虚拟主机,主机提供商会赠送给你一个数据库(阿里云的虚拟主机数据库可以在/主机管理控制台/数据库信息中查看);如果你选用的是云服务器而又没额外购买数据库的话,那么就需要你自己配置数据库了,此时的数据库名称也就是你自己配置的数据库名称了。

然后是DB_USERDB_PASSWORD了,这两个参数毫无疑问就是你登陆数据库管理工具的用户名和密码了,你只需要将对应的“username_here”与“password_here”替换成自己的用户名和密码就可以了。(阿里云虚拟主机的用户名对应的是数据库信息中的数据库账号一项,ECS服务器的用户名一般是root,对于其他公司的服务器与虚拟主机的数据库信息是什么样的,蝈蝈暂时还没用过,等用过以后再给大家分享一下吧)。

接着是DB_HOST参数设置了,如果你用的是虚拟主机,并且主机提供商赠送了数据库的话,那么将“localhost”替换成对应的数据库地址链接就可以了;如果你用的是服务器,并且是自己在服务器上安装的数据库,一般“localhost”不用更改或者改成“127.0.0.1”就可以了。

#如果你的主机为数据库使用备用端口的话,就需要修改wp-config.php中的DB_HOST值以反映出主机备用端口设置。#

对于localhost

define('DB_HOST', 'localhost:3307');

对于其他

define('DB_HOST', 'mysql.example.com:4454');

如果你实在不清楚自己数据库的地址,有一种更好的方法就是自动检测数据库服务器值:

define('DB_HOST', $_ENV{DATABASE_SERVER});

在WordPress 中,DB_CHARSET可用,以允许数据库字符集的标识(如TIS620 Thai,tis620)在定义MySQL数据库表时被使用。WordPress默认值的utf8,UTF-8支持多国语言,一般保持默认就好了,如果你不了解字符集,随意更改可是会崩盘的哦。DB_COLLATE参数是用来给数据库排序的(即字符集的排序次序)。一般保持留空(null),这样数据库排序才能被MySQL字段分配,这是基于DB_CHARSET所指定的数据库字符集之上的。

未分类

安全密钥与盐

define('AUTH_KEY',        'md9~vb7*_Va _IA8sZYnR)RSGKsB An,.9 uV|V5XLkz=t2 2|}Xf/a)j=%<T_Tg');
define('SECURE_AUTH_KEY', '+,:[):wzxAJx&|2piW.~#?][4fE]NR9-Ffth)6wxHjObks8%3%ZMAPCXvKf9?y|#');
define('LOGGED_IN_KEY',   'yqRwG$FI7|MvfgJIw,fs`uUxE<9$Tu#|qAF2duH|]mF;M[ JEJ|aVODk;~QXupEi');
define('NONCE_KEY',       '4]Dxj4muyYD>_kio1:g%38F9U |i6>v**wOM||UiCzv$`7ou]%)jj%Du%kH#XGEJ');

那么什么是密钥与盐呢?简单点说就是为了保证我们的用户账户安全,通过一段无序的字符来增加密码强度、抗暴力破解的安全机制。WordPress提供了AUTH_KEY、SECURE_AUTH_KEY、LOGGED_IN_KEY和NONCE_KEY这4中密钥进行加密,,它们能够保证用户cookies中的信息得到更好的加密,你可以使用wordpress提供的在线密钥生成器生成一段密钥,你也可以自己设置自己的密钥,总之你自要保证自己的密钥够长够复杂就好。如果你觉得这还不够安全,可以另外再加盐,WordPress提供了AUTH_SALT、SECURE_AUTH_SALT、LOGGED_IN_SALT、NONCE_SALT这4组参数供你设置。需要注意的是,密钥与盐尽量不要经常重新设定,因为你每次设定都会改变cookie,这样会使得当前登陆中的用户自动重新登陆。

数据库表格前缀

$table_prefix  = 'wp_';

数据库表格前缀是什么呢?它更像是你数据库表的标记,是被放在你的数据库表格前面部分的设定值。WordPress提供$table_prefix函数使你能自定义自己数据库表的前缀,那么自定义数据库表格的前缀有什么用处呢?

  1. 自定义数据库表前缀可以减轻你站点受攻击的可能性,总体上提高你的网站安全性;

  2. 如果你使用的是虚拟主机,同时你只有一个赠送的数据库,但是你想要建立多个WordPress站点,如果所有的站点都使用默认的数据表前缀“wp_”,那么当你想要编辑某个站点的数据库表的时候是不是很头疼不知道怎么区分那个表那行数据对应的是那个站点?这时候自定义数据库表前缀的好处就体现出来了,它可以让你轻松管理你的数据库;

开发者调试

define('WP_DEBUG', false);

WP_DEBUG是用来查看WordPress错误并处理的,默认为停用(false),主要是网站上线前开发调试用的。你可以通过在wp-config.php中将其布尔值改为true来开启它也可以通过我爱水煮鱼开发的插件WPJAM来从网站后台开启它,不过,如果不用的话建议关闭就好,毕竟开启后生成的错误文件很大,如果忘记处理会很快占满你的主机空间的。

另外,如果你想要修改WordPress的一些内置JavaScript你可以在wp-config.php中添加以下代码:

define('SCRIPT_DEBUG', true);

zh_CN本地化设置

define('WP_ZH_CN_ICP_NUM', true);

这个主要是针对备案网站显示备案号的设置,如果你的网站备案了,你可以在后台设置/常规中填写上自己的备案号,这地方填写的备案号只针对一些默认的主题有用,很多主题都集成了备案信息的选项,你需要在主题的选项中填写才能在网站前台显示你的备案号。

WordPress目录的绝对路径

if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');

WordPress预定义了ABSPATH,在WordPress的主题以及插件中,如果你获得WordPress根目录的话,就可以用ABSPATH而不用每一次都用dirname(__FILE__)。wp-config.php的最后一行代码是用来提取WordPress变量与包含内容文件的。说到这里就有必要提一下WordPress的文件调用关系了,一般情况下WordPress的文件调用顺序为:

index.php > wp-blog-header.php > wp-load.php > wp-config.php > wp-settings.php > 其他文件

好了,关于WordPress基础配置文件wp-cnfig.php的整理就先进行到这里,后续我会逐步补充完善这篇日志,希望帮助自己学习的同时能够帮助到同样热爱WordPress的你。

Centos 7安装Nginx+PHP+MariaDB环境搭建WordPress博客

WordPress是一个免费的开源项目,是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用,国内外有不少的知名网站建设都是基于WordPress程序,WordPress有许多第三方开发的免费模板和免费插件,安装方式简单易用,相信很多人的第一个站点都是基于WordPress建的。访问官网https://wordpress.org/

在安装ShadowsocksR服务之前希望先对服务器做基本安全配置(非强制) 跳转链接https://www.gyuryong.com/index.php/archives/18/

运行环境搭建

WordPress基于PHP开发的,相信是大家最熟悉也是最容易部署的Web项目了。环境准备:lnmp(linux+nginx+mysql+php)或者lamp(linux+apache+mysql+php),大同小异,本文推荐使用nginx作为Web服务器。
为了避免不必要的麻烦先关闭防火墙和selinux。

1.安装nginx

安装nginx,默认情况Centos7中无Nginx的源,可以如下执行命令添加源,Centos其他版本或者RHEL查看官方教程(教程链接https://www.nginx.com/resources/wiki/start/topics/tutorials/install/):

vi /etc/yum.repos.d/nginx.repo

写入

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

安装nginx:

yum install nginx -y

2.安装php和mariadb

yum install php-fpm php-mysql mariadb-server unzip

3.修改配置文件

修改/etc/nginx/conf.d/default.conf中下面两断内容:

vi /etc/nginx/conf.d/default.conf

更改前:

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

更改后:

    root   /usr/share/nginx/html;
    index  index.html index.htm index.php;
location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

更改前:

#location ~ .php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

更改后:

location ~ .php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $request_filename;
    include        fastcgi_params;
}

修改/etc/php-fpm.d/www.conf配置:

vi /etc/php-fpm.d/www.conf

user = apache改为user = nginx,将group = apache改为group = nginx

4.开启服务

systemctl start nginx.service
systemctl start mariadb.service
systemctl start php-fpm.service

5.设置开机自启

systemctl enable nginx mariadb php-fpm

安装WorePress

1.移除/usr/share/nginx/html内所有文件:

cd /usr/share/nginx/html
rm 50x.html index.html

2.下载WordPress并解压,到官网复制最新版链接(跳转链接https://cn.wordpress.org/download/):

yum install wget -y
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip
unzip wordpress-4.9.4-zh_CN.zip

3.将Web文件移动到根目录并删除没用文件夹:

mv wordpress/* .
rmdir wordpress
rm wordpress-4.9.4-zh_CN.zip

4.权限设置

chown nginx.nginx -R .

5.创建数据库wordpress:

mysql
create database wordpress;
exit

接下来输入你的ip地址就可以安装WordPress了!

一次Ubuntu+nginx搭建wordpress的经历

一. 前言

开学之初,我发现Azure上有一个100刀的学生优惠。但在领取这个优惠之后,我却一直没有使用的机会,一是自己不会用,二是没有多余的时间。现在等来了放假,终于可以好好搞一搞了。:joy:

这次搭博客可谓是踩了不少坑:

  • 百度的教程基本上都是废的,只有谷歌的英文教程才是能用的,好气啊
  • apache2是真难用
  • php各个版本让人混乱

二. 接下来就是搭博客的过程

1、进入Azure的门户,添加一个Ubuntu的主机,学生优惠的主机为B1S,我使用的是公钥登陆,生成公钥的过程就不说了

未分类

2、在网络安全组的入站规则中添加443和80端口

3、接下来是连接主机。可以使用PuTTY或者是MobaXterm,输入ip和用户名,再加上私钥就可以连接了。

未分类

4、安装Nginx

sudo apt-get update 
sudo apt-get install nginx

安装完成后可以用以下命令操作nginx

sudo systemctl stop nginx.service
sudo systemctl start nginx.service
sudo systemctl enable nginx.service

打开网页看看是否有这样的页面出现,如果有的话就可以进行下一步操作了

未分类

5、安装MariaDB

sudo apt-get install mariadb-server mariadb-client

对于Ubuntu 16.04有以下命令

sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service

输入

sudo mysql_secure_installation

然后进行以下操作

Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y

测试以下密码是否能登陆

sudo mysql -u root -p

6、安装PHP7.2 / PHP-FPM

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.2-fpm php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-gd php7.2-xml php7.2-intl php7.2-mysql php7.2-cli php7.2-zip php7.2-curl

7、重启nginx和php

sudo systemctl restart nginx.service
sudo systemctl restart php7.2-fpm.service

8、创建WordPress的数据库

sudo mysql -u root -p
    CREATE DATABASE yourDBname;
    CREATE USER 'yourDBusername'@'localhost' IDENTIFIED BY 'new_password_here';
    GRANT ALL ON yourDBname.* TO 'yourDBusername'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    EXIT;

9、安装wordpress

cd /tmp && wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz
sudo mv wordpress /var/www/html/wordpress
sudo chown -R www-data:www-data /var/www/html/wordpress/
sudo chmod -R 755 /var/www/html/wordpress/

10、配置http服务

我用的是vim

sudo vim /etc/nginx/sites-available/wordpress

找到这个东西的位置, 将example.com 换为自己的网址

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

     client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }
}
PHPCopy

11、开启网站

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

12、对网站进行配置

1)先是将示例配置文件复制一份

sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

2)获取secure key,打开下面的网站。

https://api.wordpress.org/secret-key/1.1/salt/

3)再进行配置

sudo vim /var/www/html/wordpress/wp-config.php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'yourDBname');

/** MySQL database username */
define('DB_USER', 'yourDBusername');

/** MySQL database password */
define('DB_PASSWORD', 'user_password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
PHPCopy

4)再找到secure key的相应位置,将自己获取到的key放进去

不要直接复制!!!
define('AUTH_KEY',         'zP}sLq>K[Q}6+-QS !Fc,wBD%373RYo.C<c=%lnE.!xY:kloSyJ@qIQ`2iVy{Sd[');
define('SECURE_AUTH_KEY',  'Zrw|4{)0]tE}bcHa8@nwM]SC:17b}-IDd)Z%1d}a}cMqI}h@|Kf>oLRL`pXdySLN');
define('LOGGED_IN_KEY',    ',Nl,:NNP+R)%Y$gjpOI8~X?<;?}eTvaI4;l?T@S}V]BwsNT{*e!y.YB^#X=QI@qx');
define('NONCE_KEY',        'n2Z2|H>r|-C-y(yzG*-1btopL;N|);8lZQvIP( Dhy}xtc2vs#(2#ec,C%])Bf~[');
define('AUTH_SALT',        '>`nL:waCX!k~-(9!A2.?PJpKd&,D[r}w(i;~Ck^q1M`YCWF2.fTR%;V7_+}QI76 ');
define('SECURE_AUTH_SALT', 'nshMJqJv2Z_EVt|Wtw?qJCI6N&>^{L-.ig(]Pc.3M!*,sR8i[WZg.5pQP1-t8a$z');
define('LOGGED_IN_SALT',   '-nDGM,|-PWtNy02}0r^,rsJlC5#si%W{@6W]<<#PR}T)9Izv7Rc[]HKk`yk)1v38');
define('NONCE_SALT',       'QzZF]GjCkgNC;,m&jc=~gX-gWo^oUj{W]N+s5-kG?Fq?KQ^ESNhI<+xa-m+;e|?(');

13、配置ssl

1)安装 Let’s Encrypt Client

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

2)获取免费的ssl证书

将example.com 全部更换为自己的域名

sudo certbot --nginx -m admin@example.com -d example.com -d www.example.com

3)接下来的东西按照步骤走

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A


Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y


Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

最后一个一定要选择2

4)重新对配置文件进行配置

sudo nano /etc/nginx/sites-available/wordpress
server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index  index.php index.html index.htm;
    server_name  example.com www.example.com;

     client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

  listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Redirect non-https traffic to https
    # if ($scheme != "https") {
    #     return 301 https://$host$request_uri;
    # } # managed by Certbot

}

三、大功告成

直接打开你的网址,看看是否出现这个页面,出现了就说明成功啦

未分类

基于fastcgi分离和LAMP虚拟主机部署wordpress和DiscuzX

背景

虚拟主机

  如今服务器的配置提升明显,单一主机上部署单一网站会对主机造成大量的性能损失,因此web服务虚拟主机的技术应运而生。所谓虚拟主机指的是在一台机器上运行多个网站(如company1.example.com和company2.example.com)的做法 。虚拟主机可以是“ 基于IP的 ”,这意味着每个网站都有不同的IP地址,或者“ 基于名称 ”,这意味着每个IP地址上都有多个名称,或者“基于端口”,这意味着在同一ip的不同端口上提供不同的网站,通过这些方法使得他们在同一台物理服务器上运行的事实对最终用户来说并不明显。
  Apache是第一批支持基于IP的虚拟主机的服务器之一。Apache的版本1.1及更高版本支持基于IP和基于名称的虚拟主机(虚拟主机)。虚拟主机的后一种变型有时也被称为基于主机的或非IP虚拟主机。
  

fastcgi

  FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
  
  

部署流程

  

部署架构

  

环境

  
3台主机用于分别部署httpd,php和mysql,实现分离
软件版本

未分类
  

架构图

未分类

编译软件


这里我们需要编译的软件为httpd和php,mysql可以考虑使用二进制包或者直接官方yum安装
  

安装开发环境和必要的包

1.安装centos开发工具包

yum groupinstall "development tools" -y

2.安装编译httpd和php需要的包

#部分包需要epel源 
#yum install epel-release -y
yum install pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel -y

编译httpd

这里在192.168.99.130机器上编译httpd2.4

1.创建apache用户

useradd -r apache -s /sbin/nologin

2.解压httpd,apr,apr-util源码包,这里需要的包均可在httpd官网下到

tar xvf httpd-2.4.33.tar.bz2
tar xvf apr-1.6.2.tar.gz
tar xvf apr-util-1.6.1.tar.gz

3.编译httpd

#移动解压的apr和apr-util到指定的httpd源码目录可以省去分别编译3个程序
 mv apr-1.6.2 httpd-2.4.33/srclib/apr
 mv apr-util-1.6.1 httpd-2.4.33/srclib/apr-util

#编译参数,具体含义可以参考./configure的帮助文档或者官方文档
./configure 
--prefix=/app/httpd24 
--enable-so 
--enable-ssl 
--enable-cgi 
--enable-rewrite 
--with-zlib 
--with-pcre 
--with-included-apr 
--enable-modules=most 
--enable-mpms-shared=all 
--with-mpm=prefork

make && make install

4.配置环境变量

vim /etc/profile.d/httpd.sh

PATH=/app/httpd24/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

source /etc/profile.d/httpd.sh

编译php

由于这里为了实现多机分离,因此在192.168.99.131主机上进行编译

1.解压PHP源码

tar xvf php-7.1.18.tar.bz2

2.进入目录

#编译参数
./configure 
--prefix=/app/php 
--enable-mysqlnd 
--with-mysqli=mysqlnd 
--with-openssl 
--with-pdo-mysql=mysqlnd 
--enable-mbstring 
--with-freetype-dir 
--with-jpeg-dir 
--with-png-dir 
--with-zlib 
--with-libxml-dir=/usr 
--enable-xml 
--enable-sockets 
--enable-fpm 
--with-config-file-path=/etc 
--with-config-file-scan-dir=/etc/php.d 
--enable-maintainer-zts 
--disable-fileinfo

make && make install

3.配置文件设置

cd php-7.1.18/
cp php.ini-production /etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#给予执行权限
chmod +x /etc/init.d/php-fpm
#添加到服务中
chkconfig --add php-fpm
#设置开机启动
chkconfig php-fpm on

cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
service php-fpm start

安装mariadb

  
这里不再多谈maraidb安装,之前的博客有很详细的mariadb部署细节。这里推荐直接yum安装就好。
  
  

配置文件修改

修改httpd主机

  

1.支持代理模块

vim /app/httpd24/conf/httpd.conf

#取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

#修改下面行
<IfModule dir_module>
DirectoryIndex index.php index.html

2.编辑虚拟主机配置

<VirtualHost *:80>
  DocumentRoot "/data/web1/wp"
  ServerName www.douma.com
  ErrorLog "logs/a.com.error_log"
  TransferLog "logs/a.com-access_log"
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
  ProxyRequests Off
  ProxyPassMatch ^/(.*.php)$ fcgi://192.168.99.131:9000/app/web1/wp/$1
<directory "/data/web1/wp">
require all granted
</directory>
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot "/data/web2/dz"
  ServerName www.fansity.com
  ErrorLog "logs/b.com.error_log"
  TransferLog "logs/b.com-access_log"
<directory "/data/web2/dz">
require all granted
</directory>
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
  ProxyRequests Off
  ProxyPassMatch ^/(.*.php)$ fcgi://192.168.99.131:9000/app/web2/dz/$1
</VirtualHost>

3.创建站点目录

# httpd主机
 mkdir -pv /data/web{1,2}
#wordpress
 tar xvf wordpress-4.9.4-zh_CN.tar.gz
 mv wordpress web1/
 cd web1
 ln -sv wordpress wp
 #修改配置文件
 vim web1/wp/wp-config-sample.php
 mv wp-config-sample.php wp-config.php

未分类

wordpress基本配置完成,之后复制到fast-cgi机器的对应目录(要先在对应主机创建好目录)

scp -pr wordpress 192.168.99.131:/app/web1/

安装Discuzx

cd /data/web2/
git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
cp -a DiscuzX/upload web2/
ln -sv upload dz

复制文件到fast-cgi主机(要在另一台主机创建好对应目录)

scp -pr upload 192.168.99.131:/app/web2/

4.启动httpd服务

apachectl start

修改fast-cgi主机

  
1.站点目录修改

#创建对应目录,要在httpd主机复制文件到fast-cgi之前
mkdir -pv /app/web{1,2}

#创建软连接
cd /app/web1
ln -sv wordpress wp

#复制配置文件并且修改
mv wordpress/wp-config-simple.php  wordpress/wp-config.php 
vim  wordpress/wp-config.php 

cd /app/web2
ln -sv upload dz

未分类

2.php修改,并添加apache用户

useradd -r apache -s /sbin/nologin
vim /app/php/etc/php-fpm.d/www.conf

#修改运行用户为apache
#修改监听ip
#注释掉仅仅允许本机访问

#重新启动php-fpm
service php-fpm restart

#由于论坛安装时候会修改文件所以要给upload目录添加apache的权限

setfacl -R -m u:apache:rwx /app/web2/upload/

未分类

未分类

配置mysql

  
1.创建账号

MariaDB [(none)]> grant all on *.* to admin identified by 'admin';
#刷新权限
MariaDB [(none)]> flush privileges;

2.创建wp数据库,论坛会在安装时候自动创建

MariaDB [(none)]> create database wp;

宿主机的hosts文件修改

  
由于是基于域名的虚拟主机,所以在没有DNS的情况下,要想正常访问,就要在宿主机上修稿hosts文件

#win
C:WindowsSystem32driversetchosts
#linux
/etc/hosts

#添加如下信息
192.168.99.130  www.douma.com
192.168.99.130  www.fansity.com

安装wordpress和Discuzx

  
1.安装wordpress
在宿主机浏览器上打开www.douma.com
会自动跳转到安装页面
配置好对应信息点击安装wordpress

未分类

未分类

未分类

2.安装Discuzx
在宿主机浏览器上打开www.fansity.com
自动跳转到安装页面

未分类

点击同意

未分类

点击下一步

未分类

继续下一步

未分类

填写完成后点击下一步进行自动安装

未分类

安装完成

未分类

点击右下角的跳转到论坛

未分类

正常访问,这里论坛基本配置完成。

WordPress 使用 wp_count_posts() 函数快速获取文章数量

还记得之前想要获取 WordPress 站点的所有文章总数统计网上的教程,以及子凡在某些地方的使用也都是直接使用 SQL 语句直接查询数据来做总数统计,现在相信还真的是费时费力,原因就是不知道 WordPress 还有 wp_count_posts()这样一个函数,具体是哪个版本出来就懒得去看了,反正随时都保持 WordPress 最新版。

未分类

其实在很多的 WordPress 主题上都会有一个统计或者文章归档的页面,就需要统计一些 WordPress 站点上已经发布多少文章了,以此来展示自己的站点或者给自己一个统计,当然我们在开发某些特别的功能或者逻辑计算时也可能会用到,子凡昨天就开发一个插件的时候就多次用到了,不想再去写 SQL 来统计,费时费力并且 WordPress 本身就有的功能为什么就不好好利用呢,果断就想起了 wp_count_posts 函数。

wp_count_posts 函数是在 WordPress 中用来统计文章数量的函数,可以统计的类型有文章(post)和页面(page)。并且能够直接统计出文章各个不同状态的数据,使用起来非常的便捷,两行代码即可搞定。

//获取文章数量
$postcount = wp_count_posts();
//获取页面数量
$pagecount = wp_count_posts('page');

默认是获取的 post 文章类型的,当然如果是自定义类型应该也是可以支持的,这个子凡目前没有测试,不过相信 WordPress 是绝对考虑到了兼容性的,值得注意的是,子凡上面说过了是两行代码,所以上面的例子并不能直接输出,因为 wp_count_posts 函数返回的是一个对象数据,如下。

// WordPress wp_count_posts 函数返回值
stdClass Object
(
    [publish] => 11 //已发布
    [future] => 0   //定时发布
    [draft] => 0    //草稿
    [pending] => 0  //待审
    [private] => 0  //私有
    [trash] => 0    //垃圾箱
    [auto-draft] => 34  //自动草稿
    [inherit] => 0  //修订版本
    [request-pending] => 0
    [request-confirmed] => 0
    [request-failed] => 0
    [request-completed] => 0
)

所以,获取已发布状态文章的完整统计代码如下:

//WordPress 已发布文章数量
$count_posts = wp_count_posts();  
$publish_posts = $count_posts->publish;

其它的就举一反三,相信也都能看得懂了,子凡就不再过多的赘述。最后在补充一点,有时候我们可能喜欢代码的简单性,所以在写法上面就比较大胆,没有怎么考虑兼容性,一行代码就能搞定,所以在不考虑兼容性的情况下还有以下的一种写法:

//WordPress 已发布文章数量,不兼容 PHP5.4 以前
$publish_posts = wp_count_posts()->publish;

子凡比较喜欢用吧,不过使用这种写法请一定保证你的 PHP 版本在 5.4 以上即可正常运行。

nginx+php-fpm搭建wordpress

一开始搭建的hexo博客,hexo博客有个缺点,他是用nodejs的服务器,不太稳定,服务器经常挂。所以最后还是决定用nginx+php-fpm搭建一个wordpress站点,这样网站就比较稳定。废话不多说,直接进入主题。

我是用的centos的服务器,下面的一些个命令也是centos的命令,不过其他的也相差不大,主要的是步骤正确就好。

1. 准备 LNMP 环境

安装nginx

使用yum安装nginx

yum install nginx -y

安装完之后修改配置文件 /etc/nginx/nginx.conf

ps:要是配置文件不在这个位置的,可以利用find命令和whereis命令进行查询,参考我另外两篇博文

配置文件参考下面进行更改:

这一步,只需要两处,去除对 IPv6 地址的监听,修改要监听的域名,即:

#listen [::]:80 default_server;
server_name www.***.com;

修改完了之后,就可以启动nginx,查看自己网站首页了,应该看到的是一个nginx测试页面。

启动nginx

nginx

将 Nginx 设置为开机自动启动:

chkconfig nginx on

安装php+php-fpm+php-mysql

这一步有两个选择,安装php7.0版本或是老的版本

安装老的版本比较简单:

yum install php-fpm php-mysql -y

要是想安装php7.0版本,要先添加源,再安装:

如果是centos6,那么执行以下命令

CentOS/RHEL 6.x:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

如果是centos7.x,那么执行以下命令

CentOS/RHEL 7.x:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装php和插件:

可以像上面一样,需要哪个装哪个,也可以全部安装

全部安装:

yum install php70w php70w*

安装需要的:

yum install php70w-common php70w-fpm php70w-opcache php70w-gd php70w-mysqlnd php70w-mbstring php70w-pecl-redis php70w-pecl-memcached php70w-devel

具体可以参考:帐号登录

完了之后启动php-fpm:

service php-fpm start

安装mysql

yum install mysql-server -y

行不通可参考:centos7 mysql数据库安装和配置

2. 安装wordpress

yum install wordpress -y

安装完成后,就可以在 /usr/share/wordpress 看到 WordPress 的源代码了。

由于上面的安装方法默认安装的是英文版,所以我们还要下载中文语言包,如果不需要中文安装可跳过此步骤

wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN.tar.gz
tar -zxvf wordpress*
mv -f wordpress/wp-content/languages /usr/share/wordpress/wp-content/
rm -rf wordpress*

3. 配置

登录mysql,这里初次没有密码,你自己要设置一个密码

mysql -uroot

创建数据库

CREATE DATABASE wordpress;

完成退出

exit;

配置wordpress

进入wordpress目录下,根目录下有一个配置文件wp-config.php,把数据库名,用户,密码配置好就可以,数据库就是刚才建立 的数据库

define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'MyPas$word4Word_Press');

修改这三行即可

再次配置/etc/nginx/nginx.conf文件:

完全按照下面配置,修改域名为你的域名即可

server {
listen 80 default_server;
#listen [::]:80 default_server;
server_name www.***.com;
root /usr/share/wordpress;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php index.php;
}

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

到这一步基本就完成了

nginx重新加载配置

nginx -s reload

访问页面进入wordpress仪表盘