bei 发表于 2018-11-8 12:16:31

Nginx基础篇

  nginx基础篇
第1章 nginx介绍
1.1 what nginx
  Nginx(“engine x”) 是一个开源的、支持高性能、高并发的www服务和代理服务软件,是由俄罗斯人Igor Sysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上,后来作者将源代码以类BSD许可证的形式开源出来共全球使用。
  Nginx不但可以做web服务软件,还具有反向代理负载均衡功能和缓存服务功能,在反向代理负载均衡功能方面类似于LVS负载均衡以及Haproxy专业的代理软件,但nginx在部署起来更为简单。在缓存服务功能方面,又和squid等专业的缓存服务软件类似。
1.2 nginx的重要特性
  q可针对静态资源高速高并发访问及缓存
  q可使用反向代理加速,并且可以进行数据缓存
  q具有简单负载均衡、节点健康检查和容错功能
  q支持远程FastCGI服务的缓存加速
  q支持SSL、TLS、SNI
  q支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和缓存
  q具有模块化的结构:过滤器包括gzip压缩、ranges支持、图像缩放等功能
  q支持基于名字、端口及IP的虚拟主机站点
  q支持Keep-alive和pipelined连接
  q可进行简单、方便、灵活的配置和管理
  q支持修改nginx配置,并且在代码上线时,可平滑重启,不中断业务访问
  q可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志
  q可利用信号控制Nginx进程
  q支持3xx-5xx HTTP状态码重定向
  q支持rewrite模块,支持URI重写及正则表达式匹配
  q支持基于客户端IP地址和HTTP基本认证的访问控制
  q支持FLV流和MP4流技术产品应用
  q支持HTTP响应速率限制
  q支持邮件服务代理
  q支持同一IP地址的并发连接或请求数限制
  q支持PUT、DELETE、MKCOL、COPY、MOVE等较特殊的HTTP请求方法
1.3 面试可能被问到的问题
  q支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
  q资源消耗小:在3万并发连接下,开启10个nginx线程消耗的内存不到200MB
  q可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy或LVS的功能
  q具备Squid等专业缓存软件等的缓存功能
  q支持异步网络I/O事件模型epoll(linux2.6+)
1.4 nginx主要的企业应用功能
1.4.1 作为Web服务软件
  Nginx是一个支持高性能、高并发的Web服务软件,他具有很多优秀的特性,作为web服务器与Apache相比,nginx能够支持更多的并发连接访问,但占用的资源却更少,效率更高,在功能上也强大了很多
1.4.2 反向代理或负载均衡服务
  在反向代理或负载均衡服务方面,Nginx可以作为Web服务、PHP等动态服务及Memcached缓存的代理服务器,他具有类似专业反向代理软件的功能,同时也是一个优秀的邮件代理软件(最早开发这个产品的目的之一就是作为邮件代理服务),但是nginx的代理功能还是相对简单了些,特别是不支持TCP的代理(但是在1.9.0之后,开始支持TCP的代理)
1.4.3 前端业务数据缓存服务
  在web缓存服务方面,nginx可通过自身的proxy_cache模块实现类Squid等专业缓存软件的功能
  Nginx的这三大功能是国内使用nginx的主要场景,特别是前两个
1.5 Nginx作为web服务的主要应用场景
  q使用nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似Lighttpd软件)
  qnginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)
  qnginx结合Tomcat/Resin等支持Java动态程序(例如常用proxy_pass方式)
1.6 几款常用web软件产品的对比
1.6.1 Apache
  qApache2.4版本性能稳定强大
  qPrefork模式取消了进程创建开销,性能很高
  q处理动态业务数据时,因为关联到后端的引擎和数据库,瓶颈不在Apache上
  q高并发时消耗系统资源相对多一些
  q基于传统的select模型,高并发能力有限
  q支持扩展库,可通过DSO、apxs方法编译安装额外的插件功能,不需要重新编译Apache
  q功能多,更稳定,更安全,插件也多
  q市场份额逐年在递减
