作者归档:baiyuxiong

nginx rewrite的坑

用nginx做一个反向代理,发现如下坑:

1、配置文件里只能用if,不能用else,也不能嵌套使用if
2、rewrite正则只能用于做“匹配”某个字符,不能用于“不匹配”某个字符,比如匹配 不是/abc开头 的URL就不行
3、proxy_pass的server name 如果就是当前proxy_pass指令所在的server,并不会重新发起一个代理请求,而是做了类似location的操作。
4、
下面的代码,跳转结果有点儿奇怪:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
    listen       80;
    server_name  a.cn;

    location / {
        //访问a.cn/abc不会匹配到这里
    }
}

server {
    listen       80;
    server_name  *.a.cn;

    location /abc {
        //访问a.cn/abc会匹配到这里
    }
}

5、使用ci类的框架,由于所有请求入口全是index.php,如果同一个server内部,多个location来回rewrite,最好响应结果的URI还是浏览器地址上的,相关参数都被丢失了。因为:
try_files $uri $uri/ /index.php;
上面这句话,/index.php把所有的参数都丢了

记一次服务器磁盘故障

故障描述:
代码报错:failed to open stream: No space left on device.
但是查看空间还有剩余。
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda1 50G 19G 29G 40% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 24K 1.9G 1% /dev/shm
tmpfs 1.9G 508K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 380M 0 380M 0% /run/user/0

排查:
1、使用 df -i,查看,发现是linode不够用了,这是因为小文件数量太多。
2、进入根目录使用 df -u –max-depth=1 查看各目录磁盘情况,发现/tmp目录下文件占用空间较大。进入子目录继续查看,发现是因为php的session文件太多了。没有及时清理导致的。
3、centos 7 中关于临时文件的清理,可以参考这个链接:

CentOS / RHEL 6,7 : Why the files in /tmp directory gets deleted periodically

v /tmp 1777 root root 10d
X /var/tmp/systemd-private-%b-*/tmp

上面这条显示是每10天清理一次。但是systemd-private下的文件除外。而服务器上apache由于开启了privateTmp,session文件就在目录/var/tmp/systemd-private里,所以文件没清理掉。
4、解决方案是上面第一句改成5天,再把第2句删掉。
5、关于privateTmp的配置在/usr/lib/systemd/system/httpd.service。

空气真的是无味的吗?

空气真的是无味的吗?

因为家里有小宝宝,国庆出去几天,回家以后,闻到有尿味,但是之后,早上出去上班,晚上回来,并不觉得有什么味道。
其它类似的例子,比如厕所呆久了就不觉得臭了。

换到空气这个问题,婴儿一出生,就闻的是空气,但这时候婴儿并不能描述空气的味道,而等他长大能描述这种味道了,他已经久在其中,不觉得其有味道了。所以我们都会认为空气是无味的。

也许,婴儿出生的时候哭,是被空气的味道呛的,谁知道呢

另外,味道也许应该有一个类似数学的加减法运算,喝了开水再吃苹果的感觉,和吃的糖再吃苹果的感觉就完全不一样了。能不能有个公式来表达一下呢?