nihaogirl 发表于 2018-11-15 13:38:21

nginx 整理二

  Nginx 监控
首先我们定义了一个 location ~^/NginxStatus/,这样通过 http://localhost/NginxStatus/ 就可以监控到 Nginx的运行信息,显示的内容如下:Active connections: 70  server accepts handled requests
  14553819 14553819 19239266
  Reading: 0 Writing: 3 Waiting: 67
  NginxStatus 显示的内容意思如下: active connections – 当前 Nginx 正处理的活动连接数。
  server acceptshandled requests -- 总共处理了 14553819 个连接 , 成功创建 14553819 次握手 ( 证明中间没有失败的), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )。
  reading -- nginx 读取到客户端的 Header 信息数。
  writing -- nginx 返回给客户端的 Header 信息数。
  waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。
通过命令查看#netstat -n | awk "/^tcp/ {++S[$NF]} END {for(a in S) print a, S}"  TIME_WAIT 17
  ESTABLISHED 3254
  LAST_ACK 236
  FIN_WAIT_1 648
  FIN_WAIT_2 581
  CLOSING 7
  CLOSE_WAIT 4916
  解析:
  CLOSED//无连接是活动的或正在进行
  LISTEN//服务器在等待进入呼叫
  SYN_RECV//一个连接请求已经到达,等待确认
  SYN_SENT//应用已经开始,打开一个连接
  ESTABLISHED//正常数据传输状态/当前并发连接数
  FIN_WAIT1//应用说它已经完成
  FIN_WAIT2//另一边已同意释放
  ITMED_WAIT//等待所有分组死掉
  CLOSING//两边同时尝试关闭
  TIME_WAIT//另一边已初始化一个释放
  LAST_ACK//等待所有分组死掉
  、Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHP、CGI 等;
  3、Nginx 支持简单的负载均衡和容错;
  4、支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有。
  为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Compatible Regular Expressions)包
配置 Nginx先来看一个实际的配置文件: usernobody;# 工作进程的属主  worker_processes4;# 工作进程数,一般与 CPU 核数等同
#error_loglogs/error.log;  #error_loglogs/error.lognotice;
  #error_loglogs/error.loginfo;
#pid      logs/nginx.pid; events {  use epoll;#Linux 下性能最好的 event 模式
  worker_connections2048;# 每个工作进程允许最大的同时连接数
  }
http {  include       mime.types;
  default_typeapplication/octet-stream;
#log_formatmain"$remote_addr - $remote_user [$time_local] $request "  #                  ""$status" $body_bytes_sent "$http_referer" "
  #                  ""$http_user_agent" "$http_x_forwarded_for"";
#access_logoff;  access_loglogs/access.log;# 日志文件名
sendfile      on;  #tcp_nopush   on;
  tcp_nodelay   on;
keepalive_timeout65;    include   gzip.conf;  # 集群中的所有后台服务器的配置信息
  upstream tomcats {
  server 192.168.0.11:8080 weight=10;
  server 192.168.0.11:8081 weight=10;
  server 192.168.0.12:8080 weight=10;
  server 192.168.0.12:8081 weight=10;
  server 192.168.0.13:8080 weight=10;
  server 192.168.0.13:8081 weight=10;
  }
server {  listen       80;#HTTP 的端口
  server_namelocalhost;
charset utf-8;      #access_loglogs/host.access.logmain;location ~ ^/NginxStatus/ {  stub_status on; #Nginx 状态监控配置
  access_log off;
  }
location ~ ^/(WEB-INF)/ {  deny all;
  }
location ~ \.(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|  zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {
  root /opt/webapp;
  expires 24h;
  }
location / {  proxy_pass http://tomcats;# 反向代理
  include proxy.conf;
  }
error_page 404 /html/404.html;      # redirect server error pages to the static page /50x.html  #
  error_page 502 503 /html/502.html;
  error_page 500 504 /50x.html;
  location = /50x.html {
  root   html;
  }
  }
  }
静态文件处理通过正则表达式,我们可让 Nginx 识别出各种静态文件,例如 images 路径下的所有请求可以写为:location ~ ^/images/ {  root /opt/webapp/images;
  }
  而下面的配置则定义了几种文件类型的请求处理方式。
location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ {  root /opt/webapp;
  expires 24h;
  }
对于例如图片、静态 HTML 文件、js 脚本文件和 css 样式文件等,我们希望 Nginx直接处理并返回给浏览器,这样可以大大的加快网页浏览时的速度。因此对于这类文件我们需要通过 root指令来指定文件的存放路径,同时因为这类文件并不常修改,通过 expires 指令来控制其在浏览器的缓存,以减少不必要的请求。 expires指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control”的头标(起到控制页面缓存的作用)。您可以使用例如以下的格式来书写 Expires:expires 1 January, 1970, 00:00:01 GMT;  expires 60s;
  expires 30m;
  expires 24h;
  expires 1d;
  expires max;
  expires off;
  动态页面请求处理
Nginx 本身并不支持现在流行的 JSP、ASP、PHP、PERL等动态页面,但是它可以通过反向代理将请求发送到后端的服务器,例如 Tomcat、Apache、IIS等来完成动态页面的请求处理。前面的配置示例中,我们首先定义了由 Nginx 直接处理的一些静态文件请求后,其他所有的请求通过proxy_pass 指令传送给后端的服务器(在上述例子中是 Tomcat)。最简单的 proxy_pass 用法如下:location / {  proxy_pass      http://localhost:8080;
  proxy_set_headerX-Real-IP$remote_addr;
  }
  这里我们没有使用到集群,而是将请求直接送到运行在 8080 端口的 Tomcat 服务上来完成类似 JSP 和 Servlet 的请求处理。
当页面的访问量非常大的时候,往往需要多个应用服务器来共同承担动态页面的执行操作,这时我们就需要使用集群的架构。 Nginx通过 upstream 指令来定义一个服务器的集群,最前面那个完整的例子中我们定义了一个名为 tomcats的集群,这个集群中包括了三台服务器共 6 个 Tomcat 服务。而 proxy_pass 指令的写法变成了:location / {  proxy_pass      http://tomcats;
  proxy_set_headerX-Real-IP$remote_addr;
  }
  在 Nginx 的集群配置中,Nginx 使用最简单的平均分配规则给集群中的每个节点分配请求。一旦某个节点失效时,或者重新起效时,Nginx 都会非常及时的处理状态的变化,以保证不会影响到用户的访问。
总结尽管整个程序包只有五百多 K,但麻雀虽小、五脏俱全。 Nginx官方提供的各种功能模块应有尽有,结合这些模块可以完整各种各样的配置要求,例如:压缩、防盗链、集群、FastCGI、流媒体服务器、 Memcached 支持、URL 重写等等,更关键的是 Nginx 拥有 Apache 和其他 HTTP服务器无法比拟的高性能。您甚至可以在不改变原有网站的架构上,通过在前端引入 Nginx 来提升网站的访问速度。引自:http://www.cosdiv.com/page/M0/S445/445285.html
页: [1]
查看完整版本: nginx 整理二