地址:http://thobian.info/?p=1367
题目可能有点标题党,毕竟下面要说到的只是nginx在比较特殊的环境才回出现的500情况。
先说下自己的开发环境:
- WEB服务器:nginx,搭在本地虚拟机(虚拟机是直接copy过来的)
- 开发工具:zend studio(这个其实没什么好说的)
- 虚拟机操作系统:centos 6.0
- 本地操作系统:win7
- 本地、虚拟机通过samba实现文件共享。直接在win下修改代码,同步到linux
这几天在修改代码时,发现每次对CSS、JS文件做修改之后,第一次访问这些文件总是会出现500错误,PHP文件是不会出现这种情况的。虽然只是修改后第一次访问出问题,影响不是很大,但碰上这种奇怪的问题又被自己的强迫症驱使这找出为什么来。
第一反应想到会不会是nginx设置了反响代理、静态文件缓存这些原因了(接触nginx不久,加之服务器在虚拟机且是直接copy过来的),于是去看了下nginx的配置,发现并没有启用这些功能。看来这个猜测可以pass了。
然后想,既然是500错误,nginx自然会生成日志,看看日志只是不会错。
2014/05/04 14:43:38 [crit] 1774#0: *414 open() “/data/vhosts/domain.com/public_html/css/style.css” failed (11: Resource temporarily unavailable), client: 192.168.128.1, server: domain.com, request: “GET /css/style.css HTTP/1.1″, host: “domain.com”
引起注意的是“ Resource temporarily unavailable”,资源暂时不可用。可文件不就在那里吗,怎么会不可能用!?没办法找google,谷歌一下果然有人碰到相同的问题,这就好办。
在nginx官方论坛看到有人碰到相同的问题:http://forum.nginx.org/read.php?2,191155。最好一个回帖:
I believe samba uses fcntl(F_SETLEASE) on linux (and this is what causes EAGAIN)
凌乱了,怎么跟samba扯上关系!?而且说的这么高深,什么fcntl 、F_SETLEASE、EAGAIN完全不懂啊。
带着失望进入stockoverflow:http://stackoverflow.com/questions/10202567/nginx-resource-temporarily-unavailable-using-a-samba-share。看这标题,人家指明使用samba服务器在提问哦,进去一看发现这大哥同样看了nginx官方论坛的帖子才来提问的啊。下面有人回帖到在samba配置文件中加入两项可以解决问题,分别是:oplocks = no、level2 oplocks = no。加上重启,果然问题解决。神奇啊
问题解决就是轻松。不过冷静下来想想,还一连串的问题:这两个配置项是什么意思,为什么加上就好了!?问题虽然解决了但是什么更深层的原因不得而知。另外,如果是samba的问题,那是不是不管什么web服务器都会有这问题了,于是又装了一个apache,并不会出现出现500错误。所以问题并不是那么简单,但这其中肯定 有联系,不过自己解决不了只能留给大家了。感兴趣的童鞋可以看下这个网页:Bug 8974 – Kernel oplocks are broken when uid(file) != uid(process)
启动smaba后nginx 11 resource temporarily unavailable[转载]