军哥LNMP下typecho的rewrite配置隐藏index.php

最近新建了站点优推网并且开始使用typecho,安装配置过程中发现自带的rewrite无法隐藏index.php,解决方案是修改

/usr/local/nginx/conf/vhost/www.affu.net.conf

配置文件,将include enable-php.conf;修改为include enable-php-pathinfo.conf;

然后再在typecho的设置中启用固定链接即可正常显示。

最近打算将博客转入Sharktech的服务器,并且将使用7年的wordpress更换为typecho,wordpress不可说不好,但是现在感觉太臃肿了,对于一个写博客的感觉还是不太需要这么臃肿,轻便最好,再续…

Ubuntu下安装Intel 9260AC无线网卡教程

奶牛很久没有写ubuntu的文章了,虽然自己的服务器依然是使用ubuntu server,但是比较懒,也没有太多折腾,今天记录一下intel最新的9260ac无线网卡在ubuntu下的安装与使用。

Intel的中文支持页面更新还是有些缓慢,所以驱动程序我们可以在英文页面找到。Linux* Support for Intel® Wireless Adapters

官方页面给出的安装介绍如下

To install firmware:

    Copy the files into the distribution-specific firmware directory, /lib/firmware.
    If the directory does not work, consult your distribution documentation.
    If you configure the kernel yourself, make sure firmware loading is enabled.

首先是下载驱动程序:Intel 9260AC驱动

官方提到intel无线网卡驱动是依赖iwlwifi来加载驱动的,但是安装官方的方法将驱动文件解压后拷贝至/lib/firmware文件夹中重启是无法实现加载的,至少奶牛这里不行,也许你们把内核更新到最新大概可能会实现自动识别吧,但是奶牛把自己折腾的过程分享下。

DeviceKernelsFirmware
Intel® Wireless-AC 92604.14+iwlwifi-9260-th-b0-jf-b0-34.618819.0.tgz

官方的说明是内核要在4.14+,现在内核已经到了4.15RC版本了,4.14也更新到了4.14.10,奶牛第一次是安装的4.14版本内核,结果发现设备可以识别了,但是无法使用。然后找到iwlwifi的支持页面

页面中又说到iwlwifi-fixes with fixes for the current kernel release cycle,所以我们又去看iwlwifi-fixes,在2017-12-05这天更新了内容iwlwifi: add new cards for 9260 and 22000 series

好吧,看样子内核需要在12.05之后,奶牛这里安装的是4.14.10,看日期4.14.04也是12.05日,所以就索性当4.14.04之后的内核版本才支持吧。更新内核也很简单

mkdir kernel
cd kernel
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-headers-4.14.10-041410_4.14.10-041410.201712291810_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-headers-4.14.10-041410-generic_4.14.10-041410.201712291810_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-image-4.14.10-041410-generic_4.14.10-041410.201712291810_amd64.deb
dpkg -i *.deb

奶牛这里是安装的64位ubuntu操作系统,32位操作系统的同志自己去http://kernel.ubuntu.com/~kernel-ppa/mainline下面找对应的内核版本就好了。

更新内核后重启系统,安装wicd进行无线网卡管理,不要问奶牛为啥要装wicd,因为奶牛发现系统自带的那个管理器还是识别不了。。。好吧,就此折腾完毕。

 

 

关于bench.sh网站的实现

最近看到一条命令很有意思,一起来和大家解读一下,这个网站就是bench.sh

可能搞VPS的朋友很熟悉一条命令

wget -qO- bench.sh | bash

用这条命令可以直接实现linux下运行bench.sh的命令,刚开始奶牛也挺疑惑的,难道wget还自带这种功能,其实不然,命令中的bench.sh是个网站,对,是个网站,访问网站我们可以看到如下提示:

嗨!欢迎使用 Bench.sh

你可以使用以下命令来查看您的 Linux 系统信息,还可以测试网络带宽及硬盘读写速率

wget -qO- bench.sh | bash

或者

curl -Lso- bench.sh | bash

有意思的事儿发生了对么?为什么我们访问网站和我们wget得到的效果不同?因为网站对于user agent进行了识别。如果我们在命令行中执行

wget -O- bench.sh

我们可以看到如下结果:

Resolving bench.sh (bench.sh)... 149.202.55.78
Connecting to bench.sh (bench.sh)|149.202.55.78|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://86.re/bench.sh [following]
Resolving 86.re (86.re)... 104.224.156.154
Connecting to 86.re (86.re)|104.224.156.154|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7017 (6.9K) [application/x-sh]
Saving to: 'STDOUT'

好了,我们看到了一个302的字眼,这个是通过重定向来实现的,直接将使用wget和curl的user agent重定向到了http://86.re/bench.sh这个文件,所以我们wget或者curl得到的是这个文件。这里奶牛猜测原作者应该是用rewrite来写的,直接用web服务器进行ua判定之后rewrite到了这个文件。

