TCP三次握手的目的

本人CS不是很专业,这是我今晚随便琢磨得到的想法,各位笑看即可:

很多人知道TCP三次握手是为了建立可靠的网络连接,那什么叫做可靠的网络连接呢?

可靠的连接,就是要确保双方都既会发送tcp包、也会接收tcp包,这里的“会”其实有两个含义,一是能做到,二是乐意去做。

假设A为请求方,B为服务方,假设他们之间用一种叫做“tcp”的语言沟通。

第一次A向B发送一个包:意思为,A证明自己会“说”tcp语言(发送tcp包);

B收到A的包后,向A发送第二个包:意思为,我听懂了你说的tcp语言(接收tcp包),并且向A证明自己也会说tcp语言(发送tcp包);

注意,此时,A证明了自己会说,B证明了自己会听也会说,但是A还没有证明自己会听呀!

于是A收到B的包后,向B发送了第三个包:意思为:你发给我的包,我能听懂(接收tcp包)

此时,A和B都证明了自己都会发送tcp,也能接收tcp

在服务器上创建git远程仓库

有时自己的代码比较私密,不方便放在github或者其他托管网站,如果你有一个vps的话,可以使用下面这个方法创建一个仓库:

远程:

cd /srv
git init --bare [repo-name].git

本地:

这里其实是使用ssh连接,如果你没改过ssh的端口,[remote-port]则可以省略

git remote add origin root@[remote-ip]:[remote-port]/srv/[repo-name].git
# 这样就添加好了,试试push吧
git push origin master

No supported encrypter found. The cipher and / or key length are invalid. – 解决办法

初次使用Laravel,对这个框架还不是很熟,项目拉下来后,提示以下错误:

No supported encrypter found. The cipher and / or key length are invalid.

解决办法为:

config/app.php文件中,找到类似的这行代码:

'key' => env('APP_KEY', 'SomeRandomString'),

将这里的SomeRandomString改成一个随意的32位的字符串,比如我的12345678901234567890123456789012(建议你改一个复杂一点的)

或者你也可以在项目的根目录创建一个名字为.env的文件,并且添加一行APP_KEY=12345678901234567890123456789012,下面是通过代码的方式操作:

# 首先 cd 到项目目录
echo APP_KEY=12345678901234567890123456789012 >> .env

也有可能是缓存的问题,那么请执行:

php artisan config:cache

bingo~

Apache路由重写

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

写了一个西部世界追剧脚本

简单写了一个脚本,将追剧结果发送到自己的邮箱中,目前还正常运行:

<?php

$current = file_get_contents(__DIR__ . '/cursor');
$current = str_replace("\n", '', $current);
$current = substr($current,0,1);

$next = $current+1;

$currentName = '第'.$current. '集';
$nextName = '第'.$next. '集';

#var_dump($currentName);die;

$html = file_get_contents('http://www.592meiju.com/video/7262.html');
$hasCurrent = strpos($html, $currentName);
$hasNext = strpos($html, $nextName);

if (empty($hasCurrent)) {
    exec('echo ""  | mail -s "西部世界报告:脚本异常" singviy@qq.com');
    exit();
}

if ($hasNext > 0) {
    $sub = '西部世界' . $nextName. '更新啦!';
    exec('echo ""  | mail -s "'.$sub.'" singviy@qq.com');
    file_put_contents(__DIR__ . '/cursor' , $next);
} else {
    $sub = '西部世界' . $nextName. '还没更新呢!';
    exec('echo ""  | mail -s "'.$sub.'" singviy@qq.com');
}

如何运行:

mkdir ~/west_world
vi ~/west_world/start.php # 复制以上代码
echo 3 > ~/west_world/cursor # 当前为播出到第3集

脚本需要服务器的mail能正常发送邮件,vi /etc/mail.rc修改你的配置,配置仅供参考:

set from=singviy@yeskn.com
set smtp=smtp.qq.com
set smtp-auth-user=singviy@yeskn.com
set smtp-auth-password=你的smtp服务的密码
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

然后用crontab设置定时任务,我设置的每12小时查一次:

* */12 * * * php /root/west_world/start.php

Nginx中root指令和alias指令的区别

root指令和alias指令的作用都是将url path映射到对应的dir path上去。他们具体区别如下:

root指令

root指令映射到的目标路径是root+location的结果:

location /data/ {
    root /var/www;
}

这段代码匹配/data/index.html时成功,最后会响应/var/www/data/index.html中的内容。

alias指令

alias用于将匹配到的url映射到另外一个path:

location ^~ /.well-known/acme-challenge/ {
    alias /var/www/challenges/;
    try_files $uri =404;
}

这段代码在匹配/.well-known/acme-challenge/data/test.html时成功,最后会响应/var/www/challenges/data/test.html中的内容,注意:最后查找的path不包含location中的内容。

注意,alias指令需要location的条件有个前缀匹配(即"^"这个符号),在下面这个例子中:

location ~ /.well-known/acme-challenge/ {
    alias /var/www/challenges/;
    try_files $uri =404;
}

这将不会有任何意义,它会将所有包含/.well-known/acme-challenge/的url都指定到/var/www/challenges/这个目录,而不管这个url的其他内容(即不会像上面那样把url后面的data/test.html补充到alias指定的path上去)。