1.6.2 Nginx
  q基于异步网络I/O模型(epoll、kqueue)
  q具备支持高性能、高并发的特性,并发连接可达数万
  q对于小文件(小于1MB的静态文件)高并发支持很好,性能很高
  q不支持类似Apache的DSO模式,扩展库必须编译进主程序(缺点)
  q进程占用系统资源较低
  q支持web、反向proxy、cache三大重点功能,并且都很优秀
  q市场份额在逐年快速增加
1.6.3 Lighttpd
  q基于异步网络I/O模型,性能、并发都与nginx相似
  q扩展库是SO模式,比nginx灵活
  q目前国内的使用率比较低,安全性没有Apache和Nginx性能高
  q通过插件(mod_secdownload)可实现文件URL地址加密(优点)
  q社区不活跃,市场份额较低
1.7 Apache select和Nginx epoll的技术对比
  指标
  select
  epoll
  性能
  随着连接数的增,加性能急剧下降,处理成千上万并发连接时,性能很差
  随着连接数的增加,性能几乎没有下降,处理成千上午并发连接时,性能很好
  连接数
  连接数有限制,处理的最大连接数不超过1024,如果要处理的连接数超过1024,则需要修改FD_SETSIZE宏,并重新进行编译
  连接数无限制
  内在处理机制
  现行轮询
  回调callback
  开发复杂性
  低
  高
1.8在企业中如何正确的选择web服务器
1.8.1 静态业务
  q若是高并发场景,尽量选择nginx
1.8.2 动态业务
  q在理论上采用Apache和Nginx都可以,但是建议选择Nginx,为了避免相同业务的服务软件多样化,增加额外的维护成本,动态业务可以由Nginx兼做前端代理,在根据页面元素的类型或目录,转发到后端相应的服务器进行处理
1.8.3 既有静态业务又有动态业务
  q选择nginx,但是如果并发不是很大,对Apache又很熟悉,选择Apache也是可以的
第2章 nginx的安装
2.1 安装前的环境准备
2.1.1 linux的系统环境
  # cat /etc/redhat-release

  CentOS>  # uname -r
  2.6.32-696.el6.x86_64
  # uname -m
  x86_64
2.1.2 安装Nginx基础依赖包pcre、pcre-devel、openssl、openssl-devel
  # yum install -y openssl openssl-devel pcre pcre-devel ==>安装
  # rpm -qa pcre pcre-devel openssl openssl-devel==>检查
  openssl-devel-1.0.1e-57.el6.x86_64
  pcre-7.8-7.el6.x86_64
  openssl-1.0.1e-57.el6.x86_64
  pcre-devel-7.8-7.el6.x86_64
2.1.3 安装nginx
  ####建立固定的目录来存放安装的软件
  # mkdir /home/oldboy/tools==>建立
  # ll /home/oldboy/tools/ -d==>查看
  drwxr-xr-x. 2 root root 4096 4月   6 00:28 /home/oldboy/tools/
  ####下载nginx安装包并检查
  # cd /home/oldboy/tools/   ==>进入存放软件的目录
  # wget -q http://nginx.org/download/nginx-1.6.3.tar.gz==>下载
  # ll -h nginx-1.6.3.tar.gz   ==>查看
  -rw-r--r--. 1 root root 787K 4月   7 2015 nginx-1.6.3.tar.gz
  ####创建用户
  # useradd www -s /sbin/nologin -M
  ####解压并进行编译安装
  # tar xf nginx-1.6.3.tar.gz==>解压
  # ll==> 查看
  总用量 792
  drwxr-xr-x. 8 1001 1001   4096 4月   7 2015 nginx-1.6.3
  -rw-r--r--. 1 root root 805253 4月   7 2015 nginx-1.6.3.tar.gz
  # cd nginx-1.6.3==>进入解压后的目录
  #./configure \==>配置
  --user=www \ ==>进程用户权限
  --group=www \ ==>进程用户组权限
  --prefix=/application/nginx-1.6.3 \==>设置安装路径
  --with-http_ssl_module \==>激活状态信息
  --with-http_stub_status_module \==>激活ssl功能
  #make==>编译
  #make install ==>安装
  # ln -s /application/nginx-1.6.3/ /application/nginx ==>创建软连接
  # ll /application/nginx==>检查
  # /application/nginx/sbin/nginx==>启动
  # lsof -i :80 ==>查看端口

  COMMAND   PID USER   FD   TYPE DEVICE>  nginx   19901 root    6uIPv493888      0t0TCP *:http (LISTEN)
  nginx   19902www    6uIPv493888      0t0TCP *:http (LISTEN)
  # ps -ef|grep nginx==>查看进程
  root      19901      10 02:25 ?      00:00:00 nginx: master process /application/nginx/sbin/nginx
  www       19902199010 02:25 ?      00:00:00 nginx: worker process
  root      19920   92310 02:26 pts/0    00:00:00 grep nginx
