• Nginx1.19安装优化监控实时同步手册


    环境如下:

    [root@xxxxx ~]# cat /etc/redhat-release 
    CentOS Linux release 7.9.2009 (Core)
    [root@xxxxx ~]# ls
    nginx-1.19.6         nginx-module-vts-master      nginx-vts-exporter-0.10.7
    nginx-1.19.6.tar.gz  nginx-module-vts-master.zip  nginx-vts-exporter-0.10.7.zip
    

    安装

    # 添加用户
    useradd nginx && usermod -s /sbin/nologin nginx
    # 安装依赖
    yum install gcc gcc-c++ pcre-devel openssl-devel zlib zlib-devel pcre -y
    # 编译安装 nginx-module-vts-master 是监控用的,后面会细说
    ./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-module-vts-master/ && make && make install
    

    配置

    nginx.conf

    user nginx;
    worker_processes  auto;
    worker_cpu_affinity auto;
    error_log  logs/error.log warn;
    pid        /var/run/nginx.pid;
    worker_rlimit_nofile 65535;
    
    events {
        use epoll;
        worker_connections  65535;
    }
    
    
    http {
        fastcgi_intercept_errors on;
        proxy_intercept_errors on;
        include       mime.types;
        default_type  application/octet-stream;
        charset     UTF-8;
     
        large_client_header_buffers 4 16k;
        client_body_buffer_size 64k;
        proxy_connect_timeout 300;
        proxy_read_timeout 300;
        proxy_send_timeout 300;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        client_header_buffer_size 64k;
        client_max_body_size 50m;
        proxy_buffer_size 64k;
        proxy_buffers 8 32k;
    
    log_format access ' $remote_addr; -; $remote_user; [$time_local]; "$request"; $status; $body_bytes_sent; "$http_referer"; "$http_user_agent"; $http_x_forwarded_for; $server_addr; $upstream_addr; $upstream_response_time; $request_time;';
    
        access_log  logs/access.log access buffer=32k;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout  120s 120s;
        keepalive_requests 300;
    
        gzip  on;
        gzip_min_length 1k;
        gzip_buffers 32 4k;
        gzip_http_version 1.1;
        gzip_comp_level 4;
        gzip_types text/plain application/x-javascript application/javascript application/css text/css application/xml text/javascript;
        gzip_vary on;
    
        include   /usr/local/nginx/conf/vhost/*.conf;
    }
    

    https.conf (性能提升的关键)

    server {
        listen  443 ssl reuseport http2;
        server_name xx.cn;
        ssl_certificate /usr/local/nginx/cert/xx.cer;
        ssl_certificate_key /usr/local/nginx/cert/xx.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";ssl_prefer_server_ciphers on;
        error_page 400 401 402 403 404  408 410 412 413 414 415 500 501 502 503 506 = /error.html;
    }
    

    监控

    由于要监控 Nginx 的 qps,需要用到 https://github.com/hnlq715/nginx-vts-exporter,而 Nginx-vts-exporter 又依赖于 nginx-module-vts,nginx-module-vts 前面编译的时候已经添加了该模块了。下面配置一下:

    http {
        vhost_traffic_status_zone;
    
        ...
    
        server {
    
            ...
    
            location /status {
            	allow 192.168.201.0/24;
                deny all;
                vhost_traffic_status_display;
                vhost_traffic_status_display_format html;
            }
        }
    }
    

    打开浏览器访问 http://192.168.201.179/status/format/json 即可看到相应指标。这不是重点,看下一个Nginx-vts-exporter,这个自己编译老是有问题,找同事要了现成的包

    nohup ./nginx-vts-exporter --nginx.scrape_uri=http://127.0.0.1/status/format/json &
    

    同步

    使用 lsyncd + rsyncd 做实时同步。将179的/usr/local/nginx/conf//usr/local/nginx/html目录实时同步到180机器上。

    179操作:

    yum install lsyncd -y
    

    配置

    [root@yyyyy web-service]# cat /etc/lsyncd.conf 
    settings {
        logfile = "/tmp/lsyncd.log",         
        statusFile = "/tmp/lsyncd.status",   
        pidfile = "/var/run/lsyncd.pid",         
        statusInterval = 1,                      
        nodaemon = false,                        
        inotifyMode  = "CloseWrite",
        maxProcesses = 1,                        
        maxDelays = 1,                           
    }
    sync {
        default.rsync,
        source = "/usr/local/nginx/conf/",       
        target = "xx@192.168.201.180::conf", 
        default.rsync,
        source = "/usr/local/nginx/html/",
        target = "xx@192.168.201.180::html",
        exclude = "/image",
    rsync = {
        binary = "/usr/bin/rsync", 
        archive = true,            
        compress = false,          
        owner = true,              
        perms = true,              
        whole_file = false,
        password_file = "/etc/passwd.txt"
        }
    }
    sync {
        default.rsync,
        source = "/usr/local/nginx/html/",
        target = "xx@192.168.201.180::html",
        exclude = "/image",
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = false,
        owner = true,
        perms = true,
        whole_file = false,
        password_file = "/etc/passwd.txt"
        }
    }
    

    密码文件

    [root@yyyyy]# cat /etc/passwd.txt
    RFSiGjEgP$$062Lm
    [root@yyyyy]# chmod 400 /etc/passwd.txt
    

    180操作:

    安装

    yum install rsync -y
    

    配置

    [root@xxxxx web-service]# cat /etc/rsyncd.conf 
    log file = /var/log/rsyncd.log
    pidfile = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    secrets file = /etc/rsync.pass 
    max connections = 0
    uid = root
    gid = root
    port = 873
    use chroot = no
    read only = no
    list = no
    timeout = 600
    auth users = xx
    hosts allow = 192.168.201.179
    hosts deny = 0.0.0.0/32
    
    [html]
    path = /usr/local/nginx/html/
    comment = html
    
    [conf]
    path = /usr/local/nginx/conf/
    comment = conf
    

    验证文件

    /etc/rsync.pass

    [root@xxxxx]# chmod 400 /rsync.pass
    [root@xxxxx]# cat /etc/rsync.pass 
    xx:RFSiGjEgP$$062Lm
    

    在179新建一个文件,看看是否会实时同步到180

  • 相关阅读:
    jni 内存泄露 local reference table overflow (max=512)
    解决Android BitmapOutOfMemory 内存泄露
    c/c++ library编译
    如何查Android native crash BUG
    Shallow Size Retained Size
    android adb 命令发送 keyevent
    Android Dialog背景全透明无边框 Theme Style
    Android 销毁ImageView的bitmap
    Android EditText show softKeyBoard automatically
    jQuery 参考手册 事件
  • 原文地址:https://www.cnblogs.com/fsckzy/p/14211386.html
Copyright © 2020-2023  润新知