nginx变量

$args   请求中的参数

$binary_remote_addr远程地址的二进制表示

$body_bytes_sent  已发送的消息字节数

$content_lengthHTTP请求信息里的”Content-Length

$content_type  HTTP请求信息里的”Content-Type

$server_port

$server_protocol

$uri 请求的URI,可能和最初值不同,可能经过重定向之类的

$server_name

$server_addr

$scheme

$request_uri

$request_method

$request_filename

$request_body_file

$remote_addr

$remote_port

$request

$request_string

$nginx_version

$http_cookie

$http_referer

$http_post

$document_uri与uri相同

$document_root针对当前请求的根路径设置值

 

events{

 

}

http{

 

}

server{

    listen80;

    server_name*.*;

    charsetutf-8;

    root

    sslon;

    location~.*\.(php|php5)?${

        fastcgi_pass127.0.01:9000;

        fastcgi_indexindex.php;

        includefastcgi.conf;

    }

 

    location~.*\.(gif|jpg|jpeg|png|bmp|swf)${

        expires 30d;

    }

 

    location~.*\.(js|css)${

        #dosomething

    }

}

 

fastcgi.conf

 

fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param   QUERY_STRING    $query_string;

fastcgi_param   REQUEST_METHOD  $request_method;

fastcgi_param   CONTENT_TYPE    $content_type;

fastcgi_param   CONTENT_LENGTH  $content_length;

 

 

fastcgi_param   SCRIPT_NAME $fastcgi_script_name;

fastcgi_param   REQUEST_URI $request_uri;

fastcgi_param   DOCUMENT_URI    $document_uri;

fastcgi_param   DOCUMENT_ROOT   $document_root;

fastcgi_param   SERVER_PROTOCOL $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;

fastcgi_param   SERVER_SOFTWARE nginx/$nginx_version;

 

 

fastcgi_param   REMOTE_ADDR $remote_addr;

fastcgi_param   REMOTE_PORT $remote_port;

fastcgi_param   SERVER_ADDR $server_addr;

fastcgi_param   SERVER_PORT $server_port;

fastcgi_param   SERVER_NAME $server_name;

 

fastcgi_param   REDIRECT_STATUS 200;

 

#定义负载均衡

nginx 的upstream 目前支持4种方式的分配

1、轮询  每个请求按时间逐一分配到不同的后端服务器,如果后端down掉,能自动剔除

2、weight  指定轮询几率,weight和访问率成正比,用于后端服务器性能不均衡的情况

3、ip_hash 每个请求按访问ip的hash结果分配,可以解决session共享问题

4、fair(第三方)按后端服务器响应时间来分配

5、url_hash(第三方)

配置

upstream myServer{

    server127.0.0.1:9090 down;

    server127.0.0.1:8080 weight=2 fail_timeout=30s;

    server127.0.0.1:8081 weight=2 fail_timeout=30s;

}

proxy_pass http://myServer;

down: 表示当前的server不参与负载

weight: 默认为1,越大附在权重越大

max_fails:允许失败的次数默认为1,当超过最大次数时,返回prox_next_upstream 模块定义的错误

backup:其他所有非backup的服务器down的时候或忙的时候,请求。

fail_timeout:max_fails次失败后,暂停的时间

 

session共享

1) 不使用session,换作cookie

2) 应用服务器自行实现共享memcache或数据库保存

3)ip_hash

ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,因此ip_hash是有缺陷的,不能在一些情况下使用:

 

1/ nginx不是最前端的服务器。ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。

 

2/ nginx的后端还有其它方式的负载均衡。假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上。这么算起来,nginx后端只能直接指向应用服务器,或者再搭一个squid,然后指向应用服务器。最好的办法是用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去。

4)upstream_hash

为了解决ip_hash的一些问题,可以使用upstream_hash这个第三方模块,这个模块多数情况下是用作url_hash的,但是并不妨碍将它用来做session共享:

假如前端是squid,他会将ip加入x_forwarded_for这个http_header里,用upstream_hash可以用这个头做因子,将请求定向到指定的后端:

可见这篇文档:http://www.sudone.com/nginx/nginx_url_hash.html

在文档中是使用$request_uri做因子,稍微改一下:

hash  $http_x_forwarded_for;

这样就改成了利用x_forwarded_for这个头作因子,在nginx新版本中可支持读取cookie值,所以也可以改成:

hash  $cookie_jsessionid;

假如在php中配置的session为无cookie方式,配合nginx自己的一个userid_module模块就可以用nginx自发一个cookie,可参见userid模块的英文文档:

http://wiki.nginx.org/NginxHttpUserIdModule

另可用姚伟斌编写的模块upstream_jvm_route:http://code.google.com/p/nginx-upstream-jvm-route/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值