nginx.conf

===========================================================================
nginx.conf
===========================================================================
user  nobody;
# 指定nginx worker进程运行用户以及用户组。

worker_processes  4;
# 指定nginx要开启的进程数。
# 每个nginx进程平均消耗10MB-12MB内存,根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和CPU的数量一样多的进程数即可。

error_log  logs/error.log;
# 定义全局错误日志文件,日志的级别分为:debug、info、notice、warn、error、crit,默认为crit。
# 定义全局错误日志的级别:eg:error_log  logs/error.log  error;


# event用来指定nginx的工作模式及连接数上限
events {
    # use  epoll;                # use:指定nginx的工作模式,可以省略。
    worker_connections  4096;     # worker_connections:定义nginx每个进程的最大连接数,默认1024。
}

# 定义http服务器(即nginx),利用它的反向代理功能来提供负载均衡
http {
    include       mime.types;
    default_type  application/octet-stream;

    # 设置日志的格式
    # $remote_addr 与 $http_x_forwarded_for 记录客户端的ip地址
    # $remote_user:客户端用户名称
    # $request:请求的url
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


    sendfile        on;   
    keepalive_timeout  65;

    limit_rate_after 3m;
    # 连接下载了3m后,再进行限速。
    
    limit_rate 512k;
    # 对每个连接限速512k

    # 开启gzip压缩,以减少带宽,提高页面加载速度。
    gzip on;
    gzip_min_length 1k;         # 大于1k的数据才会去压缩
    gzip_buffers 4 16k;            # 设置用于处理请求压缩的缓冲区数量和大小
    gzip_http_version 1.0;        # 指定gzip支持的http协议的版本。1.0表示支持1.0以上(包括1.0)的版本。注:通过proxy_pass进行反向代理时,nginx和后端的upstream server之间默认是用HTTP/1.0协议进行通信的
    gzip_comp_level 2;            # 压缩率,取值为1-9,压缩率越大则压缩的越彻底,但是需要消耗更多的cpu
    gzip_types       text/plain application/x-javascript application/javascript text/javascript text/css application/xml; # 需要进行压缩的数据类型
    gzip_vary on;                # 告诉客户端nginx在传送数据时使用了gzip压缩,即response中的Vary: Accept-Encoding。

    
    #######    分布式限流 #######
    limit_req_zone $binary_remote_addr zone=per_ip_req:10m rate=10r/s;
    # 概念:limit_req_zone是采用漏桶算法来限制单位时间内的请求数,即速率限制。
    # 第一个参数:$binary_remote_addr    表示通过remote_addr这个标识来做限制,即限制同一客户端ip的请求("binary_"的目的是为了缩写内存占用量)。
    # 第二个参数:zone=per_ip_req:10m    表示生成一个大小为10M,名字为per_ip_req的内存区域,用来存储访问的频次信息。
    # 第三个参数:rate=10r/s            表示同一客户端ip的最大访问频次。(r/s 即 request/second)

    limit_conn_zone $binary_remote_addr zone=perip_conn:10m;
    # 概念:limit_req_conn是用来限制同一时间内的连接数,即并发限制。
    # 用来限制同一ip在同一时间内的连接数。

    limit_conn_zone $server_name zone=perserver_conn:10m;
    # 用来限制同一server在同一时间内的连接数。
    ###########################
    
    # 定义web服务器
    server {
        listen       80;
        server_name  localhost;

        location / {
            return 403;
        }
        location /status {
            stub_status on;
            access_log  off;
        }
    }

include /usr/local/nginx/conf/vhost/*.conf;
}

============================================================
/usr/local/nginx/conf/vhost/advertise.conf
============================================================
########
# ip_hash:
# 概念:对请求的ip做hash运算,根据ip的hash值将请求分配到指定的服务器上。
# 说明:
#    1>若ip的hash值对应的服务器不能提供服务,则nginx就会根据当前的哈希值再哈希出一个新哈希值,然后将请求分配到另一个服务器上,若另一个服务也不可用,则nginx会再进行一次hash运算,直到找到可用的服务。
#    2>若server的数量n小于20,则nginx在找到可用服务前最多会尝试n次; 若server的数量大于20,且nginx在尝试了20次后仍然没有找到可用的服务,那么nginx就会以RR(轮询)的策略来选择新的server。
#
#    3>使用ip_hash无法保证服务器的负载均衡,可能有些服务器收到的请求多,有些服务器收到的请求少,且在ip_hash下设置weight不起作用。
#
#    4>若想让某台服务器暂时停止提供服务一段时间,那么我们最好是将这台服务器标记为down,而不是直接在upstream中将这个服务器的配置删除。
#    5>直接删除某台服务的配置,会导致hash函数发生变化(hash函数和server的数量有关),进而导致同一ip下的请求可能被打到不同的服务器上。
#
# 配置:
#    1>max_fails fail_timeout 表示:请求失败max_fails次后,服务在fail_timeout时间内不对外提供服务。
#    2>weight表示权重:weight和服务被请求的比率成正比,在ip_hash下weight会失效。
########
upstream advertise.conf {
    ip_hash;    # 对请求的ip做hash运算,根据ip的hash值将请求分配到指定的服务器上。
    server  192.168.0.1:8080 max_fails=3 fail_timeout=3s;            # ip_hash下weight会失效。
    server  192.168.0.2:8080 max_fails=3 fail_timeout=3s;


########
# RR(轮询)
# 概念:将请求按时间顺序逐一分配到不同的服务器上,若某一台服务器down掉,nginx会自动将其剔除。
# 说明:RR是nginx默认的方式。
# 配置:
#    1>weight表示权重:weight和服务被请求的比率成正比,。
########
upstream landpage.conf {
    server  192.168.1.1:8080 max_fails=3 fail_timeout=3s;
    server  192.168.1.2:8080 max_fails=3 fail_timeout=3s;

    

########
# fair
# 概念:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
# 说明:fair是第三方提供的一种策略。
########
upstream seckill.conf {
    fair;
    server  192.168.2.1:8080  weight=1  max_fails=2 fail_timeout=30s;            
    server  192.168.2.2:8080  weight=1  max_fails=2 fail_timeout=30s;
    server  192.168.2.3:8080  weight=1  max_fails=2 fail_timeout=30s backup;    # 备用服务,当其它服务都down或者忙时,请求会打到备用服务。
    server  192.168.2.4:8080  weight=1  max_fails=2 fail_timeout=30s down;        # 表示该服务暂时不接受请求。
}


########
# url_hash
# 概念:对请求的url做hash运算,根据url的hash值将请求分配到指定的服务器上。
# 说明:同一url总是被打到同一台服务器上,故当服务器为缓存服务器时url_hash的效果比较好。url_hash是第三方提供的一种策略。
########
upstream cache.conf {
    server  192.168.3.1:8080  weight=1  max_fails=2 fail_timeout=30s;            
    server  192.168.4.2:8080  weight=1  max_fails=2 fail_timeout=30s;
    hash $request_uri; 
    hash_method crc32; 
}


# 秒杀服务
server {
    listen       80;
    server_name  seckill.jxn.com;
    index index.html index.htm  index.jsp ;
    
    # 对URL进行匹配,可以进行重定向或者进行新的代理
    location / {
    
        proxy_pass      http://seckill;

        ######## 对该server进行限流 ########
        limit_req zone=per_ip_req burst=5 nodelay;    
        # 该server上对请求进行限流,burst表示漏桶(缓存区)的大小,默认是0;
        # 当请求的速率超过限制的速率(rate)时,nginx会将超过速率限制的请求放到漏桶中(超时)等待,如果漏桶满了,则nginx直接返回503,即客户端得到一个服务器忙的响应。
        # nodelay表示漏桶已满时直接返回503。注意:如果不设置nodelay,则我们必须设置rate,若二者都没设置,那么所有的请求都会排队等待。

        limit_conn perip_conn 2;                # 该server允许同一个ip同时发起的最大连接数
        limit_conn perserver_conn 1000;            # 该server在同一时间允许的最大连接数
        limit_rate 100k;                        # 每个连接(下载)限速100k
    }
}

# 主服务
server {
    listen 80;
    server_name speed.jxn.com;
    index index.html index.htm  index.jsp ;
    
    # root /data/tomcat/tomcat-speed/webapps/;
    location ~ ^/WEB-INF/* {
        deny all;
    }

    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;

    location / {
        index index.jsp;
        proxy_pass http://advertise.conf;
        proxy_redirect off;
        
        # 将代理服务器收到的用户的信息传到真实服务器上
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For  $http_x_forwarded_for;
        proxy_set_header Host $host;
        0
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_buffers           32 4k;
        proxy_connect_timeout   600;
        proxy_send_timeout      600;
        proxy_read_timeout      600;

    }
    

    location /landpage/ {
        index index.jsp;
        proxy_pass http://landpage.conf;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For  $http_x_forwarded_for;
        proxy_set_header Host $host;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_buffers           32 4k;
        proxy_connect_timeout   600;
        proxy_send_timeout      600;
        proxy_read_timeout      600;

    }
    # expires 1h;

    access_log /usr/local/nginx/logs/advertise.access.log;
    error_log  /usr/local/nginx/logs/advertise-error.log;

}

        
            

转载于:https://my.oschina.net/u/1399755/blog/1834356

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值