Nginx 初认识

最近研究了一下Nginx的详细配置,Nginx作为各大互联网网站必备的负载神器,和硬件负载相比成本更加低廉,同时可以提高系统性能、增强系统的健壮性、提高系统有效服务时长、降低系统出错的可能性,所以备受青睐。
Nginx的配置包括了user,worker_process,worker_rlimit_nofile,event,http等关键配置节点,总结导图如下:这里写图片描述

详细的各个节点配置信息如下:

user  nginx;  用户和用户组
worker_processes  4;  #工作进程,根据硬件调整,大于等于cpu核数
worker_cpu_affinity 0001 0010 0100 1000;  cpu内核(二进制,不同的站位对应不同的内核)
worker_rlimit_nofile 65536;  指定进程可以打开的最大描述符:数目。

events {
        use epoll;   #使用epoll的I/O 模型  多路复用
        worker_connections  30000;  #工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行  ;每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
}

http {
                include       mime.types;   #设定mime类型,类型由mime.type文件定义
                default_type  application/octet-stream;       

                log_format  mainWeb  '$remote_addr - $remote_user [$time_local] "$request" '
                                  '$status $body_bytes_sent "$http_referer" '
                                  '"$http_user_agent" "$proxy_add_x_forwarded_for" $request_time';
                                        $remote_addr$http_x_forwarded_for用以记录客户端的ip地址;

                                        $remote_user:用来记录客户端用户名称;

                                        $time_local: 用来记录访问时间与时区;

                                        $request: 用来记录请求的url与http协议;

                                        $status: 用来记录请求状态;成功是200$body_bytes_s ent :记录发送给客户端文件主体内容大小;

                                        $http_referer:用来记录从那个页面链接访问过来的;

                                        $http_user_agent:记录客户毒啊浏览器的相关信息;
                                        $x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;

                access_log  logs/access.log  mainWeb;  #需要用access_log指令指定日志文件的存放路径;


                proxy_set_header Host $Host;
                proxy_set_header X-Real_Ip $remote_addr;         $remote_addr客户端ip
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                real_ip_header    X-Forwarded-For;                


                sendfile        on;
                                        #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,
                                        对于普通应用,必须设为on。
                                        如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。

                keepalive_timeout  65;  #keepalive超时时间。

        #gzip 相关是对网络发包数据压缩的配置,文件压缩、提高效率
                gzip  on;
                gzip_min_length 500;
                gzip_proxied    expired no-cache no-store private auth;
                gzip_types      text/javascript text/css text/plain text/x-json application/xml application/x-javascript;
                #server_tag IIS/7.0;

                limit_conn_zone $binary_remote_addr zone=addr:10m;
                limit_conn_log_level info;

                client_max_body_size 5m;  //设定通过nginx上传文件的大小

                upstream tomcats {       
                                server 127.0.0.1:8080;
                } 

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

                        1、轮询(默认)

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

                        2、weight
                        指定轮询机率,weight和访问比率成正比,用于后端服务器性能不均的情况。
                        例如:
                        upstream bakend {
                        server 192.168.0.14 weight=10;
                        server 192.168.0.15 weight=10;
                        }

                        2、ip_hash
                        每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
                        例如:
                        upstream bakend {
                        ip_hash;
                        server 192.168.0.14:88;
                        server 192.168.0.15:80;
                        }

                        3、fair(第三方)
                        按后端服务器的响应时间来分配请求,响应时间短的优先分配。
                        upstream backend {
                        server server1;
                        server server2;
                        fair;
                        }

                        4、url_hash(第三方)

                        按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

                        例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

                        upstream backend {
                        server squid1:3128;
                        server squid2:3128;
                        hash $request_uri;
                        hash_method crc32;
                        }

                        tips:

                        upstream bakend{#定义负载均衡设备的Ip及设备状态
                        ip_hash;
                        server 127.0.0.1:9090 down;
                        server 127.0.0.1:8080 weight=2;
                        server 127.0.0.1:6060;
                        server 127.0.0.1:7070 backup;
                        }
                        在需要使用负载均衡的server中增加
                        proxy_pass http://bakend/;

                        每个设备的状态设置为:
                        1.down表示单前的server暂时不参与负载
                        2.weight默认为1.weight越大,负载的权重就越大。
                        3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
                        4.fail_timeout:max_fails次失败后,暂停的时间。
                        5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

                        nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

                        client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
                        client_body_temp_path设置记录文件的目录 可以设置最多3层目录

                        location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

                server {

                        listen       80; #配置监听端口
                        server_name  _;         #配置访问域名 

                        if ( $request_method !~ GET|POST|HEAD ) {
                         return 403;
                        }

                        location /NginxStatus {
                                allow 10.0.0.0/8; 
                                allow 172.0.0.0/8; 
                                deny all;
                                stub_status on;
                                access_log off;
                        }

                        location / {
                                proxy_read_timeout 65;
                                proxy_pass http://tomcats ;     //在需要使用负载均衡的server中增加  proxy_pass http://bakend/;

                            if ($uri !~ ^/luckymapiproxy){   //$uri等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
                                       rewrite ^/(.*)$ /luckymapiproxy/$1;
                                }

                                #rewrite ^/$ /ucsimage/;
                                #rewrite ^/healthCheck.jsp$ /luckycenteros/healthCheck.jsp;
                        }
                }
}

以上便是了解到的nginx的配置信息,结合项目中的实践情况,了解每一个参数的含义和制约条件,才能够更好地理解和梳理。

[参考文章] https://blog.csdn.net/tjcyjd/article/details/50695922

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章