Tags
- Airchina
- Android
- Anti-Spam
- Bluetooth
- bugs
- ChinaSouthern
- Django
- DNS
- Enterprise
- fastcgi
- Hainanair
- HAM
- HongKong
- InnoDB
- IPTV
- iSCSI
- kubernetes
- large-scale
- lighty
- Linux
- Logging
- Macao
- Meituan
- MM
- MySQL
- nginx
- Oracle
- Outdoor
- Percona
- Photo
- postfix
- Python
- RedHat
- Sentry
- systemd
- Traffic
- Travel
- Virtualization
- xtrabackup
- 信用卡
- 奥运
- 美食
- 规范化
- 软件工程
Meta
Blogroll
Mine
Tag Archives: nginx
元旦杭州游
流水账一把: 12 月底国航积分即将到期作废,于是换了 PEK-SHA 的机票,然后在 12306 网站买了上海虹桥-杭州的高铁票,去杭州玩了一圈。 元旦上午,冒着寒风等机场大巴,然后堵车到首都机场T3,吃了快餐就匆匆进去了。这班 CA1517 居然有四个航班号(深圳、两个外航),爬升转平飞、平飞转下滑的时候都没有失重感、落地时有感而不超重,很优秀。出了虹桥机场,我就顺着指示牌一路走到了虹桥高铁站,等了一会就刷身份证上火车了。杭州站出来去售票窗口打了车票留作纪念。 出了火车站,给 @adoal 打电话问吃什么,他推荐了老头儿油爆虾。用 iPad 搜索了一下,跟着地图走,我想抄近道就走了小路,结果发现这家店原来就在这条小路里,而地图的标注是偏移的⋯⋯但是因为排号太多,又不知道吃什么比较好,还是乘出租车去找 adoal 吃另一家分店了。饭后,乘出租车去了青旅。这店真有意思,十平米的房间,居然还带卫生间,五脏俱全啊! 第二天,早晨坐12路公交车去吃“咬不得 高祖生煎”,然后步行走到湖滨路,办了租自行车的卡。顺着湖边,从六公园开始步行向北,走了断桥、白堤、孤山岛,到岳庙。看了看,岳庙居然还收费,就算了吧,我干嘛花钱去看望那个安阳老乡呢?步行去浙大路小巷子里的知味观,发现没有蟹黄小笼,就点了鲜肉小笼和米饭套餐。江南的米确实比较差,但是小笼包不错。饭后回西湖,顺着苏堤走了好远,到花港观鱼的码头乘船,去看了三潭印月。然后去淘宝公司看望了叔度,攀谈了一下,聊了聊 IT 行业在杭州,和 nginx 相关的话题。从淘宝出来,租自行车一路骑到保俶路,转向断桥,又到孤山岛,去楼外楼吃了西湖醋鱼。饭后步行想偷窥《印象西湖》,失败,于是骑自行车回六公园去了。路上怕车撞我,把手电筒装在自行车篮子里当车灯。路上还围观了一起车祸,在保俶路南口,一辆车撞中央隔离带,隔离带里的交通标志牌柱子嵌入其前机盖;该路段限速 40,估计这辆车的车速是 70 码。在长生路,找到了大韩民国临时政府杭州旧址,打算明天来看。然后坐 12 路区间公交车回了清波门,再换 809 回山上。 第三天,早晨步行参观了青旅隔壁的中国丝绸博物馆,然后顺着西湖上游溪水步行到雷峰塔游玩。雷峰塔的保护罩倒是挺有意思的,上面新建的塔也不错,登高望远,可以俯视整个西湖。下来之后,步行走到长桥公园,饿了,租自行车去吴山广场的知味观吃饭。这家店有三鲜小笼和大闸蟹黄小笼,吃了,觉得还是三鲜的好。然后骑自行车去了西湖博物馆参观、骑自行车+步行去参观了大韩民国临时政府旧址、坐公交车去灵隐。灵隐景区很不好,把灵隐寺单独拿出来售票,且无联票优惠。我先看了永福寺,永福寺在山上,建筑上是一个一个小院,且不知道是净土宗还是禅宗的;参观期间还遇到一个红衣服小 mm 挺乖巧的。然后看了看自己还有体力,就买票去灵隐寺逛了逛,到一半的时候后院就开始逐渐关门了,于是留下了点遗憾。不过遗憾也好,为将来补遗留下原由。出来之后乘公交车到三公园,步行又去吃了高祖生煎,然后一路打听骑到 24 小时退卡点,退了公交卡。终于有钱了!!门口出租车去武林门民航售票处乘机场巴士,到了机场。机场的人很少,十分钟进入候机区,然后找地方充电。充电过程中听到 last call 广播,就进去了。CZ6164 的高端经济舱挺好玩的,我感觉在飞机前段,但是排号已经是 30 … Continue reading
Posted in 默认分类
Tagged Airchina, ChinaSouthern, MM, nginx, Outdoor, Traffic, Travel, 美食
Leave a comment
nginx 的 if 语法好严格呀!
今天被机房通知删网站内容,我发转给相应的同事了。然后我自己就在 nginx 里折腾看能不能先把那个网址改成 403。试了半天,发现 nginx.conf 里用 if 指令判断 querystring 里的内容的时候,等号前后都得有空格,像这样: if ( $arg_uid = 877363 ) { return 403;} 如果没有空格就不行,看着像是 nginx 不知道那个变量名和操作符号有多长,需要用空格来分隔的意思。
在小饭馆看到的 HTTP 502 错误实例
周五拉着 wincss 去蓟门里的螺蛳粉先生吃饭,期间见到了一个场景,颇像当年 5D6D 网站遭遇的 502 错误。 我和 wincss 到饭馆的时候,屋里已经没有座位了。但是既然来了也不能轻易放弃啊,于是要求店家在外面支了桌子。其实瓶颈主要在于厨房(数据库),厨房做饭太慢,外面的客户只好先排着。在客人数量(请求数量)没有超出饭馆桌椅数量( fastcgi server 的进程和 backlog 上限)的情况下,系统 load 迅速增大,但还没崩溃,此时所有的吃饭请求都挂着,处于 I/O blocked 状态。 过了一会,饭还没做好。有些人等不及就撤了,于是发生了 HTTP 504 Gateway Timeout 错误。而不断前来的客人开始怨声载道(因为他们站在饭店门口的路上,所以载道),此时就发生了 HTTP 502 Bad Gateway 错误。 502、504 错误的根本原因在于系统搭配不均衡,后端的单点瓶颈和前端负载能力过于强大的搭配是不合适的。唯一值得庆幸的是,即使厨房很慢,我们索要辣椒调料的请求还是得到了满足,类似于 fastcgi 请求无法满足的时候,静态文件请求仍能满足的情况。
nginx的IPv6支持
感谢Jtr帮忙,给我新租的linode VPS加了he.net的IPv6 tunnelbroker,但是marsteel说IPv6访问不了网站,只能ping通和访问ssh端口。我又去nginx的邮件列表问了半天,才发现原来只需要 listen [::]:80; 这一句就可以,而不需要分别在IPv4和IPv6上设置listen。具体讨论参见这里。
nginx处理bug的速度太快了
今天早晨部门同事告诉我说 nginx 的日志轮换有些问题。我观察了一下细节,发现 nginx 0.7.62 在收到 USR1 信号之后,会同时访问 error.log 和 error.log.1 两个错误日志文件,于是就加入了 nginx 的英文邮件列表,发了信过去。 20:46 作者确认是bug;22:05收到作者发来的补丁。 对比一下 OpenSSL 的官僚作风,我觉得有时个人比团队还好一些。
web服务器和web应用的结合方式是个很麻烦的事啊
今天在看python的资料,发现没看关于python作为web应用部署的方法。后来才发现,原来python的web应用功能大都是由开发框架提供的,用这些开发框架开发的程序可以以http、fastcgi、uwsgi等协议对外提供服务,但都是与该应用程序紧密相关的;和Apache的mod_php类似的mod_python文档上声称尚未支持Apache 2.0;没有找到和php-fpm类似的语言级别的fastcgi服务器。 web应用程序的部署是个挺麻烦的事。 普通web服务器+cgi: web服务器需要把URL映射到文件系统,并执行cgi 普通web服务器+内置语言处理模块: (像apache+mod_php这样的) web服务器需要把URL映射到模块(并判断文件是否存在,可选步骤),并由该模块处理) 普通web服务器+分离式web应用: (web服务器+php等语言级别的fastcgi、 web服务器+应用级别的fastcgi、uwsgi等种种协议) web服务器需要把URL映射到后端服务,并由该后端服务处理。而该后端服务还得再把URL映射Class、Function再运行,需要两次regexp匹配。这样就把应用的开发和部署紧密耦合了,增加了部署的麻烦啊 20130103更新:随着我对python的学习,我越来越认同python派的WSGI server+框架+应用程序的架构,也认同WSGI server直接对外提供高性能服务的理念。参考Shell Xu的博文
我的确定fastcgi数量的方法
这里主要讨论php-fastcgi 1 将 nginx 各项参数加到足够大,php 加到足够多 2 根据日志、各进程执行时间等,找出一天内的访问最高峰(请求/秒) 3 req per second / avg process time=amount of PHP needed 将数值适当放大,留出余量 4 worker_processes 大概是和 CPU、CPU 核的数量相关的。参考 mysql 的并发线程参数 5 根据 worker_processess * (worker_connections-2)=PHP数量 的公式,反算出 worker_connections 6 同时要保证worker_rlimit_nofile 留余量,要比 worker_connections 大
nginx的极端测试
将各项参数减少,发现 worker_rlimit_nofile最少是10 worker_connections最少是2 才能正常启动 如果想正常工作, worker_rlimit_nofile最少12 worker_connections最少 3 TCP连接数不能超过worker_connections-2 猜测那两个是用于master进程和worker进程之间的通信吧 php-cgi进程少的情况下,对PHP的请求会依次被送去执行,后来的就等待 等待超时的就HTTP 504 Gateway Timeout php-cgi进程没有在运行的情况下,对PHP的请求会得到502 Bad Gateway的回答