最近在维护的一个项目,路由转发规则都统一通过Nginx转发,所以再次参考部分博文和书本,熟悉Nginx的基本配置,还有一个重点也是日志的分析

  Nginx 常用模块是server块,location块。

  常用的location块配置:

  语法规则: location [=|~|~*|^~] /uri/ { … }
  = 表示精确匹配,这个优先级也是最高的
  ^~ 表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
  ~  表示区分大小写的正则匹配
  ~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)
  !~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则
  / 通用匹配,任何请求都会匹配到,默认匹配.

  例子:静态文件的匹配规则

  location ~* .*\.(js|css)?$

  {

  }

  location ~* .*\.(png|jpg|gif|jpeg|bmp|ico)?$
  {
  }

  location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?$
  {
  deny all; //禁止这些文件下载,大家可以根据自己的环境来配置
  }

  与php作为apache的一个模块运行不同,nginx完全是一个代理很强的服务器,相当于接到请求php文件然后交给php-fpm来处理,php的几种运行模式这里不详说

  location ~ \.php$ {

root   /httpd;

fastcgi_pass   127.0.0.1:8080;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

include        fastcgi_params;

}

  server块主要是虚拟主机的配置:

  server{
    server_name  test;
    listen 80;
    root /opt/www/test;

    location /
    {

    }
  }

  Nginx 主要模块还有Rewrite模块,可以使url更加友好等。书写的重点是正则表达式,匹配url来做一些事情,所以正则表达式是我们做什么开发都必须掌握的东西,与大家共勉,本人的正则写的很烂。。

  语法规则:

  break
  语法:break
  默认值:none
  使用字段:server, location, if
  完成当前设置的重写规则,停止执行其他的重写规则。

  if
  语法:if (condition) { … }
  默认值:none
  使用字段:server, location
  注意:尽量考虑使用trp_files代替。
  判断的条件可以有以下值:
  1. 一个变量的名称:空字符传”“或者一些“0”开始的字符串为false。
  2. 字符串比较:使用=或!=运算符
  3. 正则表达式匹配:使用~(区分大小写)和~*(不区分大小写),取反运算!~和!~*。
  4. 文件是否存在:使用-f和!-f操作符
  5. 目录是否存在:使用-d和!-d操作符
  6. 文件、目录、符号链接是否存在:使用-e和!-e操作符
  7. 文件是否可执行:使用-x和!-x操作符

  return
  语法:return code
  默认值:none
  使用字段:server, location, if
  停止处理并为客户端返回状态码。非标准的444状态码将关闭连接,不发送任何响应头。可以使用的状态码有:204,400,402-406,408,410, 411, 413, 416与500-504。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个URL,该URL将成为location头补值。没有状态码的URL将被视为一个302状态码。

  rewrite
  语法:rewrite regex replacement flag
  默认值:none
  使用字段:server, location, if
  按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。
  注意:如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。
  **尾部的标记(flag)可以是以下的值:
  last – 停止处理重写模块指令,之后搜索location与更改后的URI匹配。
  break – 完成重写指令。
  redirect – 返回302临时重定向,如果替换字段用http://开头则被使用。
  permanent – 返回301永久重定向。

  rewrite_log
  语法:rewrite_log on | off
  默认值:rewrite_log off
  使用字段:server, location, if
  变量:无
  启用时将在error log中记录notice级别的重写日志。

  set
  语法:set variable value
  默认值:none
  使用字段:server, location, if
  为给定的变量设置一个特定值。

  uninitialized_variable_warn
  语法:uninitialized_variable_warn on|off
  默认值:uninitialized_variable_warn on
  使用字段:http, server, location, if
  控制是否记录未初始化变量的警告信息。

重写规则组成部分

 任何重写规则的第一部分都是一个正则表达式

  可以使用括号来捕获,后续可以根据位置来将其引用,位置变量值取决于捕获正则表达式中的顺序,$1引用第一个括号中的值,$2引用第二个括号中的值,以此类推。如:

  ^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$

  $1是两个小写字母组成的字符串,$2是由小写字母和0到9的数字组成的5个字符的字符串,$3将是个文件名,$4是png、jpg、gif中的其中一个。

重写规则的第二部分是URI

请求被改写。该URI可能包含正则表达式中的捕获的位置参数或这个级别下的nginx任何配置变量。如:

    /data?file=$3.$4

如果这个URI不匹配nginx配置的任何location,那么将给客户端返回301(永久重定向)或302(临时重定向)的状态码来表示重定向类型。该状态码可以通过第三个参数来明确指定。