2.2 检测是否安装成功的方法
2.2.1 在windows浏览器中输入服务端ip进行测试

  出现上述内容nginx安装成功!!!
2.2.2 在linux客户端输入一下命令
  # wget 127.0.0.1
  --2018-04-06 02:31:22--http://127.0.0.1/
  正在连接 127.0.0.1:80... 已连接。
  已发出 HTTP 请求,正在等待回应... 200 OK
  长度:612
  正在保存至: “index.html”
  100%[===========================================================================================>] 612         --.-K/s   in 0s
  2018-04-06 02:31:22 (61.6 MB/s) - 已保存 “index.html” )
  或者使用curl命令
  # curl -I localhost
  HTTP/1.1 200 OK
  Server: nginx/1.6.3
  Date: Fri, 06 Apr 2018 06:32:17 GMT
  Content-Type: text/html
  Content-Length: 612
  Last-Modified: Fri, 06 Apr 2018 06:22:46 GMT
  Connection: keep-alive
  ETag: "5ac71236-264"
  Accept-Ranges: bytes
  出现上述内容说明nginx安装成功!!!
2.3 访问网站异常的排查三部曲
2.3.1 在客户端上ping服务端的ip
  # ping 10.0.0.61
2.3.2 在客户端上telnet服务端的ip、端口
  # telnet 10.0.0.61 80
2.3.3 在客户端使用wget或curl命令检测
  # wget 10.0.0.61
  # curl -I 10.0.0.61
第3章 nginx的配置
3.1 nginx目录的简单总结
  # tree /application/nginx
  /application/nginx
  ├── client_body_temp
  ├── conf   ==> nginx所有配置文件的目录 非常重要
  │   ├── fastcgi.conf   ==> fastcgi相关参数的配置文件
  │   ├── fastcgi.conf.default   ==> fastcgi.conf的原始备份
  │   ├── fastcgi_params    ==>fastcgi的参数文件
  │   ├── fastcgi_params.default
  │   ├── koi-utf
  │   ├── koi-win
  │   ├── mime.types    ==>媒体类型
  │   ├── mime.types.default
  │   ├── nginx.conf    ==>nginx的主配置文件
  │   ├── nginx.conf.default    ==>nginx主配置文件的原始备份
  │   ├── scgi_params    ==>scgi的相关参数文件 一般用不到
  │   ├── scgi_params.default
  │   ├── uwsgi_params    ==>uwsgi的相关参数文件 一般用不到
  │   ├── uwsgi_params.default
  │   └── win-utf
  ├── fastcgi_temp   ==>fastcgi临时数据目录
  ├── html==>编译安装时nginx的默认站点目录 Apache的默认站点目录是htdocs
  │   ├── 50x.html==>错误页面优雅的显示文件 502会调用此页面
  │   └── index.html==>默认的首页文件 在nginx.conf事先定义好的
  ├── logs==>nginx的默认日志路径
  │   ├── access.log==> nginx默认访问日志文件
  │   ├── error.log   ==>nginx的错误日志文件
  │   └── nginx.pid==>nginx的pid文件,nginx启动后会把所有的进程id写到该文件中
  ├── proxy_temp   ==>临时目录
  ├── sbin   ==>nginx的命令目录
  │   └── nginx==>nginx的启动命令
  ├── scgi_temp==>临时目录
  └── uwsgi_temp==>临时目录
