[{"data":1,"prerenderedAt":538},["ShallowReactive",2],{"page-wordpress-1":3,"page-count-wordpress":77},[4,97,390],{"id":5,"title":6,"body":7,"date":82,"description":13,"extension":83,"meta":84,"navigation":90,"path":91,"seo":92,"stem":93,"tags":94,"__hash__":96},"blogs\u002F_legacy\u002F2024\u002F2024-02-29-a-simple-way-to-hide-wordpress-login-url.md","一个简单的隐藏Wordpress登录地址的方式",{"type":8,"value":9,"toc":74},"minimark",[10,14,18,21,24,32,35,45,48,54,57,60,63],[11,12,13],"p",{},"Wordpress的登陆地址总是会遇到很多自动化扫描，虽然加个Recaptcha或者2FA就能解决，但是总是会想要阻挡下，说不定什么时候哪里就爆出漏洞导致自动登陆了。",[15,16,17],"h2",{"id":17},"访问过滤",[11,19,20],{},"看了下Wordpress的官方文档，以及稍微做了下搜索。",[11,22,23],{},"发现要通过插件来阻止登陆其实还是挺简单的。",[11,25,26,27,31],{},"只要hook到",[28,29,30],"code",{},"init","上，就可以对所有的访问进行一次过滤了。",[11,33,34],{},"由于不想搞得太复杂，最后决定采用Session来存储用户的访问信息。",[11,36,37,38,41,42,44],{},"当用户访问",[28,39,40],{},"wp-login.php","时，如果携带了符合要求的参数对，就会给用户加一个许可的Session。如果用户在访问",[28,43,40],{},"的时候没有提供正确的参数对，就会被自动重定向到主页。",[15,46,47],{"id":47},"登陆控制",[11,49,50,51,53],{},"由于不是很清楚Wordpress的流程，无法确定",[28,52,30],{},"的action是否能够阻止直接post登陆的情况。",[11,55,56],{},"因此额外的hook了登陆流程。只有在用户具有正确的Session的情况下，才能完成登陆的校验流程。",[11,58,59],{},"这样就可以防止某些可能存在的未知登陆的情况了。",[15,61,62],{"id":62},"插件代码",[11,64,65,66,73],{},"直接放到了",[67,68,72],"a",{"href":69,"rel":70},"https:\u002F\u002Fgithub.com\u002FArisego\u002FWpLockLogin",[71],"nofollow","GitHub","上，不过如果要用的话需要注意风险。必须保证能在不用重新登陆的情况下删除这个插件，不然万一出问题可能就一直登不进去了。",{"title":75,"searchDepth":76,"depth":77,"links":78},"",2,3,[79,80,81],{"id":17,"depth":76,"text":17},{"id":47,"depth":76,"text":47},{"id":62,"depth":76,"text":62},"2024-02-29","md",{"layout":85,"excerpt":86},"post",{"type":8,"value":87},[88],[11,89,13],{},true,"\u002F2024-02-29-a-simple-way-to-hide-wordpress-login-url",{"title":6,"description":13},"_legacy\u002F2024\u002F2024-02-29-a-simple-way-to-hide-wordpress-login-url",[95],"Wordpress","qox_b8OKgNhvBDsetI8Ne-zAzIGWT2l9L1-7ZnwOkYc",{"id":98,"title":99,"body":100,"date":371,"description":104,"extension":83,"meta":372,"navigation":90,"path":385,"seo":386,"stem":387,"tags":388,"__hash__":389},"blogs\u002F_legacy\u002F2018\u002F2018-09-08-blog-moving-prepare.md","Blog迁移准备中",{"type":8,"value":101,"toc":361},[102,105,108,111,114,117,120,123,126,133,136,141,144,147,150,153,156,159,162,165,168,171,180,183,188,191,194,197,200,206,209,215,218,224,227,230,233,239,242,248,251,254,257,263,266,272,275,278,287,290,293,296,299,302,307,310,313,318,321,327,330,334,337,343,346,352,355,358],[11,103,104],{},"最近不知为何托管的主机商那边似乎宕机了比较长的时间的样子。",[11,106,107],{},"原本在主机这一块，一直都没打算再去折腾。因为没有以前那么多时间来照顾这方面了，所以前段发现主机经常访问不稳定的时候，也没有太过于在意，只是将域名托管到了CloudFlare。",[15,109,110],{"id":110},"问题依旧",[11,112,113],{},"CloudFlare这边虽然访问速度会有所下降，但是至少能够提供一定的稳定性保证。毕竟这边虽然一直有在更新，但是每天的访问量其实并不高，基本都是靠搜索引擎的自然流量。所以偶尔访问不稳定的话，也不会有什么太大的问题。",[11,115,116],{},"但是没想到似乎还是出了些问题，这周连续好几天回家之后发现怎么都连不上网站，虽然连不上是常见的状况，但连续无法访问还是有些在意。",[11,118,119],{},"然后，发现现在的网络环境真的是和以前完全不一样了。",[11,121,122],{},"首先，一个比较常见和还算可以理解的一点，就是CloudFlare对网络状况的虚报。基本上CloudFlare这边看到的访问量和Google Analytics的数据比起来会多出一些。",[11,124,125],{},"但是问题是，实际从9月1日起，网站这边在很多区域就已经进入完全无法访问的状态了，可以从GA的数据看到：",[11,127,128],{},[129,130],"img",{"alt":131,"src":132},"image","\u002Fwp-content\u002Fuploads\u002F2018\u002F09\u002Fimage_thumb.png",[11,134,135],{},"但是同期CloudFlare的数据是这样的",[11,137,138],{},[129,139],{"alt":131,"src":140},"\u002Fwp-content\u002Fuploads\u002F2018\u002F09\u002Fimage_thumb-1.png",[11,142,143],{},"完全没有看到网站的可访问性出了问题，仿佛一切都是那么的美好。",[11,145,146],{},"另外比较惊讶的一点是，Google WebMaster不知什么时候改版了，目前的WebMaster是不会通知你网站已经宕掉的。所以像我一样，依赖于WebMaster的宕机通知来了解网站情况的童鞋们一定要留意了。",[11,148,149],{},"起初有怀疑是CloudFlare这边的问题，所以中途将NS记录重新指向了DNSPod。但是过了一两天发现还是有问题，于是直接修改Hosts，发现果然还是虚拟主机商挂掉了……",[11,151,152],{},"怎么说呢，这个问题还是比较厉害的。由于是老牌主机商了，所以当时也没在意。后面转移网站数据的时候发现，最新的数据似乎丢失了。估计应该是主机商那边连续性的遇到了什么问题。但是现在每天都没有什么时间来搞网站这方面，更加没有精力再到处去找新主机商。原本也打算就这样算了，但是没想到主机商那边也是从头到尾没有一点反应。想来或许是认为会在虚拟主机商这里托管的其实都是些无人问津的小站，所以站长不主动去敲客服，就会假装什么都没有发生过。这样的态度难免让人有些心寒，搞得好像是贪便宜将网站挂到虚拟主机商这边的自己的不对一样了。",[11,154,155],{},"诚然会挂虚拟主机商的网站大抵都没有好好的在进行商业运营，很多网站最多坚持个一两年，等域名到期了也就自然消灭了。因此虚拟主机商这边都会有很严重的超卖现象，就算偶尔出现几个小时的无法访问，说实话也很少会被注意到。但是我认为这样的服务态度是不行的，会自己花精神去买域名、买空间、搭网站、然后去写些什么，且不论之后会不会放弃，至少站长本人在这件事情上是付出了真心的努力的。出现了如此严重的连续宕机，甚至数据都是好久之后才能恢复的情况，连一封告知都没有，就这样假装岁月静好实在是让人无法接受。",[11,157,158],{},"因此，我打算重新迁徙到别的地方去，但是现在真的没有时间精力去找空间了，所以估计会花费比较长的时间。好在手里有一张腾讯云的优惠券，于是干脆的先跑到腾讯云上避难了。",[15,160,161],{"id":161},"迁移记录",[11,163,164],{},"为了方便下次迁移时能够快速的动作，而不是像这次一样要重新去翻以前的笔记以及到处搜索，将这次的过程完全记录了下来。",[11,166,167],{},"首先还是使用最习惯的Ubuntu Lts，当前版本是16。",[11,169,170],{},"开通之后用Winscp接入putty直接登录，然后首先设定su密码。",[172,173,178],"pre",{"className":174,"code":176,"language":177},[175],"language-text","sudo passwd\n","text",[28,179,176],{"__ignoreMap":75},[11,181,182],{},"之后直接su，这样虽然有些不符合规范，但是确实比较方便。",[184,185,187],"h3",{"id":186},"lnmp","LNMP",[11,189,190],{},"接着就是lnmp的安装，虽然之前比较习惯与用别人分享的脚本，但是一来不是马上能找到。二来有的脚本是要自己下载源码进行编译的，有的会给出很多选择。",[11,192,193],{},"但是我现在不想选择，我只想说，「一番いいのを頼む 」。",[11,195,196],{},"反正我就架个WordPress，顶多接入个Phalcon，有必要选那么多吗？直接上版本号最高的官方编译版就好了~",[11,198,199],{},"首先，违反常识的先装php，因为要用nginx，所以不直接装php，而是装php-fpm，要不然会给你带个Apache。",[172,201,204],{"className":202,"code":203,"language":177},[175],"add-apt-repository ppa:ondrej\u002Fphp\napt-get update\napt-get install php-fpm\n",[28,205,203],{"__ignoreMap":75},[11,207,208],{},"然后上nginx",[172,210,213],{"className":211,"code":212,"language":177},[175],"add-apt-repository ppa:nginx\u002Fdevelopment\napt install software-properties-common\napt-get update\napt-get install nginx\n\n",[28,214,212],{"__ignoreMap":75},[11,216,217],{},"最后我也不知道MySql哪个版本好，干脆上了还有印象的MariaDB。",[172,219,222],{"className":220,"code":221,"language":177},[175],"sudo apt-key adv --recv-keys --keyserver hkp:\u002F\u002Fkeyserver.ubuntu.com:80 0xF1656F24C74CD1D8\nsudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http:\u002F\u002Fftp.yz.yamagata-u.ac.jp\u002Fpub\u002Fdbms\u002Fmariadb\u002Frepo\u002F10.2\u002Fubuntu xenial main'\n\napt update\napt install mariadb-server\n",[28,223,221],{"__ignoreMap":75},[11,225,226],{},"装完以上这些，直接访问服务器IP应该就能看到欢迎页面了。再稍微写个phpinfo()的测试页面就知道php正不正常了。",[11,228,229],{},"一般情况下默认配置的nginx基本不可能挂掉，顶多就是php解析有问题。这个时候直接去改nginx的默认配置文件就可以了，在\u002Fetc\u002Fnginx里面。",[11,231,232],{},"不需要急着去查资料，基本上nginx官方已经给写好了，只要按照注释里面的提示去掉一些注释就可以了。改完记得重启服务，配置不对基本就重启不了~",[172,234,237],{"className":235,"code":236,"language":177},[175],"service nginx restart\n",[28,238,236],{"__ignoreMap":75},[11,240,241],{},"比较容易出问题的是php-fpm的名称，很容易坑，因为安装的时候叫php-fpm，但是实际使用时却是：",[172,243,246],{"className":244,"code":245,"language":177},[175],"fastcgi_pass unix:\u002Fvar\u002Frun\u002Fphp\u002Fphp7.2-fpm.sock;\n",[28,247,245],{"__ignoreMap":75},[11,249,250],{},"这个真的很坑，因为nginx的配置里面没有说明，看命名方式似乎会跟着php的版本变？",[184,252,95],{"id":253},"wordpress",[11,255,256],{},"这个直接下载解压了，WordPress是业界知名安装简单的，虽然迁移网站会有些麻烦，不过也只是移动文件而已。",[172,258,261],{"className":259,"code":260,"language":177},[175],"wget https:\u002F\u002Fwordpress.org\u002Flatest.tar.gz\ntar -xzvf latest.tar.gz\n",[28,262,260],{"__ignoreMap":75},[11,264,265],{},"为了方便，首先将文件夹权限设一下",[172,267,270],{"className":268,"code":269,"language":177},[175],"chown www-data.www-data . -R\n",[28,271,269],{"__ignoreMap":75},[11,273,274],{},"这里有个问题，为了方便其实我的目录权限其实777的，但是有的时候对于wordpress还是不足够。",[11,276,277],{},"有时候PHP的disable func也会导致问题，不过这次并没有遇到。",[11,279,280,281,286],{},"然后就是自己建立数据库了，虽然CPanel的主机商比较爱装phpMyAdmin，但是自己用的话推荐这个[",[67,282,285],{"href":283,"rel":284},"https:\u002F\u002Fwww.adminer.org\u002F#download",[71],"adminer","]。一个文件搞定一切~",[11,288,289],{},"操作上也比较简明，有了数据库装WordPress就是简单的五步了。",[11,291,292],{},"WordPress现在的版本好像对目录权限要求有点高，主要是也不会出什么问题，就是网站访问速度会变慢……所以趁早chown比较好。",[184,294,295],{"id":295},"数据迁移",[11,297,298],{},"数据迁移就是搬，基本不会有问题。不过这次是由https环境搬到http环境，所以之前的一些配置造成了问题，这里全部回退掉",[11,300,301],{},"首先",[11,303,304],{},[129,305],{"alt":131,"src":306},"\u002Fwp-content\u002Fuploads\u002F2018\u002F09\u002Fimage_thumb-2.png",[11,308,309],{},"这个必须改回来，要不然会自动跳到https上。",[11,311,312],{},"还有这个：",[11,314,315],{},[129,316],{"alt":131,"src":317},"\u002Fwp-content\u002Fuploads\u002F2018\u002F09\u002Fimage_thumb-3.png",[11,319,320],{},"以及将之前替换掉的文章内的图片的引用换回来，在adminer里面执行sql语句就好：",[172,322,325],{"className":323,"code":324,"language":177},[175],"UPDATE wp_posts SET 'post_content' = REPLACE ('post_content', 'src=\"https:\u002F\u002Fblog.ch-wind.com', 'src=\"\u002F');\nUPDATE wp_posts SET 'post_content' = REPLACE ('post_content', 'href=\"https:\u002F\u002Fblog.ch-wind.com', 'src=\"href:\u002F\u002Fblog.ch-wind.com');\n\n",[28,326,324],{"__ignoreMap":75},[11,328,329],{},"以及由于主题是自己写的，所以randompic.php里面的写死的链接也要改一下",[184,331,333],{"id":332},"windowlivewriter","WindowLiveWriter",[11,335,336],{},"之后就是最后一个坑，没想到wlw竟然无法提交文章。不停的给我报",[338,339,340],"blockquote",{},[11,341,342],{},"parse error. not well formed",[11,344,345],{},"错误代号-32700……起初以为是WordPress的新bug，但是在本地装好环境发现没问题。最后几经波折才找到，是php-xml没有装……真想吐槽：你报错能智能点吗",[172,347,350],{"className":348,"code":349,"language":177},[175],"apt-get install php-xml\n",[28,351,349],{"__ignoreMap":75},[11,353,354],{},"这样就解决了。",[15,356,357],{"id":357},"避难完成",[11,359,360],{},"这样将文章推到blog上，避难就算完成了。之后要找个好的停放地点才行。",{"title":75,"searchDepth":76,"depth":77,"links":362},[363,364,370],{"id":110,"depth":76,"text":110},{"id":161,"depth":76,"text":161,"children":365},[366,367,368,369],{"id":186,"depth":77,"text":187},{"id":253,"depth":77,"text":95},{"id":295,"depth":77,"text":295},{"id":332,"depth":77,"text":333},{"id":357,"depth":76,"text":357},"2018-09-08",{"layout":85,"status":373,"published":90,"author":374,"author_login":376,"author_email":377,"wordpress_id":378,"wordpress_url":379,"date_gmt":380,"excerpt":381},"publish",{"display_name":375,"login":376,"email":377,"url":75},"风铃","flinkor","flinkor@foxmail.com",2560,"\u002F?p=2560","2018-09-08 15:37:20 +0000",{"type":8,"value":382},[383],[11,384,104],{},"\u002F2018-09-08-blog-moving-prepare",{"title":99,"description":104},"_legacy\u002F2018\u002F2018-09-08-blog-moving-prepare",[186,253],"zHkC7jMcJA1rlBDrF2aLCN5EdqAsGRALh_Y2-DSTaLI",{"id":391,"title":392,"body":393,"date":520,"description":397,"extension":83,"meta":521,"navigation":90,"path":532,"seo":533,"stem":534,"tags":535,"__hash__":537},"blogs\u002F_legacy\u002F2015\u002F2015-04-30-%e6%8b%be%e9%81%97.md","拾遗",{"type":8,"value":394,"toc":514},[395,398,402,405,408,416,419,423,426,429,435,438,444,447,450,453,459,462,468,471,474,480,483,487,490,493,499,502,508,511],[11,396,397],{},"有的问题，花费了时间解决之后，由于短时间内不会用到，过了一段之后遇到了又需要重新寻找解决方案。故而在此记录下来，以节省时间花费。",[15,399,401],{"id":400},"qq登录","QQ登录",[11,403,404],{},"QQ登录的功能相对简单，但是在进行应用调试的时候可能会遇到这样的问题：",[11,406,407],{},"QQ登录回调时出现如下的报错：redirect uri is illegal(100010)",[11,409,410,411,415],{},"解决方法是，在URL的结尾加上斜杠，如",[67,412,414],{"href":413},"\u002F","\u002F\u002F","。",[11,417,418],{},"QQ互联官方对信息的修改有一定延迟，测试时需要适当的拉出空隙。提交之前也最好等待一下，否则审核的时候可能会因为不能正常使用而被拒绝。",[15,420,422],{"id":421},"iptables","IPTABLES",[11,424,425],{},"Ubuntu上的iptables设置，网上教程很多，但是要做出适合自己需求的配置则需要仔细的研究。",[11,427,428],{},"配置需求：开放22、80端口。同时服务器需要进行抓取、回调等任务。",[172,430,433],{"className":431,"code":432,"language":177},[175],"iptables -A INPUT -i lo -j ACCEPT \niptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT \niptables -A INPUT -p tcp --dport 22  -j ACCEPT \niptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT \niptables -A INPUT -p tcp -s 0\u002F0 --dport 80 -j ACCEPT \niptables -A OUTPUT  -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT \niptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT \niptables -A OUTPUT  -p tcp --dport 80 -j ACCEPT \niptables -A INPUT -p tcp -s 0\u002F0 --sport 80 -m state --state ESTABLISHED -j ACCEPT \niptables -A INPUT -j DROP\n",[28,434,432],{"__ignoreMap":75},[11,436,437],{},"常用命令：",[172,439,442],{"className":440,"code":441,"language":177},[175],"#保存配置\niptables-save\n\n#列出当前配置\niptables -L\n",[28,443,441],{"__ignoreMap":75},[15,445,446],{"id":446},"服务器空间问题",[11,448,449],{},"服务器出现\u002Fdev\u002Fxvda1达到100%或者文件写入被拒绝write failed: No space left on device时的解决方法。",[11,451,452],{},"使用命令",[172,454,457],{"className":455,"code":456,"language":177},[175],"df –h\n",[28,458,456],{"__ignoreMap":75},[11,460,461],{},"检查是否有除此之外的异常配比，如果没有的情况下，切换到根目录，通过目录大小进行排查",[172,463,466],{"className":464,"code":465,"language":177},[175],"du -h --max-depth=1 .\u002F\n",[28,467,465],{"__ignoreMap":75},[11,469,470],{},"通过列出的大小逐级寻找，可以定位出问题文件夹。",[11,472,473],{},"如果在根目录列出的大小和\u002Fdev\u002Fxvda1的大小差异极大，那么问有可能是文件删除之后依然被某些进程打开，导致无端占用磁盘空间。列出所有这些文件",[172,475,478],{"className":476,"code":477,"language":177},[175],"lsof | grep \"(deleted)\"\n",[28,479,477],{"__ignoreMap":75},[11,481,482],{},"之后就是寻找这些文件产生原因的地狱之旅了……紧急情况下可以使用重启的方法来暂时缓解危机。",[15,484,486],{"id":485},"bootsrap与wordpress","Bootsrap与Wordpress",[11,488,489],{},"当使用bootstrap做主题时，顶部的置顶导航条会和管理功能的admin-bar产生冲突。解决方法是，",[11,491,492],{},"首先，对body的class进行修改(通常在header.php中)",[172,494,497],{"className":495,"code":496,"language":177},[175],"\u003Cbody \u003C?php body_class(); ?>>\n",[28,498,496],{"__ignoreMap":75},[11,500,501],{},"然后添加对应的css：",[172,503,506],{"className":504,"code":505,"language":177},[175],"@media ( min-width: 782px ) {body{ padding-top: 70px !important; }}\n\nbody.body-logged-in .navbar-fixed-top{ top: 28px !important; }\n\nbody.logged-in .navbar-fixed-top{ top: 28px !important; }\n",[28,507,505],{"__ignoreMap":75},[11,509,510],{},"刷新一下之后，应该就不会出现相互遮盖的问题了。",[11,512,513],{},"注意：当前使用的wordpress版本4.2.1，版本不同的情况下解决方法可能会出现不同。",{"title":75,"searchDepth":76,"depth":77,"links":515},[516,517,518,519],{"id":400,"depth":76,"text":401},{"id":421,"depth":76,"text":422},{"id":446,"depth":76,"text":446},{"id":485,"depth":76,"text":486},"2015-04-30",{"layout":85,"status":373,"published":90,"author":522,"author_login":523,"author_email":524,"author_url":413,"wordpress_id":525,"wordpress_url":526,"date_gmt":527,"excerpt":528},{"display_name":523,"login":523,"email":524,"url":413},"chaoshikari","chaoshikari@gmail.com",1218,"\u002F\u002F?p=1218","2015-04-30 03:52:24 +0000",{"type":8,"value":529},[530],[11,531,397],{},"\u002F2015-04-30-拾遗",{"title":392,"description":397},"_legacy\u002F2015\u002F2015-04-30-%e6%8b%be%e9%81%97",[253,421,536,401],"服务器","oiOqIKC7LS2SNjcmK2YEY8tkS9Wnq4z6QLTHWVp-kTM",1788763177626]