Nginx反向代理与负载均衡等配置文件示例

Nginx反向代理于负载均衡等配置文件示例

 

Nginx.conf配置文件


worker_processes  8;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;

    upstream cwbase {
        server 172.18.0.100:8082 weight=10  max_fails=3 fail_timeout=30s;
        server 172.18.0.101:8082 weight=10  max_fails=3 fail_timeout=30s;
    }

    server {

        listen 443 ssl;
        server_name  fileview.office.com;

        #access_log  logs/host.access.log  main;

        #ssl on;
        ssl_certificate ../cert/fileview.office.com.crt;
        ssl_certificate_key ../cert/fileview.office.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
            root   D:\DEFPATH;
            index  index.html index.htm;
        }     
    }

    server {

        listen 443 ssl;
        server_name  gsp.office.com;

        #access_log  logs/host.access.log  main;

        #ssl on;
        ssl_certificate ../cert/gsp.office.com.crt;
        ssl_certificate_key ../cert/gsp.office.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
            add_header Cache-Control no-cache;
            proxy_set_header   Host gsp.brc-ulife.com;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_pass         http://cwbase/;
            proxy_connect_timeout 30s;
            index  login.aspx;
        }     
    }
}

 


 

以下为参考文章:

 

Nginx入门简介

 

一:Nginx入门简介

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,目前中国互联网企业70%以上公司都在使用nginx作为自己的web服务器。Nginx特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx相对于Apache优点:

  • 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s
  • 反向代理性能非常强。(可用于负载均衡)
  • 内存和cpu占用率低。(为Apache的1/5-1/10)
  • 对后端服务有健康检查功能。
  • 支持PHP cgi方式和fastcgi方式。
  • 配置代码简洁且容易上手。

 

二:nginx的模块

核心模块:HTTP模块、EVENT模块和MAIL模块

基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,

第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块

 

三:nginx的安装

注意:首先需要安装pcre库,安装pcre支持rewrite库,也可以安装源码,注*安装源码时,指定pcre路径为解压源码的路径,而不是编译后的路径,否则会报错。

 yum install vim gcc telnet lrzsz openssl openssl-devel pcre pcre-devel  

 #下载Nginx源码包

wget -c http://nginx.org/download/nginx-1.9.10.tar.gz 

#创建nginx用户,并且设置为不能登录

useradd -r -s /sbin/nologin nginx 

#解压,进入解压目录,准备预编译,编译

tar xf nginx-1.9.10.tar.gz

cd nginx-1.9.10  

#编译,预编译

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module && make && make install 

#检查nginx配置文件是否正确,返回OK即正确。

/usr/local/nginx/sbin/nginx -t  

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok 

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

#启动,检测nginx

/usr/local/nginx/sbin/nginx  或者 2 ps -ef |grep nginx

至此,nginx就搭建完了,其实nginx搭建是很简单的。

 


 

 

Nginx常用命令说明

 

本文转自:https://www.cnblogs.com/maxtgood/p/9597990.html

 

Nginx常用命令管理

 

1.查看nginx进程:

  • ps -ef|grep nginx

 

2.平滑启动nginx:

  • kill -HUP `cat /var/run/nginx.pid`(进程文件路径在配置文件nginx.conf中可以找到)

或者

  • nginx -s reload   (这里的nginx命令如果没做环境变量的话那么就得输入全路径)

注意:平滑启动的意思是在不停止nginx的情况下,重启nginx,重新加载配置文件,启动新的工作线程,完美停止旧的工作线程。

 

3.强制停止nginx

  • pkill -9 nginx

 

4.检查对nginx.conf文件的修改是否正确

  • nginx -t -c /etc/nginx/nginx.conf ( /etc/nginx/nginx.conf 为自己nginx真实配置文件路径 )

或者

  • nginx -t(nginx为自己nginx sbin目录下的nginx可执行命令,一般没做环境变量就得写为全路径)

 

5.停止nginx的命令

  • nginx -s stop(nginx与上述意思相同)

或者

  • pkill nginx

 

6.查看nginx的版本信息

  • nginx -v

 

7.查看完整的nginx的配置信息

  • nginx -V

 


 

Nginx配置文件详解

 

本文转自:https://www.cnblogs.com/maxtgood/p/9598333.html

 