奶牛的文章到这里并没有结束,来想想还除了rewrite还有没有其它的实现方法?奶牛感觉还有至少两种实现方法,反代可以实现,还有直接在服务器内进行根目录的重定向也可以实现。奶牛就把后者的实现过程来说一下。web服务器奶牛用的nginx。对网站conf进行配置修改:

server
    {
        listen 80;
        #listen [::]:80;
        server_name bench.2fu.org ;
        set $target bench.2fu.org ;
        if ( $http_user_agent ~* "(wget)|(curl)" )
        {
                set $target bench.2fu.org/true ;
        }
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/$target;

        include none.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/bench.2fu.org.log;
    }

然后将true目录下建立一个index.html然后内容就是bench.sh。这样实现的效果是:

Resolving bench.2fu.org (bench.2fu.org)... 
Connecting to bench.2fu.org (bench.2fu.org)|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7017 (6.9K) [text/html]
Saving to: 'STDOUT'

没有302,奶牛更喜欢200 OK 。其实nginx服务器要是折腾折腾配置也很有意思。

 

 

Wayback Machine网页时光机,带你重回过去

Wayback Machine 网页时光机,是一个网页快照,可以带你重回过去的页面,奶牛也测试了一下,从2010年到现在的很多快照都保存着,看看当时的UI当时的评论,可能也是种美好的回忆吧。

关猫

家里现在三只猫,骑士和她的俩孩子,胖虎和小宝。小宝从来就没用过猫厕所,家里女主人很烦躁,买了两个猫厕所给胖虎和小宝,今晚就把小宝给关了,不知道学不学得会上厕所。。。感觉很多东西应该是天性,生来就会的,小宝便后也会抓地,可是为什么就不去猫厕所上呢,难道是不喜欢别人的气味,好吧,一个hellokitty粉的猫厕所送给小宝,希望她能学会上厕所吧。

关于iptables过滤关键词网站的原理和方法解读

服务器上有时候难免做些限制,比如说一个游戏加速器可能会禁止用来网站访问,但是问题来了,我们并不能简单的禁止一个80或者443来达到目的,因为有些游戏会从网站上去获取一些信息,比如现在最火的绝地求生大逃杀,吃个鸡却要先从一个网页进行登录,所以禁止80/443端口的方案我们可以直接否掉,奶牛的方法是用iptables进行关键词和网站过滤。

iptables过滤关键词网站的原理解读

INPUT,OUTPUT,FORWARD选哪个?

使用iptables过滤关键词和网站,我们需要对进出服务器的流量都进行过滤,当然也有人建议在传输层过滤,那奶牛就来谈谈自己的理解。首先INPUT,OUTPUT,FORWARD三个分别对应进、出、传输。如果我们在FORWARD过滤,应该可以达到预期效果,但是如果我们的服务器是用作转发的呢?比如一个请求发送过来,我们允许INPUT进入,然后我们的转发服务器会先将请求转发出去,再接收转发内容,最后在转发回程的过程中过滤拦截,这样子,服务器的流量带宽资源就会被浪费,也许你会说在接收到请求之后关键词和网站就已经过滤了,其实不然,很多关键词是包含在请求获得的内容中的,所以不可能在转发之前就过滤掉,我们需要的结果是在转发之前过滤掉。那么我们就用INPUT进行限制?通过实测,发现单单用INPUT也不能过滤干净,奶牛的理解是INPUT不会拒绝请求的结果,所以我们还需要和OUTPUT配合使用。

DROP,REJECT选哪个?

奶牛选择的是DROP。我们说说DROP和REJECT的区别,当我们使用REJECT的时候,如果拒绝请求,在iptables中输入

iptables -L -nv

可以看到拒绝的请求会reject-withicmp-port-unreachable,也就是会通过一个icmp包来告诉目标请求被拒绝了,这个资源也是属于浪费的,如果我们直接用DROP丢弃,则不会有这个回包。

iptables过滤关键词网站的方法

首先备份好我们的iptables规则,避免操作失误。备份和还原的命令如下:

iptables-save > iptables_origin_rules
iptables-restore > iptables_origin_rules

然后我们的规则这样写

iptables -A INPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP
iptables -A OUTPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP

其中的xxx.com就是关键词,可以写网站域名,也可以写关键词,但是关键词一定要想好,否则可能会导致很多东西都无法访问的。如果规则写错了,可以通过命令删除规则:

iptables -D INPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP
iptables -D OUTPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP

过滤需谨慎,特别是一些国cdn、公共库、ssl、dns等一定要谨慎处理,否则可能会导致很多服务无法访问严重后果。

技嘉双BIOS恢复教程