3.2 nginx http常用功能模块的总结
  nginx   http功能模块
  模块说明
  ngx_http_core_module
  包括一些核心的http参数配置,对应nginx的配置为HTTP区块部分
  ngx_http_access_module
  访问控制模块,用来控制网站用户对nginx的访问
  ngx_http_gzip_module
  压缩模块,对nginx返回的数据压缩,属于性能优化模块
  ngx_http_fastcgi_module
  FastCGI模块和动态应用相关的模块 例如PHP
  ngx_http_proxy_module
  proxy代理模块
  ngx_http_upstream_module
  负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查
  ngx_http_rewrite_module
  URL地址重写模块
  ngx_http_limit_conn_module
  限制用户并发连接数及请求连接数模块
  ngx_http_limit_req_module
  根据定义的key限制nginx请求过程的速率
  ngx_http_log_module
  访问日志模块,以指定格式记录nginx客户访问日志等信息
  ngx_http_auth_basic_module
  web认证模块,设置web用户通过账号、密码访问nginx
  ngx_http_ssl_module
  ssl模块,用户加密的http连接 如https
  ngx_http_stub_status_module
  记录nginx基本访问状态信息等的模块
3.3 nginx核心配置文件区块总结
  # vim nginx.conf
  1worker_processes1;==>Main区,Nginx核心功能模块
  2events {
  3   worker_connections1024;         2到4行events区,Nginx核心功能模块
  4}
  5http {   ==> http区开始 Nginx核心功能模块
  6   include       mime.types;
  7   default_typeapplication/octet-stream;
  8   sendfile      on;
  9   keepalive_timeout65;
  10   server {    ==>server区块开始
  11         listen       80;
  12         server_namelocalhost;
  13         location / {
  14             root   html;                     13到16行location区块
  15             indexindex.html index.htm;
  16         }
  17         error_page   500 502 503 504/50x.html;
  18         location = /50x.html {
  19             root   html;
  20         }
  21   }==>server区块结束
  22} ==>http区块结束
3.4 nginx核心配置文件总结
  # vim nginx.conf
  1 worker_processes1;==> worker进程的数量
  2 events {==>事件区块结束
  3   worker_connections1024;==>每个worker支持的最大连接数
  4 }==>事件区块结束
  5 http {==>http区块开始
  6   include       mime.types;==>nginx支持的媒体类型库文件
  7   default_typeapplication/octet-stream;==>默认的媒体类型
  8   sendfile      on;==>开启高效的传输方式
  9   keepalive_timeout65;==> 连接超时时间
  10   server {   ==>server区块开始
  11         listen       80;==>提供服务的端口,默认是80
  12         server_namelocalhost;==>提供服务的域名,主机名
  13         location / {==>location区块开始
  14             root   html;   ==>站点的根目录,相对于nginx的安装目录
  15             indexindex.html index.htm;==>默认的首页文件 多个用空格隔开
  16         }==>location区块结束
  17         error_page   500 502 503 504/50x.html;==>出现对应的状态码时,使用50x.html回应客户
  18         location = /50x.html {
  19             root   html;
  20         }
  21   }==>server区块结束
  22 }==>http区块结束