一:Nginx配置文件详解

nginx配置文件不算多,但是几乎每一层都有它精确的意思,所以要学习好nginx,必须先了解它的配置文件,接下来就解释一些nginx常用的一些配置文件的含义

#定义Nginx运行的用户和用户组
user  www www;

#启动进程,通常设置成和cpu的数量相等
worker_processes  8;

#为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打
#开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀
#,所以最好与ulimit -n的值保持一致。

worker_rlimit_nofile 102400;

#全局错误日志及PID文件
error_log  /usr/local/nginx/logs/error.log; 
#错误日志定义等级,[ debug | info | notice | warn | error | crit ]
pid        /usr/local/nginx/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀.
#所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;

#工作模式及连接数上限
events {
    use   epoll;                 #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
    worker_connections  102400;    #单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
    multi_accept on; #尽可能多的接受请求
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    
    #设定mime类型,类型由mime.type文件定义
    include       mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    access_log    /usr/local/nginx/log/nginx/access.log;
    
    sendfile      on;
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    
    #autoindex  on;  #开启目录列表访问,合适下载服务器,默认关闭。
    tcp_nopush on; #防止网络阻塞
    keepalive_timeout 60;
    #keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后,继请求时,keepalive-timeout功能可避免建立或重新建立连接。
    tcp_nodelay   on; #提高数据的实时响应性
    
    #开启gzip压缩
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2; #压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快。
    
    #值越大,消耗CPU比较高。
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    client_max_body_size 10m;      #允许客户端请求的最大单文件字节数
    client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
    proxy_connect_timeout 90;      #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_send_timeout 90;         #后端服务器数据回传时间(代理发送超时)
    proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_buffer_size 4k;          #设置代理服务器(nginx)保存用户头信息的缓冲区大小
    proxy_buffers 4 32k;           #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
    proxy_busy_buffers_size 64k;   #高负荷下缓冲大小(proxy_buffers*2)
    
    #设定请求缓冲
    large_client_header_buffers  4 4k;
    client_header_buffer_size 4k;
    #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k
    #不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
    open_file_cache max=102400 inactive=20s;
    #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
    open_file_cache_valid 30s;
    #这个是指多长时间检查一次缓存的有效信息。
    open_file_cache_min_uses 1;
    #open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive
    #包含其它配置文件,如自定义的虚拟主机
    include vhosts.conf;

以上为简单的nginx配置详解,根据项目需求来配置,并非所有都需要,视情况而定。

 

二:Nginx配置文件详解 负载均衡与反向代理

    
    #这里为后端服务器wugk应用集群配置,根据后端实际情况修改即可,test为负载均衡名称,可以任意指定
    #但必须跟vhosts.conf虚拟主机的pass段一致,否则不能转发后端的请求。weight配置权重,在fail_timeout内检查max_fails次数,失败则剔除均衡。(即可理解为负载均衡的安全检查,后面还会演示另种方法)
    upstream test {
        server   127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
        server   127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
    }
   
    #虚拟主机配置
    server {
        #侦听80端口
        listen       80;
        #定义使用www.maxiaotian.com访问,前提为此域名必须解析了此主机IP。
        server_name  www.maxiaotian.com;
        #设定本虚拟主机的访问日志
        access_log  logs/access.log  main;
            root   /data/webapps/maxt;  #定义服务器的默认网站根目录位置
        index index.php index.html index.htm;   #定义首页索引文件的名称
        
        #默认请求
        location ~ /{
          root   /data/www/maxt;      #定义服务器的默认网站根目录位置
          index index.php index.html index.htm;   #定义首页索引文件的名称
          #以下是一些反向代理的配置.
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
          proxy_redirect off;
          #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass  http://tdt_wugk;     #请求转向后端定义的均衡模块
       }
       
        #定义错误提示页面
        error_page   500 502 503 504 /50x.html;  
            location = /50x.html {
            root   html;
        }
        
        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
            root /data/www/maxt;
            #expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力。
            expires      3d;
        }

        #PHP脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        location ~ \.php$ {
            root /root;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /data/www/wugk$fastcgi_script_name;
            include fastcgi_params;
        }

        #设定查看Nginx状态的地址
        location /NginxStatus {
            stub_status  on;
        }

     }

}

