nginx及其他负载均衡配置要点总结

nginx.conf详解

user    nobody  #  运行子进程的用户
workprocess    auto;  #  根据CPU个数

error_log        /data/wwwlogs/nginx_error.log;
pid                  /data/wwwlogs/nginx.pid

events  {
workconntion      65535;  #  nginx  配置优化  单进程读取文件数量
use    epoll;    #io非堵塞
}

http  {
    tcp_nopush  on;
    tcp_nodelay  on;
    #  优化网络连接


    keepalive_timeout  120;
    #  检查超时时间    内核参数优化    timeout  <  120;
    server_tokens  off;
    

    charset  utf-8;
    #  设置字符集
    #Gzip  Compression
    gzip  on;
    #  文件压缩,节省流量,提升网站访问速度
##  logformat
log_format  access  '$http_host  $remote_addr  -  $remote_user  [$time_local]  "$request"  '
                  '$status  $body_bytes_sent  "$http_referer"  '
                  '"$http_user_agent"  '
                  '$request_time  $upstream_response_time  '
                  '"$http_x_forwarded_for"';
          include  vhost/django.conf;

    include        vhost/*.conf

  }

  server  {
        listen  80;
        server_name  blog.liuwenqi.com;
        access_log  /data/wwwlogs/access_nginx.log  access;
        root  /data/wwwroot/myblog;  #  资源目录
        index  index.html  index.htm  index.php;  #  首页
        #error_page  404  /404.html;
        #error_page  502  /502.html;
        location  /nginx_status  {
            stub_status  on;
            access_log  off;
            allow  127.0.0.1;
            deny  all;
        }
        location  /static/  {
                alias  /data/wwwroot/myblog/static/;
        }
        location  /  {
                include  uwsgi_params;
                uwsgi_pass  127.0.0.1:8997;    #端口要和uwsgi里配置的一样
                uwsgi_param  UWSGI_SCRIPT  mysite.wsgi;    #wsgi.py所在的目录名+.wsgi
                uwsgi_param  UWSGI_CHDIR  /data/wwwroot/myblog/;  #项目路径

        }
        #location  ^~  /static/  {
        #        alias  /data/wwwroot/myblog/static;
        #}
        location  ~  .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$  {
            expires  1m;
            access_log  off;
        }
        location  ~  .*\.(js|css)?$  {
            expires  7d;
            access_log  off;
        }    #  nginx是通过时间去判断缓存过期
        #  .git    .svn    LICENSE      为了网站安全性
        location  ~  ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md)  {
            deny  all;      #  禁止访问
        }

变量 说明 变量 说明
$args 这个变量等于请求行中的参数,同$query_string $remote_port 客户端的端口。
$content_length 请求头中的Content-length字段。 $remote_user 已经经过Auth Basic Module验证的用户名。
$content_type 请求头中的Content-Type字段。 $request_filename 当前请求的文件路径,由root或alias指令与URI请求生成。
$document_root 当前请求在root指令中指定的值。 $scheme HTTP方法(如http,https)。
$host 请求主机头字段,否则为服务器名称。 $server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$http_user_agent 客户端agent信息 $server_addr 服务器地址,在完成一次系统调用后可以确定这个值。
$http_cookie 客户端cookie信息 $server_name 服务器名称。
$limit_rate 这个变量可以限制连接速率。 $server_port 请求到达服务器的端口号。
$request_method 客户端请求的动作,通常为GET或POST。 $request_uri 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz。
$remote_addr 客户端的IP地址。 $uri 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html。
$document_uri 与$uri相同。

例如请求:http://localhost:3000/test1/test2/test.php

$host:localhost
$server_port:3000
$request_uri:/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:/var/www/html
$request_filename:/var/www/html/test1/test2/test.php

1)在浏览器中输入 "域名/nginx_status" 就会显示nginx上次启动以来工作状态的统计的结果。
如 下图:


image.png

2)返回各数据项说明:
Active connections: 当前nginx正在处理的活动连接数.
Server accepts handled requests request_time: nginx总共处理了13057 个连接,成功创建13057 握手(证明中间没有失败的),总共处理了11634 个请求,总共请求时间2230854。
Reading: nginx读取到客户端的Header信息数.
Writing: nginx返回给客户端的Header信息数.
Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接。

所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.
如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中

logstash常用的nginx全局变量

nginx全局变量

$http_host始终等于HTTP_HOST请求标题。
$host等于$http_host,小写并且没有端口号(如果存在),除非HTTP_HOST不存在或是空值。
在这种情况下,$host等于server_name处理请求的服务器的指令值。
HTTP_HOST:从客户端请求获得的HTTP请求标头中获取
server_addr: request请求到达的server的ip
server_port: request到达的服务器的端口
server_name: 请求到达server的名
content_type: 等同于请求头部的"Content_Type"的值
remote_addr: 客户端ip
remote_port:客户端端口
remote_user:客户端user
args 此变量与请求行中的参数相等  等于query_string
request_filename: 当前请求的文件的路径
request_url: 含有参数的完整初始URL
url: 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html。
request_method: request的请求方法,通常为GET,POST

timestamp

input {
  generator {
    count => 1
    message => "05:08:33.351UTC DEBUG c.emnify.esc.cmaprouter.MapSsnActor MapSsnActor(akka://esc) - create dialog request id=2767649"
  }
}
filter {
  grok {
    match => ["message", "%{DATA:timestamp} .*"]
  }
  date {
    match => ["timestamp", "HH:MM:ss.SSSZZZ"]
  }
}
output {
  stdout { codec => rubydebug }
}

输出为:

{
      "@version" => "1",
          "host" => "Joaos-MBP-5.lan",
      "sequence" => 0,
    "@timestamp" => 2017-08-01T05:00:33.351Z,
       "message" => "05:08:33.351UTC DEBUG c.emnify.esc.cmaprouter.MapSsnActor MapSsnActor(akka://esc) - create dialog request id=2767649",
     "timestamp" => "05:08:33.351UTC"
} 

OpenResty

OpenResty是和Lua结合的,适应nginx的版本
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Tengine

官方文档
下载地址

你可能感兴趣的:(nginx及其他负载均衡配置要点总结)