欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx 初认识

程序员文章站 2022-03-04 18:22:58
...

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

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

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