大概的配置文件解释就到此了,对于一些初期接触nginx的同学肯定会觉得蒙蒙的,其实很正常,很多配置可能需要结合实践项目去认识会更快,更能理解。所以后面nginx系列文档中,我也会编写一些结合项目实践的一些配置,希望能帮到大家!

 


 

Nginx多域名配置

 

本文转自:https://www.cnblogs.com/maxtgood/p/9598610.html

 

一:Nginx多域名配置

在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器同时会配置N个虚拟域名主机,即多个域名对于同样一个80(亦可以非常规)端口。然后服务器IP数量很多,也可以配置基于多个IP对应同一个端口。这里具体介绍两种种类,方法大概相同,实现结果不同。

 

方法一:

需求:同个端口,访问域名不同,访问页面不同。

vim修改nginx.conf server段配置内容如下:

    server {
        listen       80;
        server_name  www.a.com;
        #access_log  logs/host.access.log  main;
        location / {
            root   html/a;
            index  index.html index.htm;
    }

    server {
        listen       80;
        server_name  www.b.com;
        #access_log  logs/host.access.log  main;
        location / {
            root   html/b;
            index  index.html index.htm;
    }

解释:创建两个不同的目录mkdir –p /usr/local/nginx/html/{a,b},然后分别在两个目录创建两个不同的index.html网站页面即可。通过客户端配置hosts指向两个域名,然后在IE浏览器访问测试效果。

 

方法二:

需求:同个端口,访问一级域名相同,二级域名不同,访问页面不同。(根据域名后缀区分访问页面)

vim修改nginx.conf server段配置内容如下:

server {

        listen       8089;

        server_name  sjb.suhuayue.com _;
        access_log  logs/host.access.log  main;
        error_log  logs/error.log;
        
        location / {
            index  index.html index.htm;
        }
        
        location ^~ /a/ {
            add_header X-Frame-Options DENY;
            proxy_set_header X-Client-Really-IP $remote_addr;
            alias /opt/qypay/a/;
            index  index.html index.htm;
        }

        location ^~ /b/ {
            add_header X-Frame-Options DENY;
            alias /opt/qypay/b/;
            proxy_set_header X-Client-Really-IP $remote_addr;
            index  index.html index.htm;
        }

}

配置说明:以上配置成功后,sjb.suhuayue.com/a/为页面一,sjb.suhuayue.com/b/为页面二。

注意几点:

1 以上配置文件中alias /opt/qypay/a/;这里必须以/结尾,因为你制定的是一个目录
2 如果现实页面的时候,页面能读取到,但是显示不出来,那么就是解析问题,可配合前端进行询问前端为哪种解析。
3 访问域名的时候,如下所诉相同,域名+location关键词 访问的时候,必须以/结尾,如:http://sjb.suhuayue.com/a/是正确的。http://sjb.suhuayue.com/a为错误的。

至此,基本上多域名访问配置也解释的差不多了。

 


 

Nginx负载均衡配置和健康检查

 

本文转自:https://www.cnblogs.com/maxtgood/p/9599068.html

注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。

nginx的强大之处不必要我细说,当初第一次接触nginx的时候就发现了它的强大之处,并且自我觉得非常有必要出一篇记录nginx的各个功能及坑点。欢迎大家对nginx感兴趣的朋友们来一起学习与及时提出错误及误点。有问题的可以在评论区@我。

 

一:Nginx负载均衡配置

其实负载均衡的意思很简单明了,网上很多原理一大堆的解释,可能看的似懂非懂。这里本人画了一个简单粗暴的原理图,仅供参考:

Nginx反向代理与负载均衡等配置文件示例_第1张图片

解释:其实nginx 作为一个轻量级、高性能的 web server 主要可以干的就两件事情,

  • 第一件事就是直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
  • 第二件事就是作为反向代理服务器实现负载均衡

因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。

 

这里介绍一种实践负载均衡+健康检查的方法。

直接vim /usr/local/nginx/conf/nginx.conf   修改upstream 段配置文件:

http {
    include       mime.types;
    default_type  application/octet-stream;

    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;
    upstream worldcup {
           server 10.124.25.28:8001;
           server 10.124.25.29:8001;
    }

Nginx配置文件详解的时候也提到了,注意upstream后面接的关键词,如果需要单台,同端口负载不同请求的时候,需要制定不同upstream,以下提供一个实践实例。

 

实践示例,仅供参考,不做解释:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    sendfile        on;
   
    keepalive_timeout  65;

    upstream keep_one {
        server 192.168.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.2:8080 weight=1 max_fails=2 fail_timeout=30s;
    }

    upstream keep_two {
        server 192.168.1.3:8081 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.4:8081 weight=1 max_fails=2 fail_timeout=30s;
    }

 server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }

        location /one {
            root html;
            index index.html index.htm;
            proxy_pass http://keep_one/;
            proxy_set_header Host $http_host;
            proxy_set_header Cookie $http_cookie;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For 
            $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size 300m;
        }

        location /two {
            root html;
            index index.html index.htm;
            proxy_pass http://keep_two/;
            proxy_set_header Host $http_host;
            proxy_set_header Cookie $http_cookie;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size 300m;
        }
  }
}

