关于Nginx的资料
nginx里面的配置CI可以配置成这样

location /DIR/ {
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /DIR/index.php/$1 last;
    }
}

location ~ ^/DIR/index.php {
    fastcgi_index  index.php;
    fastcgi_pass   127.0.0.1:9000;
    include        fastcgi_params;
    set $script $uri;
    set $path_info "/";
    if ($uri ~ "^(.+\.php)(/.+)"){
        set $script $1;
        set $path_info $2;
    }
    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SCRIPT_FILENAME $document_root/$script;
    fastcgi_param SCRIPT_NAME $script;
}


用port安装的nginx,使用ci发现一直都有问题,redirect的时候都是换成https的了
下文说的问题就是正解,是判断HTTPS的bug

修改nginx的配置就可以
fastcgi_param   HTTPS                   $https;
换成
fastcgi_param   HTTPS                   off;

参考文章:
http://www.chenyudong.com/...
A服务器 代理 B服务器的内容,但发现用户访问A服务器只能获取到部分内容。

检查几个问题:

1 直接访问B服务器,正常
2 访问非php内容,正常
3 关闭压缩也没有解决问题,与压缩无关

试过 gzip和gunzip的功能,都没有解决,不过这两个跟缓存压缩数据有帮助哦
后来查得两篇文章,解决了
是 fastcgi_temp 目录的读写权限问题

表现症状:nginx的错误日志出现大量类似如下的错误:

引用
2013/08/25 00:41:28 [crit] 32763#0: *5439 open() "/Data/apps/nginx/fastcgi_temp/5/02/0000000025" failed (13: Permission denied) whil
e reading upstream, client: 203.171.237.2, server: www.aslibra.com, request: "GET /thread.html HTTP/1.0", upstream: "f
astcgi://127.0.0.1:9000", host: "www.aslibra.com", referrer: "http://www.aslibra.com/f.html"


参考文章里的解决方式:

引用
从这句判断 可能是 生成的文件过大 要以 文件的形式存放  然后 nginx 有没有权限读取造成.
于是 chmod -R 764 /usr/local/nginx/fastcgi_temp/ 问题解决.


参考之二:fastcgi_temp 目录的作用

先简单的说一下 Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。

比如如下配置:

fastcgi_buffers      8 4K;
fastcgi_buffer_size  4K;


fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8*4K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2*4K 共 2 个 buffers。

当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。

内存中缓冲了 36Kb,剩下的会写入的文件中。而实际的情况是,运行 Nginx Process 的用户并没有 fastcgi_temp 目录的写权限,于是剩下的数据就丢失掉了。

解决方法就比较简单了,粗暴的删掉 fastcgi_temp 目录或者温柔的 chown + chmod 都可以解决问题

参考文章:

nginx 的诡异问题...
分析 fastcgi_temp 错误以及 Nginx 的 Buffer 机制
我碰到同样的问题,查到下面的文章
查看原文可以看到图片说明



Web服务器在用着nginx,在日志中偶尔会看到有499这个错误。开始没想明白到底是什么意思,在Twitter上提问也没有得到答案。日志如下:

    61.135.249.220 – - [02/Oct/2009:10:28:21 +0000] “GET /subject/93390/ HTTP/1.1″ 499 0 “-” “Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )”

    61.135.249.216 – - [02/Oct/2009:10:30:08 +0000] “GET /subject/476083/ HTTP/1.1″ 499 0 “-” “Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )”

rfc2616中,400~500间的错误码仅定义到了417,所以499应该是nginx自己定义的。后来想到读读nginx代码,疑问立解。

在nginx源码中grep一下499(现在看源码习惯用grep大法),得到如下结果:

nginx-special-response

找到src/http/ngx_http_special_response.c 这个文件,里面定义了不少http错误码以及相应的返回。注意到有下面这样的注释:

nginx-special-codes

可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。要解决此问题,就需要在程序上面做些优化了。

除了499,nginx还定义了495/496/497/498 这几个Status Codes,相应的意义也在上面的注释中可以看到。开源的东西,可以随时翻看源码,这一点很棒。

请参考原文:http://www.blogkid.net/arc...
因为后端服务器经常发生503错误,所以服务不能保证,为了避免访问错误,可以在缓存服务器上做调整。
一个特性是,如果缓存过期,但访问后端服务器又不能返回正常的内容,则使用缓存内容,保证服务质量。

nginx里面可以增加一条这个:
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;


这个同时包括updating,也就是说正在更新缓存时,也会直接返回缓存内容,可以避免重复发起更新请求

详细用法参考官网:

引用
语法:  proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;
默认值:  
proxy_cache_use_stale off;
上下文:  http, server, location

如果后端服务器出现状况,nginx是可以使用过期的响应缓存的。这条指令就是定义何种条件下允许开启此机制。这条指令的参数与proxy_next_upstream指令的参数相同。

此外,updating参数允许nginx在正在更新缓存的情况下使用过期的缓存作为响应。这样做可以使更新缓存数据时,访问源服务器的次数最少。

在植入新的缓存条目时,如果想使访问源服务器的次数最少,可以使用proxy_cache_lock指令。


参考页面:http://nginx.org/cn/docs/h...
今天碰到一个dz的批量上传文件不成功的问题。
追踪发现,是把静态文件都优化了新地址导致的,用图片服务器存放了swf文件
swf文件上传文件时,就变成向静态文件做post,nginx就会返回405错误
修正域名即可解决。

另外,发现一个好玩的:

NGINX不允许向静态文件提交POST方式的请求,否则报405错误。测试方法为,使用curl向服务器上的静态文件提交POST请求:
curl -d 1=1 http://localhost/version.txt

得到以下结果:

<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.0.11</center>
</body>
</html>

网上传抄的添加以下配置的解决办法不可用:

error_page 405 =200 @405;
location @405
{
    root /srv/http;
}

一种不完美但可用的方法为:
upstream static_backend {
    server localhost:80;
}

server {
    listen 80;

    # ...

    error_page 405 =200 @405;
    location @405 {
        root /srv/http;
        proxy_method GET;
        proxy_pass http://static_backend;
    }
}

即转换静态文件接收的POST请求到GET方式。

http://0x3f.org/blog/nginx...
分页: 1/5 第一页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