显示标签为“Nginx”的博文。显示所有博文
显示标签为“Nginx”的博文。显示所有博文

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的配置如下:
http_port 3128 vhost
cache_peer 10.146.18.213 parent 8080 0 originserver
对于HTML文件,工作正常。但是对目录,如果在访问地址后面有"/",访问正常;但是如果去掉"/",则URL会由
http://cache.fatduck.org:3128/dvorak
变成:
http://cache.fatduck.org:8080/dvorak/
相当于浏览器是从Nginx而不是从Squid得到了应答。而在生产环境中,Nginx的监听端口8080可能是被防火墙阻止的,这样没有"/"的话,这个请求就得不到应答,难于看到问题。
没有"/"时的HTTP报头
我的理解是Squid转给了Nginx,Nginx对目录请求自动在后面加了"/",这样301之后就不返回请求给Squid了。解决办法是让配置Nginx,让它在目录后面显式地增加"/":
if (-d $request_filename) {
        rewrite ^(.*[^/])$ $1/ break;
}
之后的报头就没有301了:
解决问题后的HTTP报头
这样URL不会变,还是http://cache.fatduck.org:3128/dvorak,甚至连最后的"/"都没有,尽管我们在Nginx里面重写URL加了"/"。

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 / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.html;
}
把这段注释掉就好了,404也正常了。 Ubuntu为啥要默认这样的坑爹配置呢?CentOS 5.5没有这个问题。

2011年1月22日星期六

备份服务

不小心把FreeBSD搞宕机了,上面有主页,还有一些自己的Web服务。这个机器一时还没人给我去看,既然还有别的机器,就搞个服务的备份吧。最简单的备份,就是宕机后把域名的A记录改到新地址,然后在新机器上从桌面电脑同步一份主页的内容上去。这样把主页恢复了。

几个动态的站点只有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。