匹配不同的客户端
http {
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
server {
listen 80;
server_name localhost/www;
charset utf-8;
location / {
root html;
index index.html index.htm;
}
if ($http_user_agent ~* firefox) { # ~符号代表正则匹配,*符号代表不区分大小写
rewrite /(.*) /firefox/$1;
} #在./nginx/html/新建一个firefox文件夹
if ($http_user_agent ~* Windows) {
rewrite /(.*) /windows/$1;
}
}
}
#log_format main '$remote_addr - $remote_user [$time_local](时区时间)
"$request" (默认为favicon.ico(图标),或者指定访问地址) '
# '$status(状态) $body_bytes_sent "$http_referer" '
# '"$http_user_agent(客户端信息)" "$http_x_forwarded_for"';
nginx反向代理
算法详解:https://www.cnblogs.com/1214804270hacker/p/9325150.html
http {
upstream webserver { #webserver可以随意命名
ip_hash;
server host1 weight=1 max_fails=1 fail_timeout=5;
server host2 weight=2 max_fails=1 faul_timeout=5;
check interval=3000 rise=2 fail=5 timeout=1000 type=http;
#weight 权重
#max_fails 设置最大失败次数
#fail_timeout 设置失败超时时间,单位为秒;
#down 判断为该主机宕机,不做调度
# 自动检查,interval=3000,代表3s,rise=2代表请求2次都正常则标记realserver为up
# fail=5,检测5次都失败,则标记realserver的状态为down,超时时间为1秒。
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webserver; #不写http会报url错误
# 设置IP黑白名单
allow 192.168.168.0/24;
deny 0.0.0.0/0;
}
}
}
nginx tcp/udp调度
官方文档:
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
需要安装 --with-stream模块
stream {
upstream backend {
server 192.168.168.52:22;
server 192.168.168.53:22 down;
server 192.168.168.54:22 backup; 设为备用服务器,当主服务器不可用时,将用来传递请求;
}
server { #一个server就相当于一个虚拟主机。
listen 12345;
proxy_pass backend;
#proxy_connect_timeout 1s;
#proxy_timeout 3s; 打开之后不知为啥调度会失败
}
}
http {...} #指http调度
http调度格式
http {
upstream {}
server {}
}
TCP/UDP调度格式(需要安装--with-stream模块)
stream {
upstream{}
server {}
}
官网模板格式:http://nginx.org/en/docs/stream/ngx_stream_core_module.html
会话保持,两种方法
ip_hash
原理:ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。
缺点:当后端服务器宕机后,seesion会话丢失;同一客户端会被转发到同一个后端服务器,可能会导致负载失衡;
> 配置如下
upstream http {
ip_hash;
server 10.10.20.11;
server 10.10.20.12;
}
sticky
博客网站:http://t.csdn.cn/kSuLP
原理:根据服务端给客户端的cookie,客户端再次请求时会带上此cookie,nginx会把此cookie的请求转发到 颁发cookie的服务器上。
sticky官网:
官网:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
tar -xf
mv ** /erp/tengine/module/nginx-sticky-module
./configure *** --add-module=/erp/tengine/module/nginx-sticky-module
upstream http {
sticky name=ngx_cookie expires=6h;
server 10.10.20.11 ;
server 10.10.20.12;
}
tengine 动态加载模块
nginx(Tengine) 添加新模块的时候,千万别和nginx 一样 make make install 后悔来不急,之前编译的配置都没了。
在Tengine-2.3.0版本后废弃Tengine的dso_tool工具以及dso配置指令
http://tengine.taobao.org/document_cn/dso_cn.html
tengine解决方法:
./dso_tool --add-module=/home/dso/lua-nginx-module(模块目录)
dso {
load ngx_http_concat_module.so;
}
events {
worker_connections 1024;
}
nginx -t
nginx -s reload