我在本地 CentOS 6.3 服务器上运行 nginx。我有一个在网页中加载的特定 javascript 文件。如果我更改 javascript 文件并刷新网页,我总是会收到 500 错误。然后当我再次刷新它时,JS 文件就可以正常加载。
稍后,如果我再次更改 JS 文件并刷新浏览器,仍会出现同样的 500 错误。再次刷新,加载就正常了。只有第一次刷新时才会出现 500 错误。
这是为什么?这是我的服务器配置:
server {
listen 80;
server_name www.mysite.local;
rewrite ^(.*) http://mysite.local$1 permanent;
}
server {
listen 80;
server_name mysite.local;
access_log /var/log/nginx/mysite.local/access.log;
error_log /var/log/nginx/mysite.local/error.log;
rewrite_log on;
root /vhosts/mysite/mysite.local/public;
index index.php;
# Heres my redirect, try normal URI and then our Laravel urls.
location / {
try_files $uri $uri/ /index.php?$query_string;
}
include /etc/nginx/templates/other;
这是包含文件:
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
错误日志:
2014/09/06 23:19:58 [crit] 27884#0: *29935 open() "/vhosts/mysite.local/public/js/testfile.js" failed (11: Resource temporarily unavailable), client: 192.168.1.51, server: mysite.local, request: "GET /js/testfile.js HTTP/1.1", host: "mysite.local", referrer: "http://mysite.local/some/page"
我是唯一一个连接到服务器的人。没有其他流量。而且,无论我在保存文件后立即刷新页面还是等待(例如 15 秒左右),都没有关系。第一次刷新总是出现 500 错误。
我正在通过 Samba 连接访问/编辑文件。
答案1
这最终是 Samba 的问题,而不是 nginx。我通过在 Samba 配置中添加以下内容解决了该问题:
oplocks = no
level2 oplocks = no
最初在以下 SO 线程中发现:https://stackoverflow.com/questions/10202567/nginx-resource-temporarily-unavailable-using-a-samba-share