第4章 虚拟主机的配置实战
4.1 基于域名的虚拟主机配置
  ####将配置文件中的空行和带#号的行(注释行)去掉
  # egrep -v '^$|#' nginx.conf.default >nginx.conf
  ##配置文件如下
  # vim ../conf/nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  server {
  listen       80;
  server_namewww.lzh.com;
  location / {
  root   html/www;
  indexindex.html index.htm;
  }
  }
  server {
  listen       80;
  server_nameblog.lzh.com;
  location / {
  root   html/blog;
  indexindex.html index.htm;
  }
  }
  } ###建立站点目录
  # mkdir /application/nginx/html/{www,blog}
  ####编辑测试首页文件
  # echo www >/application/nginx/html/www/index.html
  # echo blog >/application/nginx/html/blog/index.html
  ####检测nginx配置文件是否有语法错误
  # /application/nginx/sbin/nginx -t
  ####重启nginx服务

  # /application/nginx/sbin/nginx -s>  q测试
  ##编辑客户端编辑域名解析文件
  # vim /etc/hosts
  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  172.16.1.5    lb01
  172.16.1.6    lb02
  172.16.1.7    web02
  172.16.1.8    web01 www.etiantian.org bbs.etiantian.org blog.etiantian.org
  172.16.1.31   nfs01
  172.16.1.41   backup
  172.16.1.61   m01www.lzh.com blog.lzh.com
  # curlwww.lzh.com
  www
  # curl blog.lzh.com
  blog
  出现上面的www说明配置成功!!!
4.2 基于端口的虚拟主机配置
  ###配置文件
  # vim ../conf/nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  server {
  listen       80;
  server_namewww.lzh.com;
  location / {
  root   html/www;
  indexindex.html index.htm;
  }
  }
  server {
  listen       81;
  server_nameblog.lzh.com;
  location / {
  root   html/blog;
  indexindex.html index.htm;
  }
  }
  }
  ####检测nginx配置文件是否有语法错误
  # /application/nginx/sbin/nginx -t
  ####重启nginx服务

  # /application/nginx/sbin/nginx -s>  q测试
  # curl blog.lzh.com:81
  blog
  # curl www.lzh.com
  www
  出现上述结果说明配置成功!!!
4.3 基于ip的虚拟主机配置
  ####增加两个ip
  # ip addr add 10.0.0.101/24 dev eth0 label eth0:0
  ifconfig eth0:1 10.0.0.102/24 up
  ####配置文件
  # vim ../conf/nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  server {
  listen       10.0.0.101:80;
  server_namewww.lzh.com;
  location / {
  root   html/www;
  indexindex.html index.htm;
  }
  }
  server {
  listen       10.0.0.102:80;
  server_nameblog.lzh.com;
  location / {
  root   html/blog;
  indexindex.html index.htm;
  }
  }
  }
  q测试
  # curl 10.0.0.101
  www
  # curl 10.0.0.102
  blog
  出现上述内容说明配置成功!!!