旧电脑的BIOS挂了,主板是技嘉的,这个情况已经不是第一次了,黑屏无限重启而且连BIOS都不出,奶牛还以为是CPU出问题了(一直温度高),后来把CPU拿下来后发现确实也有针脚弯了,但是修正了一下又插回去还是原来的情况,然后从备份BIOS启动后竟然发现可以进入BIOS了(硬件全拆了),然后说说解决方案吧。

测试备份BIOS是否正常,确定问题所在

说明书上有一段说明

BIOS切换器(BIOS_SW)让您可轻易的选择是否由不同的BIOS开机或是针对不同的BIOS超频,如 此可以降低超频时,损毁BIOS的风险。 SB切换器可设定是否关闭Dual BIOS功能。
BIOS指示灯 (MBIOS_LED及BBIOS_LED)可以显示目前正由哪一颗BIOS控制。 
BIOS切换器: MBIOS_LED (目前由主BIOS控制) BBIOS_LED (目前由备份BIOS控制)

默认情况下,主板的BIOS_SW在1的位置,我们将BIOS_SW切换到2上既可以从备份BIOS启动,启动的时候BBIOS_LED灯亮表示已经从备份BIOS启动了。

主BIOS恢复

将主板的BIOS_SW切换到1的位置,设置为由主BIOS启动。在关机状态下长按开机键,机器启动后很快会进入关闭状态,保持长按等待一会儿,机器不再重启即可。再正常按一次开机键,就会自动进入恢复主BIOS的程序然后重写主BIOS。然后剩下的就是正常启动了。下面是网友的一段说明,和我的说明差不多,但是好像实际情况有些偏差。

在关机的情况下按住开机键十秒,然后放开按键。
按一下开机键开机,会经历两次短时间(大约5秒)的重启。
第三次时,会显示画面并开始恢复!

网上还有一种说法是短接主BIOS的1和8号管脚,1为CS# Chip Select ,8为VCC +3.3V Power Supply,也就是给片选一个高电压然后系统会自动识别然后让BIOS进入恢复状态。此方法奶牛没有测试,不过1、8管脚短接应该也很容易,1、8管脚是对着的,直接横着连起来就可以了。

学一门语言真难

打算学习Go语音,可是发现,自己真的好难静下心来一点儿点儿地读。是不是再也找不回从前学习的状态了,感觉现在写什么东西配置什么程序都那么吃力,sad。当初想学C学C++学C#学Python学Node.js学PHP,结果都是半途而废,不知道这次结果又会如何,可能学一点儿记录一点儿会比较好吧。不过看着Go的东西自己还是挺有兴趣的,但是不知道兴趣能持续多久。好吧,就废话这么多吧,该静下心来吃一门语音了。

WordPress使用SSL后需要注意的一些问题

奶牛的博客也进入了HTTPS的时代了,升级后原来的主题就直接删了,虽然很怀念,但是也无能为力,特别是启用了SSL后,页面的站长统计什么的都要统统改成https链接引入,否则直接就不加载了,后台的设置博客地址也要改成https类型的,奶牛并没有使用HSTS,怎么说呢,强扭的瓜还是不甜,特别是当SSL证书失效后便无法访问会造成很多不安因素,特别是我就一个博客,也不会有太多不安全因素。但是,HSTS还是趋势,建站的成本也在不断提升。最后记录下HSTS的申请网站吧。https://hstspreload.org/

迁移博客到了新主机

回想当初,自己初建博客,那时候国内的vps并没有现在那么多,也没有那么流行,流行的多数还停留在虚拟主机上,就是给你个帐号,你可以用ftp和phpmysql来管理自己的web文件,那时候虚拟主机商经常有各种问题,比如说各种宕机却没有赔偿,也没有99.9%这样的在线率,所以有时候自己都连不上自己的主机。到后来,自己也开始折腾vps,但是,怎么说呢,选网络又成了一个大问题,对于国内而言,国外的主机对联通电信以及移动并不一定都那么友好,当然,现在也还是这种情况,所以,有时候自己访问速度也就几十K的样子,也很难受。

前段时间,自己的博客就是挂着,也不怎么更新,因为自己发个文章进入编辑页面都感觉好困难,可能是版本比较老吧,有些插件连浏览器都不怎么支持了,最近我把博客更新到了最新的版本,也迁移了新的主机,我定义这是自己的一个回归吧。当然,其实迁移也好,升级也罢,终归遇到很多bug要去处理,就比如这次,奶牛的升级还是比较彻底的,也用了野卡的SSL,可能那个绿色的锁头标志比较好看吧,给人以安全感,但是也有问题没有解决,比如首页的微博挂件,估计也就只能做反代或者去掉了,其实还是习惯有那么个东西挂在上面的,至少你们可以找到最直接的联系我的方式。Anyway,升级就算这样简单的度过了。希望新主机可以稳定运行吧。