最近在维护的一个项目,路由转发规则都统一通过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. 嵌入式Linux的一点学习心得

    Linux本身是一个发展中的操作系统.它有很多前期不完善的机制,被后代用新的机制代替.但是老的机制不可能一下子就消亡,因此由于“历史原因”,会产生很多新旧机制共存的情况.而且Linux的教科书数不胜数 ...

  2. Android系统中设置TextView的行间距(非行高)

    Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacin ...

  3. QueryPerformanceFrequency使用方法--Windows高精度定时计数

    在多核心或多处理器的计算机上.特别是在支持CPU频率动态调整的计算机上,windows系统下的QueryPerformanceFrequency()获取HPET(假设存在)的频率,而QueryPerf ...

  4. Java Applet读写client串口——终极篇

    測试环境: SDK:Oracle JRockit for Java version 6, Java Communication for Windows 2.0 OS:WINDOWS7 外设:串口条形码 ...

  5. MYSQL 体系结构图-LRU

  6. rsyslog 报 WARNING: rsyslogd is running in compatibility mode.

      [root@localhost log]# uname -a Linux localhost.localdomain 2.6.32 #1 SMP Sun Sep 20 18:58:21 PDT 2 ...

  7. spring mvc DispatcherServlet详解前传---HttpServletBean类

    从上章里我们已经看到: DispatcherServlet extends FrameworkServlet FrameworkServlet extends HttpServletBean impl ...

  8. JDK5-静态导入

    import static 1. 导入一个类内所有静态成员 import static java.lang.Math.*; public class StaticImport { public sta ...

  9. Command 命令模式

    简介 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于[行为请求者]与[行为实现者]解耦,可实现二者之间的松耦合,以便适应变化. 将一个请求封装为一个对象,从而使你可用不同 ...

  10. codevs 1725 探险 (二分)

    /* 二分答案 这个题目要求“体力和最小的那个小组的所有人的体力和尽量大” 很明显我们二分最小体力 如果合法 逐渐放大 但是这里我们二分的是最小而不是最大 所以累加的体力>=ans时 跳过当前体 ...