2012年11月27日星期二
Nginx的414错误
请求的URI太长了,Nginx给出了414错误。可通过这个参数调整Nginx可接受的URI长度。Nginx配置中,对该server的日志记录在单独的文件中,但出错时日志只记录在默认的日志文件中。应该是请求URI太长了,Nginx还没有处理到HTTP请求的Host头部,所以不知道是哪个虚拟主机。
2012年2月24日星期五
Squid+Nginx地址结尾的斜杠问题
前面用Squid(3.1)作反向代理,端口在3128;后面是Nginx(0.8.54),端口在8080。Squid的配置如下:
我的理解是Squid转给了Nginx,Nginx对目录请求自动在后面加了"/",这样301之后就不返回请求给Squid了。解决办法是让配置Nginx,让它在目录后面显式地增加"/":
这样URL不会变,还是http://cache.fatduck.org:3128/dvorak,甚至连最后的"/"都没有,尽管我们在Nginx里面重写URL加了"/"。
http_port 3128 vhost对于HTML文件,工作正常。但是对目录,如果在访问地址后面有"/",访问正常;但是如果去掉"/",则URL会由
cache_peer 10.146.18.213 parent 8080 0 originserver
变成:http://cache.fatduck.org:3128/dvorak
相当于浏览器是从Nginx而不是从Squid得到了应答。而在生产环境中,Nginx的监听端口8080可能是被防火墙阻止的,这样没有"/"的话,这个请求就得不到应答,难于看到问题。http://cache.fatduck.org:8080/dvorak/
![]() |
没有"/"时的HTTP报头 |
之后的报头就没有301了:if (-d $request_filename) {rewrite ^(.*[^/])$ $1/ break;}
![]() |
解决问题后的HTTP报头 |
2011年7月11日星期一
No input file specified错误解决方法
用的Nginx和php-fastcgi,如果URI是不存在的PHP文件,那么浏览器显示"No input file specified." 这个错误(应该)是php-fastcgi找不到对应文件出现的。解决办法是让nginx知道这个错误。参见Stackflow上的解决办法。
Nginx的404问题
在本机(Ubuntu 11.04)上装了个nginx来预览主页内容,发现没有404页面,乱敲个URI都显示的是首页。我自然就去找404相关的设置了。加上如下配置:
error_page 404 /404.html;之后还是没有变化。然后发现了这样一段配置:
location = /404.html {
root /usr/share/nginx/html;
}
location / {把这段注释掉就好了,404也正常了。 Ubuntu为啥要默认这样的坑爹配置呢?CentOS 5.5没有这个问题。
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;
}
2011年1月22日星期六
备份服务
不小心把FreeBSD搞宕机了,上面有主页,还有一些自己的Web服务。这个机器一时还没人给我去看,既然还有别的机器,就搞个服务的备份吧。最简单的备份,就是宕机后把域名的A记录改到新地址,然后在新机器上从桌面电脑同步一份主页的内容上去。这样把主页恢复了。
几个动态的站点只有FreeBSD上有,现在没法复制,就弄了一个恢复页面。所有的URI都定向到maintenance.php文件,要保证URI是maintenance.php的时候可以正常显示PHP文件:
几个动态的站点只有FreeBSD上有,现在没法复制,就弄了一个恢复页面。所有的URI都定向到maintenance.php文件,要保证URI是maintenance.php的时候可以正常显示PHP文件:
server {
listen 80;
server_name *.fossilet.org;
access_log /var/log/nginx/fossilet.access.log;
rewrite ^(.*)$ http://fossilet.org$1 permanent;
}
server {
listen 80;
server_name fossilet.org;
access_log /var/log/nginx/fossilet.access.log;
root /var/www/fossilet;
location / {
if (-f $document_root/maintenance.php) {
return 503;
}
index index.php index.html index.html;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.php break;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/fossilet$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
2011年1月20日星期四
nginx的问题
弄个维护页面(PHP),可是所有PHP都显示Temporarily unavailable。以为是配置的问题。看error.log,是fastcgi的网关处理超时。再检查配置文件的时候,发现fastcgi的网关写成了128.0.0.1。真是低级的错误啊。可能是远程登陆上去速度很慢,切换screen的时候在Vim里面Ctrl-A正好把127增加到了128。
订阅:
博文 (Atom)