第5章nginx的深入配置
5.1 将配置文件中的server区块分离出来
  ####编辑配置文件
  root@oldboy extra]# vim ../nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  include extra/www.conf;
  include extra/blog.conf;
  注意:上面的两行内容也可以用extra/*.conf;代替
  }
  ###创建extra目录
  #mkdir extra
  # cd extra/
  ####编辑www.conf配置文件
  # vim www.conf
  server {
  listen       80;
  server_namewww.lzh.com;
  location / {
  root   html/www;
  indexindex.html index.htm;
  }
  }
  ####编辑blog.conf配置文件
  # vim blog.conf
  server {
  listen       80;
  server_nameblog.lzh.com;
  location / {
  root   html/blog;
  indexindex.html index.htm;
  }
  }
  ####检查配置文件是否有语法错误并重新启动
  # /application/nginx/sbin/nginx -t

  # /application/nginx/sbin/nginx -s>  q测试
  # curl blog.lzh.com
  blog
  # curl www.lzh.com
  www
  出现上述内容说明配置成功!!!
5.2 nginx虚拟主机的别名配置
  ####编辑配置文件
  # vim www.conf
  server {
  listen       80;
  server_namewww.lzh.com lzh.com;   别名与主机名之间用空格隔开
  location / {
  root   html/www;
  indexindex.html index.htm;
  }
  }
  ####检查nginx的语法是否正确并重新启动
  # /application/nginx/sbin/nginx -t

  # /application/nginx/sbin/nginx -s>  q测试
  ####编辑/etc/hosts文件
  # vim /etc/hosts
  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  172.16.1.5    lb01
  172.16.1.6    lb02
  172.16.1.7    web02
  172.16.1.8    web01 www.etiantian.org bbs.etiantian.org blog.etiantian.org
  172.16.1.31   nfs01
  172.16.1.41   backup
  172.16.1.61   m01www.lzh.com blog.lzh.com lzh.com
  # curl lzh.com
  www
  出现上述内容说明配制成功!!!
5.3 显示文件的列表
  q只需在http, server, location区域块中加入autoindex on; 即可
  q其中autoindex_exact_size on | off 开启显示文件的大小为MB、GB默认是b,该项默认是开启的
  其余的详细配置请参考http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
5.4 开启显示nginx状态信息功能
5.4.1 nginx status简介
  nginx软件功能模块中有一个ngx_http_stub_status_module模块,其主要功能是记录nginx的基本访问状态信息,可以让使用者了解nginx的使用状态,例如连接数等,要想使用该模块需要在编译时增加--with-http_stub_status_module模块
  可以通过下面的命令查看编译时是否开启此模块
  # ../sbin/nginx -V
  nginx version: nginx/1.6.3
  built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
  TLS SNI support enabled
  configure arguments: --prefix=/application/nginx-1.6.3 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
5.4.2 配置nginx status
  ####编辑配置文件
  # vim status.conf
  server {
  listen       80;
  server_namestatus.lzh.com;
  location / {
  stub_status on;
  access_log off;
  }
  }
  编辑nginx.conf配置文件
  # vim ../nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  autoindex on;
  include extra/www.conf;
  include extra/blog.conf;
  include extra/status.conf;    ==> 增加这一行
  }
  q测试
  ####编辑/etc/hosts文件
  # vim /etc/hosts
  127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  172.16.1.5    lb01
  172.16.1.6    lb02
  172.16.1.7    web02
  172.16.1.8    web01 www.etiantian.org bbs.etiantian.org blog.etiantian.org
  172.16.1.31   nfs01
  172.16.1.41   backup
  172.16.1.61   m01www.lzh.com blog.lzh.com lzh.com status.lzh.com
  # curl status.lzh.com
  Active connections: 1
  server accepts handled requests
  6 6 3
  Reading: 0 Writing: 1 Waiting: 0
5.4.3 nginx status显示结果详解
  Active connections: 1
  serveraccepts handled requests
  6   6       3
  Reading: 0 Writing: 1 Waiting: 0
  qActive connections: 1 表示nginx正处理的活动连接数有1个
  q第一个server表示nginx启动到现在共处理了6个连接
  q第二个accepts表示nginx启动到现在共成功创建了6次握手
  q请求丢失数=(握手数-连接数),可以看出本次状态显示没有丢失请求
  q第3个handled requests表示总共处理了3次请求
  qReading为nginx读取到客户端的Header信息数
  qWriting为nginx返回客户端的Header信息数
  qWaiting为nginx已经处理完正在等候下一次请求指令的驻留连接数,在开启keep-alive的情况下,这个值等于active-(reading+writing)
  注意:为了安全起见,这个状态信息要防止外部用户查看
5.5 nginx的日志配置
5.5.1 nginx的错误日志配置
  配置错误日志是调试nginx服务的重要手段,他是属于nginx核心模块(ngx_core_module)的参数
  q【格式】
  error_log   file    level;
  关键字    日志文件错误日志级别
  其中关键字error_log不能改变,日志文件可以指定任意存放存放日志目录,错误日志级别常见的有【debug|info|notice|warn|error|crit|alert|emerg】,级别越高,记录的信息越少,生产场景一般是warn|error|crit这三个级别之一,注意不要配置info等较低级别,会带来巨大的磁盘I/O消耗
  error_log的默认值为:
  #error_loglogs/error.log;
  可以放置的标签区段为
  main、http、service、location
  q【配置】
  ####编辑nginx.conf配置文件
  # cat nginx.conf
  worker_processes1;
  error_log logs/error.log;   ==>只需增加这一行即可
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  autoindex on;
  include extra/www.conf;
  include extra/blog.conf;
  include extra/status.conf;
  }
5.5.2 nginx的访问日志
  qnginx软件会把用户访问网站的日志信息记录到指定的日志文件里,该功能由ngx_http_log_module模块负责
5.5.2.1 nginx访问日志的参数
  nginx的访问日志主要由两个参数控制
  qlog_format 用来定义记录日志的格式
  qaccess_log 用来指定日志文件的路径及使用何种日志格式记录日志
5.5.2.2 nginx访问日志的默认配置
  #log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
  #                  '$status $body_bytes_sent "$http_referer" '
  #                  '"$http_user_agent" "$http_x_forwarded_for"';
5.5.2.3 nginx记录日志默认参数的配置
  #access_loglogs/access.logmain;
5.5.2.4 nginx日志变量说明
  nginx日志变量
  说明
  $remote_addr
  记录访问网站的客户端地址
  $http_x_forwarded_for
  当前有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器上也进行了相关的x_forwarded_for设置
  $remote_user
  远程客户端的名称
  $time_local
  记录访问时间与时区
  $request
  用户的http请求起始行信息
  $status
  http状态码,记录请求返回的状态
  $body_bytes_sent
  服务器发送给客户端的响应body字节数
  $http_referer
  记录此次请求是从那个连接访问过来的,可以根据refer进行防盗链设置
  $http_user_agent
  记录客户端访问信息,例如浏览器、手机客户端等
  q注意:在没有特殊的要求下,采用默认的配置就好
5.5.2.5 nginx访问日志配置
  ####编辑nginx.conf配置文件
  # cat -n nginx.conf
  1    worker_processes1;
  2    error_log logs/error.log;
  3    events {
  4      worker_connections1024;
  5    }
  6    http {
  7      include       mime.types;
  8      default_typeapplication/octet-stream;
  9      sendfile      on;
  10      log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
  11                        '$status $body_bytes_sent "$http_referer" '
  12                        '"$http_user_agent" "$http_x_forwarded_for"';
  13
  14      keepalive_timeout65;
  15      autoindex on;
  16      include extra/www.conf;
  17      include extra/blog.conf;
  18      include extra/status.conf;
  19
  20   }
  ####编辑www.conf、blog.conf的配置文件
  # cat -n www.conf
  1      server {
  2            listen       80;
  3            server_namewww.lzh.com lzh.com;
  4            location / {
  5                root   html/www;
  6                indexindex.html index.htm;
  7               access_log logs/www_access.log main;
  8            }
  9      }
  10
  # cat -n blog.conf
  1       server {
  2         listen       80;
  3         server_nameblog.lzh.com;
  4         location / {
  5               root   html/blog;
  6               indexindex.html index.htm;
  7            access_log logs/blog_access.log main;
  8         }
  9       }
  10
  q【检测】
  ####在未重启nginx服务前
  # ll ../../logs/
  总用量 16
  -rw-r--r--. 1 root root 4894 4月   6 04:59 access.log
  -rw-r--r--. 1 root root 3934 4月   6 07:33 error.log
  -rw-r--r--. 1 root root    6 4月   6 04:59 nginx.pid
  # ll ../../logs/
  总用量 16
  -rw-r--r--. 1 root root 4894 4月   6 04:59 access.log
  -rw-r--r--. 1 root root    0 4月   6 08:04 blog_access.log
  -rw-r--r--. 1 root root 3995 4月   6 08:04 error.log
  -rw-r--r--. 1 root root    6 4月   6 04:59 nginx.pid
  -rw-r--r--. 1 root root    0 4月   6 08:04 www_access.log
5.5.2.6 nginx访问日志切割的配置
  q【切割的脚本】
  # cat cut_nginx_log.sh
  #!/bin/sh
  Dateformat=`date +%Y%m%d`
  Basedir="/application/nginx"
  Nginxlogdir="$Basedir/logs"
  Logname="www_access"
  [ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1
  [ -f ${Logname}.log ]||exit 1
  /bin/mv ${Logname}.log ${Dateformat}_${Logname}.log

  $Basedir/sbin/nginx -s>  q【配置定时任务】
  # crontab -l
  #cut nginx access log by lzh
  00 00 * * * /bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1
  注意:nginx常用的日志分析工具有rsyslog、awstats、flume、ELK、stom等
5.6 Nginx location
5.6.1 location的语法
  location [ = | ~ | ~* | ^~ ] uri {
  ……
  }
  q列表说明
  location
  [   = | ~ | ~* | ^~ ]
  uri
  {......}
  指令
  匹配标识符
  匹配的网站网址
  匹配URI后要执行的配置段
5.6.2 标识符的说明
  q~ 用于区分大小写的匹配
  q~* 用于不区分大小写的匹配
  q^~ 的作用是在进行常规的字符匹配检查之后,不做正则表达式的检查
5.6.3 不用URI及特殊字符组合匹配的顺序
  顺序
  不用URI及特殊字符组合匹配
  匹配说明
  1
  location   = / {
  精确匹配 /
  2
  location   ^~ /images/ {
  匹配常规字符串 不做正则匹配检查
  3
  location   ~* \.(gif|jpg|jpeg)$ {
  正则匹配
  4
  location   /documents/ {
  匹配常规字符串,如果有正则,则优先匹配正则
  5
  location   / {
  所有location都不匹配后的默认匹配
5.7 Nginx rewrite
  qNginx rewrite的主要功能就是实现URI地址重写
5.7.1 nginx rewrite 语法
  rewrite 正则
  应用位置;server、location、if
5.7.2 regex常用正则表达字符串
  字符
  描述
  \
  将后面接着的字符标记为一个特殊饿字符或一个原义字符或一个后向引用,例如 \n 匹配换行符 \$ 匹配$
  ^
  匹配输入字符串的起始位置,如果设置了RegExp对象的Multiline属性,^也匹配   \nr 之后的位置
  $
  匹配输入字符串的结束位置如果设置了RegExp对象的Multiline属性,^也匹配   \nr 之前的位置
  *
  匹配前面的字符0次或多次
  +
  匹配前面的字符1次或多次
  ?
  匹配前面的字符0次或1次
  .
  匹配 \n 之外的任何单个字符,要匹配包括\n在内的任何字符 可以使用[.\n]这样的模式
  (pattern)
  匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中匹配的内容
5.7.3 rewrite 指令flag的说明
  flag标记符号
  说明
  last
  本条规则匹配完成后,继续向下匹配新的locationURI规则
  break
  本条规则匹配完成后即终止,不在向下匹配
  redirect
  返回302临时重定向,浏览器中会显示跳转后的URL地址
  permanent
  返回301永久重定向,浏览器中会显示跳转后的URL地址
5.7.4 企业应用场景
  q可以调整用户浏览的URL,使其看起来更加规范,合乎开发及产品人员的需求
  q将动态URL伪装成静态地址提供服务,可以让搜索引擎收录网站内容
  q网站更换域名后,可以让旧域名的访问跳转到新域名上
  q根据特殊变量、目录、客户端的信息进行URL跳转

页: [1]
查看完整版本: Nginx基础篇