提供两个负载接口,同台服务器,同个IP,同个端口。

 

 二:Nginx负载后端的监控检查

其实以上配置文件中已经配置了健康检查的例子,以下介绍两种健康检查的方式。

 

方法一:

添加upstream的时候,直接ip+port后接weight=1 max_fails=2 fail_timeout=30s;
###如以下代码
upstream fastdfs_tracker {
    server 192.168.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.1.2:8080 weight=1 max_fails=2 fail_timeout=30s;
}
解释:weight为配置的权重,在fail_timeout内检查max_fails次数,失败则剔除均衡。

方法二:

添加upstream的时候,在最后一行添加

###如以下代码:

upstream test{ #负载均衡配置,默认的策略,按时间先后,有其他按ip hash,权重

        server 192.168.1.1:8080;

        server 192.168.1.2:8080;

        server 192.168.1.3:8080;

        check interval=3000 rise=2 fall=3 timeout=3000 type=http port=8080;

}

解释:# interval=3000:间隔3秒检查一次,rise=2:检查2次ok后端节点up,fall=3:三次检查失败后端节点down,timeout=3000:超时时间3秒,type=http:发http检查请求类型,port=8080检查端口,可省略,默认和server 192.168.1.1:8080中的端口一致。

至此关于nginx最常用的负载均衡+健康检查已经配置完成,后系列中还会介绍到相对常用的nginx的反向代理。

 


 

Nginx反向代理配置示例

 

本文转自:https://www.cnblogs.com/maxtgood/p/9599335.html

 

一:Nginx方向代理做下载文件

这里选择一个最简单的实践需求来演示nginx的反向代理功能,具体流程如下图:

Nginx反向代理与负载均衡等配置文件示例_第2张图片

为了简单理解,画了一个最简单的图,以便理解,目的就是,当用户需要通过a服务器的nginx WEB下载后端B服务器上的文件,(有些时候生产环境上可能并不是每个服务器都可以外网访问。)

  • 以下称接收请求的nginx为反向代理服务器,后端nginx为目标服务器。

 

先在目标服务器配置nginx:

    location ^~ /phones/ {
        
        add_header X-Frame-Options DENY;
        
        alias /opt/qypay/call-show-manager/phoneFile/;
        proxy_set_header X-Client-Really-IP $remote_addr;
        
        index  index.html index.htm;

    }

简单配置一下location下载文件就OK了。

 

然后在反向代理服务器配置nginx:

    location /phones/ { 

        #192.168.11.1:80为目标服务器的Ip与nginx的端口     
        proxy_pass http://192.168.11.1:80;
        add_header Access-Control-Allow-Origin *; 

    }

至此就能实现,通过访问nginx反向代理服务器而去下载目标服务器上/opt/qypay/call-show-manager/phoneFile/路径下的文件了。

 

Nginx日志分析和日志切割

 

本文转自:https://www.cnblogs.com/maxtgood/p/9599542.html

 

一:Nginx日志分析

其实在我们日常的运维工作中,只要有线上使用过Nginx服务器的人都知道,nginx正常运行后,我们都会经常密切关注Nginx访问日志的相关情况,发现有异常的日志信息需要进行及时处理。