重写规则的第三部分
   第三部分也就是尾部的标记(flag)。 last标记将导致重写后的URI搜索匹配nginx的其他location,最多可循环10次。如:

   rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 last;

break指令可以当做自身指令。如:

if ($bwhog) {
  limit_rate 300k;
  break;
   }

另一个停止重写模块处理指令是return, 来控制主HTTP模块处理请求。 这意味着,nginx直接返回信息给客户端,与error_page结合为客户端呈现格式化的HTML页面或激活不同的模块来完成请求。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个URL,该URL将成为location头补值。没有状态码的URL将被视为一个302状态码。如:

location = /image404.html {
  return 404 "image not found\n";
 }

日志分析包括了日志切割和常用的一些简单分析的bash脚本:

切割日志以nginx为例:

  #nginx日志切割脚本

#!/bin/bash

   #设置日志文件存放目录
   logs_path="/usr/local/nginx/logs/"
  #设置pid文件
  pid_path="/usr/local/nginx/nginx.pid"

#重命名日志文件
  mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log

#向nginx主进程发信号重新打开日志
  kill -USR1 `cat ${pid_path}`

至于日志分析根据具体需求来写shell,其实重点就是熟悉强大的bash脚本才能写

 参考:http://www.jb51.net/article/53954.htm

 全文参考的博客:http://linux.cn/article-4279-weixin.html

      书本:《Nginx高性能服务器详解》      

Nginx 基本配置和日志分析的更多相关文章

  1. Nginx 核心配置-自定义日志路径及清空日志注意事项

    Nginx 核心配置-自定义日志路径及清空日志注意事项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关于日志清空注意事项 1>.nginx服务写访问日志是基于acces ...

  2. Nginx日志配置及日志分析脚本案例

    https://blog.csdn.net/bbwangj/article/details/82186162 nginx的log日志分为access log 和 error log 其中access ...

  3. nginx常用运维日志分析命令

    nginx常用日志分析命令 运维人员必备 常用日志分析命令 1.总请求数 wc -l access.log |awk '{print $1}' 2.独立IP数 awk '{print $1}' acc ...

  4. awstats日志分析

    nginx日志格式设定,去掉如下行#号 #vim /usr/local/nginx/conf/nginx.conf log_format access '$remote_addr -$remote_u ...

  5. Nginx源码研究五:NGINX的配置信息管理

    配置信息是nginx系统重要的组成部分,配置信息的使用,实际上包含两层,一层是用户针对参数定义了值,例如下面nginx参数文件中的 keepalive_timeout 65,还有一部分是用户没有定义值 ...

  6. ELK安装配置及nginx日志分析

    一.ELK简介1.组成ELK是Elasticsearch.Logstash.Kibana三个开源软件的组合.在实时数据检索和分析场合,三者通常是配合使用,而且又都先后归于 Elastic.co 公司名 ...

  7. ELK+redis搭建nginx日志分析平台

    ELK+redis搭建nginx日志分析平台发表于 2015-08-19   |   分类于 Linux/Unix   |  ELK简介ELKStack即Elasticsearch + Logstas ...

  8. nginx日志分析利器GoAccess

    面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...

  9. 使用elk+redis搭建nginx日志分析平台

    elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...

随机推荐

  1. 【索引】Volume 0. Getting Started

    AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 0. Getting Started 10055 - Hashmat the Brav ...

  2. jMeter接口测试案例

  3. Delphi图像处理 -- RGB与HSL转换

    阅读提示:     <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM.     <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...

  4. spring mvc DispatcherServlet详解之一---处理请求深入解析

    要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...

  5. [转] java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...

  6. C++学习路线

    已经确定做C++后台的工作了,因此,要对C++要越来越熟悉才行,今天,在此列出学习和温习C++书籍的顺序,从而由浅入深地学习C++. 1. <C++ primer> 2. <Acce ...

  7. ButterKnife 注解

    简介 官网:http://jakewharton.github.io/butterknife/ github:https://github.com/JakeWharton/butterknife 依赖 ...

  8. C#解leetcode 53.Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. Asp.net Core 部署到Azure.cn的一个小问题

    前一段尝试在azure.cn上部署Aps.net Core未成功,报503错误!在网上查到是Azure.cn的问题,未能完美支持Asp.net Core! Asp.net Core发表正式版了,又尝试 ...

  10. My.Ioc 代码示例——使用条件绑定和元数据(可选)构建插件树

    本文旨在通过创建一棵插件树来演示条件绑定和元数据的用法. 说“插件树”也许不大妥当,因为在一般观念中,谈到插件树,我们很容易会想到 Winform/Wpf 中的菜单.举例来说,如果要在 Winform ...