那么我将跟大家一起来研究和分析Nginx日志,nginx一般默认日志路径为:/usr/local/nginx/logs/access.log 和error.log文件。如下图:

Nginx反向代理与负载均衡等配置文件示例_第3张图片

Nginx日志的格式一般在nginx.conf里面配置,常见的格式配置如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;

格式解释:

$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection_requests 当前通过一个连接获得的请求数量。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

那么一般Nginx日志分析需求有如下几点:

1) 分析截止目前为止访问量最高的IP排行。

  • awk '{print $1}' /usr/local/nginx/logs/access.log|sort |uniq -c |sort -nr |head -20就可以了。

2) 找到当前日志中502或者404错误的页面并统计。

  • awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print 1,1,7,$9}'|more

当然还有很多需求,只要你搞清楚了日志的格式与由来,并且有shell或者python基础的话,相信都不是问题的。

 

二:Nginx日志切割案例

Nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如在产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将会导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。那么这里就自然而然用到了shell+crontab 命令了。(当然是用python也是可以的)

脚本的功能,就是定时切割日志,这里切割的方法我们直接使用mv即可。

Nginx日志切割脚本,如下:

#!/bin/bash
#auto mv nginx log shell
#by author wugk
S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d`
echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"
sleep 2
if [ ! -d $D_LOG ];then

        mkdir -p  $D_LOG
fi

mv $S_LOG  $D_LOG

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

echo "-------------------------------------------"
echo "The Nginx log Cutting Successfully!"
echo "You can access backup nginx log $D_LOG/access.log files."

最后在crontab中添加如下代码即可,每天晚上自动去切割日志:

0 0 * * *  /bin/sh /data/sh/auto_nginx_log.sh  >>/tmp/nginx_cut.log 2>&1

 


 

Nginx常见问题解决方法示例

 

本文转自:https://www.cnblogs.com/maxtgood/p/9599752.html

 

一:Nginx错误代码解释

在我们日常使用中,Nginx经常会遇到很多问题,直接反馈在用户端的错误代码就是200、301、302、304、400、404、499、500、502、503、504等,请看如下解决方法:

注意:一般400代表网站服务未启动,404表示某个页面不存在,这两个错误代码都是比较简单,其他代码看如下

 

1)     502/503/504错误解决方法:

有时候访问会出现“502 Bad Gateway” 解决办法如下:

查看当前的PHP FastCGI进程数:

netstat -an | grep "php-cgi" | wc -l

如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,

那么,说明“FastCGI进程数”不够用,需要增大。

部分PHP程序的执行时间超过了Nginx的等待时间也会出现502的错误代码,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

http {
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}

如果是JAVA后端,Nginx返回502、503错误一般解决方法如下:

通过单个IP+端口去访问后端具体的实例,检查实例是否正常提供服务,一般nginx 502大都是因为后端实例或者数据库压力大,无法响应导致的。

 

2)     Nginx 499问题解决方法:

http 499错误代码的原因,是nginx内置的安全策略会将同一个ip post过来的并发过多的请求直接给中断掉。

在nginx.conf配置文件中加入了以下配置:

proxy_ignore_client_abort on;

结果没有499错误了,但是网站还是有无法访问的情况,最后查询到还是由于访问量大造成的。解决的办法就是增加后端实例,或者nginx实例数。

 

本文仅列出一些个别问题案例,解决方法仅供参考

 


 

Nginx版本升级

 

本文转自:https://www.cnblogs.com/maxtgood/p/9598113.html

 

1.Nginx升级

因为本人碰见过自己线上业务使用检测软件对web URL进行检测的时候,提示存在安全隐患,并且详情为“空指针间接引用漏洞出现个数超出,resolver存在释放后重利用漏洞。远程攻击者通过CNAME响应处理相关的构造的DNS响应,可造成worker进程崩溃,拒绝服务等异常

解决方法:其实解决办法很简单,就是本人之前搭建版本为nginx1.8.1,那么把nginx版本升级一下即可以避免。本文主要讲解怎么样进行nginx在线升级。

 

下载最新安装包

#首先下载nginx最新软件包,这里我下载了nginx1.12.2版本

  • wget http://nginx.org/en/download.html/nginx-1.12.2

 

查看当前版本号

#查看当前nginx版本号

1 cd /usr/local/nginx/ (进入自己nginx的安装目录) 
2 sbin/nginx -V           (查看版本号)

nginx version: nginx/1.9.4
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

 

解压安装包

#解压新下载的软件包,并且进入到解压目录下

1 tar xf nginx-1.12.2.tar.gz
2 cd nginx-1.12.2

 

执行编译

#接下来编译

1 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module(以上面显示参数为准)

#make

1 make   (注意,不需要make install,不然一些配置文件都会更新)

 

替换nginx可执行文件

#更改老版本的nginx可执行文件

1 mv /usr/local/nginx/sbin/nginx     /usr/local/nginx/sbin/nginx.old   ###把老版本的nginx更名
2 cp  nginx   /usr/local/nginx/sbin/nginx   ###拷贝新的nginx文件过去

#进入nginx安装目录,测试查看nginx版本号

cd /usr/local/nginx
sbin/nginx -t
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

 

方法一 平滑重启:

#让nginx把nginx.pid改成nginx.pid.oldbin 跟着启动新的nginx

1 kill -USR2 `cat /usr/local/nginx/nginx.pid`
2 kill -QUIT `cat /usr/local/nginx/nginx.pid.oldbin`
3 (/usr/local/nginx/sbin/nginx -s reload 就可以)

 

方法二 直接重启:

1 /usr/local/nginx/sbin/nginx -s stop
2 /usr/local/nginx/sbin/nginx

 

注意:nginx重启分两种,一种平滑重启,一种直接重启

 

查看Nginx版本

#重启过后查看最新版本

1 sbin/nginx -V

至此,nginx升级完成。

 


 

不平凡的生活才叫人生,永远相信1+1>1 的定律! !!! ---maxt

 

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /usr/local/nginx/logs/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;
    client_max_body_size 20m;

    sendfile       on;
    tcp_nopush     on;
    keepalive_timeout  65;

    gzip  on;

    proxy_cache_path ./web_cache levels=1:2 keys_zone=web_cache:1024m inactive=1000m max_size=1g;
   
    upstream cwbase {
        server 127.0.0.1:32787 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32788 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32789 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32790 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32791 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32792 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32793 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32794 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32795 weight=10 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:32796 weight=10 max_fails=3 fail_timeout=30s;
    }

    server {
        listen       443 ssl;
        server_name  www.shengtai.club;

	    ssl_certificate /root/.caddy/acme/acme-v02.api.letsencrypt.org/sites/www.shengtai.club/www.shengtai.club.crt;
        ssl_certificate_key /root/.caddy/acme/acme-v02.api.letsencrypt.org/sites/www.shengtai.club/www.shengtai.club.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        root /usr/share/nginx/html;

        gzip on;
        gzip_min_length 1k;
        gzip_comp_level 3;
        gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;

        gzip_vary on;
        gzip_disable "MSIE [1-6]\.";
        gzip_buffers 32 4k;
        gzip_http_version 1.0;

        location ^~ /api {

            rewrite ^/(.*) /$1 break;

            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'OPTION, POST, GET, DELETE, PUT';
            add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';

            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://cwbase/;

        }

        location ^~ /apis/ {

            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'OPTION, POST, GET, DELETE, PUT';
            add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';

            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://cwbase/api/;

        }

        location ^~ /jeecg-boot {
            proxy_pass              http://172.18.231.224:8080/jeecg-boot/;
            proxy_set_header        Host 172.18.231.224;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
     
        location ^~ /jeecg-boot/sys/common/view {
            alias   /root/jeecg/upFiles/;
            index  index.html index.htm;
        }

        location ^~ /jenkins {
            proxy_pass              http://172.18.231.224:8080/jenkins/;
            proxy_set_header        Host 172.18.231.224;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location ^~ /files {
            root   /root/jeecg/upFiles/;
            index  index.html index.htm;
        }

        location / {

            root   /usr/share/nginx/html;
            index  index.html index.htm;
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.html?s=$1 last;
                break;
            }

            proxy_cache web_cache;
            proxy_cache_valid 200 206 304 301 302 10d;
            proxy_cache_key  $scheme$host$request_uri;

            expires 30d;
        }

    }
}

 

你可能感兴趣的:(Nginx,nginx)