xxl520 发表于 2018-11-8 08:13:47

Nginx服务其他管理配置

1.1 虚拟主机的概念和类型
1.1.1 概念
  进行搭建多个网站(搭建多个虚拟主机,一个网站就是一个虚拟主机)
1.1.2 通过域名访问网站的原理(如果访问时不加端口为什么会变成第一个虚拟主机?)
  1)客户机通过域名访问bbs.georgekai.com,首先经过DNS解析为对应的IP地址
  2)客户端发送数据包到nginx服务器,数据包包括:请求的虚拟主机信息、源和目的端口,源和目的IP
  3)服务端接收到客户端的请求报文
  a 先根据IP地址找对的站点信息,如果没有对应IP直接丢弃报文
  b 如果匹配了IP,在找对应的端口号,没有对应端口也会丢弃报文
  c 如果IP和端口号都匹配的情况下,虚拟主机不匹配,默认会显示第一个虚拟主机
  
1.1.3 类型
  一、 基于域名的虚拟主机配置(最常用)
  网站目录和文件环境准备:
  1)基于域名的虚拟主机配置
  # cat nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  server {
  listen       80;
  server_namewww.etiantian.org;
  root   html/www;
  indexindex.html index.htm;
  }
  server {
  listen       80;
  server_namebbs.etiantian.org;
  root   html/bbs;
  indexindex.html index.htm;
  }
  server {
  listen       80;
  server_nameblog.etiantian.org;
  root   html/blog;
  indexindex.html index.htm;
  }
  }
  网站目录和文件环境准备:
  1.   mkdir /application/nginx/html/{www,bbs,blog} -p
  2.   for name in www bbs blog;do echo "10.0.0.7 web01 $name" >/application/nginx/html/$name/index.html;done
  3.   for name in www bbs blog;do cat /application/nginx/html/$name/index.html;done
  10.0.0.7 web01 www
  10.0.0.7 web01 bbs
  10.0.0.7 web01 blog
  检查配置文件语法,进行服务重启或者启动:
  # /application/nginx/sbin/nginx -t
  nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok
  nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful
  # /application/nginx/sbin/nginx
  利用curl或者浏览器进行访问测试:
  需要对虚拟主机域名进行解析(编写hosts文件-linux里面hosts文件 windows里面hosts)
  # for name in www bbs blog;do curl $name.etiantian.org;sleep 1;done
  10.0.0.7 web01 www
  10.0.0.7 web01 bbs
  10.0.0.7 web01 blog
  通过windows抓包分析: windows配置hosts(10.0.0.7 www.georgekai.com   bbs.georgekai.com         blog.georgekai.com)
  PS:当客户端访问nginx服务端,返回的状态码为304:表示读取缓存处理
  利用抓包软件分析http访问过程:
  1).强化记忆http请求报文和响应报文结构信息
  2).利用抓包信息分析访问异常问题
  二、 基于端口的虚拟主机配置
  # cat nginx.conf
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  server {
  listen       80;
  server_namewww.etiantian.org;
  root   html/www;
  indexindex.html index.htm;
  }
  server {
  listen       81;
  server_namebbs.etiantian.org;
  root   html/bbs;
  indexindex.html index.htm;
  }
  server {
  listen       80;
  server_nameblog.etiantian.org;
  root   html/blog;
  indexindex.html index.htm;
  }
  }
  优化nginx操作:
  vim /etc/profile                     ——在最下面添加一条默认搜索路径
  export PATH=$PATH:/application/nginx/sbin/
  source /etc/profile                   ——使其生效
  PS:将临时变量写入profile,执行命令就不需要输出全路径了
  重启nginx服务:
  nginx -t
  测试访问:
  bbs.georgekai.com:81
  三、 基于IP的虚拟主机配置
  worker_processes1;
  events {
  worker_connections1024;
  }
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  server {
  listen       10.0.0.7:80;
  server_namewww.etiantian.org;
  root   html/www;
  indexindex.html index.htm;
  }
  #server {
  #      listen       81;
  #      server_namebbs.etiantian.org;
  #      root   html/bbs;
  #      indexindex.html index.htm;
  #}
  #server {
  #      listen       80;
  #      server_nameblog.etiantian.org;
  #      root   html/blog;
  #      indexindex.html index.htm;
  #}
  }
  重启nginx服务:(不能平滑重启)
  nginx -s stop
  nginx
  强调说明:当nginx配置文件中,涉及到IP地址信息改动,都需要重启nginx服务,不能采用平滑重启,否则配置不生效

1.1.4 企业规范优化Nginx配置文件
  将每个虚拟主机的配置文件分开存放
  好处:虚拟机主机分开配置,不会使一个配置文件中内容过多,导致排除问题时过乱
  1. 创建扩展目录,生成虚拟主机配置文件
  mkdir /application/nginx/conf/extra
  sed -n '10,15p' nginx.conf >extra/www.conf
  sed -n '16,21p' nginx.conf >extra/bbs.conf
  sed -n '22,27p' nginx.conf >extra/blog.conf
  2. 修改nginx主配置文件,加载相应虚拟主机配置文件
  # cat 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/bbs.conf;
  include       extra/blog.conf;
  }
  3. 重启服务,进行检验测试
  nginx- t

  nginx -s>1.1.5 Nginx虚拟主机的别名配置
  1. 在域名后面添加别名信息
  cat extra/bbs.conf
  server {
  listen       80;
  server_namebbs.etiantian.org bbs.org;    ---在域名后面添加别名信息
  root   html/bbs;
  indexindex.html index.htm;
  }
  2. 添加别名信息需要在/etc/hosts文件中添加解析
1.1.6 Nginx状态信息功能实战
  为什么在编译安装时,需要配置状态模块?( --with-http_stub_status_module)
  因为可以查看nginx运行状态信息。
  配置state虚拟机主机配置文件:
  vim extra/state.conf
  server{
  listen80;
  server_namestate.george.com;
  location / {
  stub_status on;
  access_log   off;
  }
  }
  nginx主配置文件中加载状态配置文件:
  vim nginx.conf
  include       extra/state.conf;
  将状态模块域名配置到windows系统的hosts文件中:
  10.0.0.7 state.george.com
  
  状态模块说明:
  Active connections: 3                        ——当前客户端的连接数量(包含waiting连接数)
  server accepts handled requests                  ——accepts:接收客户端连接的总数(只接受http协议信息)
   25 25 37handled:处理连接的总数(处理的是accepts接收的数据)
  requests:客户端请求的总数(包括TCP建立接连)
  Reading: 0 Writing: 1 Waiting: 2—— Reading:监控请求头的连接数
  writing:监控回应客户端的连接数
  waiting:监控空闲客户端的连接请求等待数

1.2 Nginx服务日志信息
1.2.1 错误日志
  书写格式:
  Syntax:errpr_log file ;
  Default:error_log logs/error.log error;
  Context:main,http,mail,stream,server,location
  #error_loglogs/error.log;
  #error_loglogs/error.lognotice;
  #error_loglogs/error.loginfo;
  示例:
  worker_processes1;
  error_log logs/error.log error;
  events {
  worker_connections1024;
  }
  
  日志信息的级别:
  debug       –有调式信息的,日志信息最多
  info      –一般信息的日志,最常用
  notice      –最具有重要性的普通条件的信息
  warning   –警告级别
  err         –错误级别,阻止某个功能或者模块不能正常工作的信息
  crit      –严重级别,阻止整个系统或者整个软件不能正常工作的信息
  alert       –需要立刻修改的信息
  emerg       –内核崩溃等严重信息
  none      –什么都不记录
  从上到下,级别从低到高,记录的信息越来越少
  详细的可以查看手册: man 3 syslog
1.2.2 访问日志
  1)创建log_format语句
  vim nginx.conf
  http {
  include       mime.types;
  default_typeapplication/octet-stream;
  sendfile      on;
  keepalive_timeout65;
  log_formatmain'$remote_addr - $remote_user [$time_local] "$request"'
  '$status $body_bytes_sent "$http_referer"'
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log    logs/access_www.abc.com.log   main;
  2)虚拟主机配置文件插入access_log语句
  如果访问网站,没有日志记录,可查看虚拟主机的配置,是不是关了(access_log off;)
  vim conf/extra/bbs.conf
  server {
  listen       80;
  server_namebbs.george.com bbs.com;
  location / {
  access_log on;
  }
  3)测试并重新加载
  nginx -t

  nginx -s>  PS:可用kill -l查看所有信号(如:HUP对应的信号是1)
  Nginx日志格式中默认的参数配置:
  log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer"'
  '"$http_user_agent" "$http_x_forwarded_for"';
  日志格式说明:
  log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '   --- 定义日志信息要记 录的内容格式
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_loglogs/access.logmain;          --- 调用定义格式信息,生成访问日志
  $remote_addr       10.0.0.1         --- 访问客户端的源地址信息
  $remote_user          -               --- 访问客户端认证用户信息 (用户登录网站需要账号密码)
  [$time_local]                            --- 显示访问时间
  $request      GET / HTTP/1.1            --- 请求行信息
  $status            304            --- 状态码信息(304状态码利用缓存显示页面信息)
  $body_bytes_sent                      --- 服务端响应客户端的数据大小信息
  $http_referer                         --- 记录链接到网站的域名信息
  $http_user_agent                      --- 用户访问网站客户端软件标识信息
  PS: 用户利用客户端浏览器测试访问时,win10默认浏览器会有异常问
  $http_x_forwarded_for               ---反向代理
1.2.3 日志要进行切割
  1. 利用shell脚本切割
  1)vim /server/scripts/cutting.sh
  #!/bin/bash
  date_info=$(date +%F-%H:$M)
  mv /application/nginx/logs/access.log /application/nginx/logs/access.log.$date_info

  /application/nginx/sbin/nginx -s>  2)crontab -e
  # cut nginx log cron
  00 */6 * * */bin/sh/server/scripts/cutting.sh&>/del/null
2. 可以使用logrotate工具(系统自带日志切割工具)
  作用:logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它们放                  在/etc/logrotate.d/目录下。
  logrotate全局配置参数说明:
  vim /etc/logrotate.conf
  weekly ###日志文件将按月轮循
  rotate 4 ###一次将最多存储4个归档日志
  create ###在生成轮询日志后,会自动创建一个新的文件
  dateext ###生成的轮询日志后面加上时间格式
  compress ###生成的轮询日志是否压缩,默认被注释
  include /etc/logrotate.d ###存放日志文件的轮询配置
  示例:创建一个日志,配置logrotate来轮询一个日志
  vim /etc/logrotate.d/log-file

  PS:通用格式,其中有些参数可以不设置
1.2.4 location区块的作用?
  企业需求解决:
  搭建好一台nginx的web服务器。配置好内网卡地址与外网卡地址
  web服务的网站域名为www.etiantian.org,站点目录为html/www
  要求内网用户可以访问网站http://www.etiantian.org/AV资源信息
  要求外网用户禁止访问网站http://www.etiantian.org/AV资源信息
  部署过程:
  1)精确控制允许和拒绝:
  location / {
  allow 172.16.1.0/24;——允许172.16.1.0网段访问
  denyall;——拒绝所有访问
  }
  2)访问/AV 资源有访问控制
  定位/AV资源不能随意访问
  location 进行资源定位——相当于if 判断,满足什么做什么
  location /AV {
  }
  3)创建测试访问资源信息
  mkdir /application/nginx/html/www/AV
  -H host:www.etiantian.org      --- 表示指定访问nginx服务端哪一个虚拟主机
  测试:
  # curl -H host:www.etiantian.org 172.16.1.7/AV/kai.html
  kai123 ——可以访问
  # curl -H host:www.etiantian.org 10.0.0.7/AV/kai.html
  
  403 Forbidden   ——403拒绝访问
  
  403 Forbidden
  nginx/1.12.2
  
  

1.2.5 location语法格式
  Syntax: location [ = | ~ | ~*|^~ ] uri {... }   #uri就是域名后面的信息
  优先顺序
  = ——精确匹配(不要多余的)   1
  ~ ——区分大小写匹配         3
  ~* ——不区分大小写匹配(grep -i)   3
  ^~ ——优先匹配(优先级)      2
  /AV ——指定要匹配的目录资源      3
  / ——指定匹配站点目录             默认匹配
  ! ——表示取反匹配

  1. 编写测试文件
  cat www.conf
  server {
  listen       80;
  server_namewww.etiantian.org etiantian.org;
  root   html/www;
  location / {
  return 401;
  }
  location = / {
  return 402;
  }
  location /documents/ {
  return 403;
  }
  location ^~ /images/ {
  return 404;
  }
  location ~* \.(gif|jpg|jpeg)$ {
  return 500;
  }
  access_log logs/access_www.log main;
  }
  2. 根据返回状态码,确认优先级
  作用:编译以后进行网站运行状态监控
  总结取状态码方法:
  1)curl -I www.etiantian.org/kai/ 2>/dev/null|awk 'NR==1{print $2}'
  2)curl -I www.etiantian.org/kai/ -s|awk 'NR==1{print $2}'
  3)curl -s -I www.etiantian.org/kai/ -w "%{http_code}\n" -o /dev/null
  PS:-I :显示响应报文起始行和响应头部信息
  -o:将输出内容定向到空
  -w:指定需要输出显示的信息 ("%{http_code}\n":http状态码)
  -s:不显示错误输出,将错误信息追加到空



1.2.6 rewrite作用
  1. 作用: 实现域名地址信息跳转
  用于做伪静态
  www.etiantian.org/kai?edu.html      ---动态资源
  www.etiantian.org/kai-edu.html         ---伪静态
  如何实现类似百度重写域名的功能?
  baidu.com===>www.baidu.com
  etiantian.org===> bbs.etiantian.org
  过程:
  rewrite指令实践操作一:(错误)
  # cat bbs.conf
  server {
  listen       80;
  server_namebbs.etiantian.org bbs.org;
  rewrite ^/(.*) http://bbs.etiantian.org/$1 permanent;
  root   html/bbs;
  indexindex.html index.htm;
  }
  # curl -L etiantian.org          --- 进行访问跳转追踪
  curl: (47) Maximum (50) redirects followed
  # curl -Lv etiantian.org            --- 会显示无限循环过程
  PS:以上配置进入了无限循环状态
  rewrite指令实践操作二:(正确)
  cat bbs.conf
  server {
  listen 80;
  server_name etiantian.org;
  rewrite ^/(.*) http://bbs.etiantian.org/$1 permanent;
  }
  server {
  listen       80;
  server_namebbs.etiantian.org bbs.org;
  root   html/bbs;
  indexindex.html index.htm;
  }
  PS:以上状态不会循环,跳转成bbs,后再次重新匹配时,是以bbs的域名查找,这时候就不匹配第一个server_name了,直接进入下一个server区块
  rewrite指令实践操作三:(正确)
  # cat bbs.conf
  server {
  listen       80;
  server_namebbs.etiantian.org bbs.org;
  if ($host ~* "^etiantian.org$") { ——if这里相当于location
  rewrite ^/(.*) http://bbs.etiantian.org/$1 permanent;
  }
  root   html/bbs;
  indexindex.html index.htm;
  }
  PS:$host就是主机头信息,~*:不区分大小写,后面的是以etianitan开头,org结尾。经过rewite就跳转为bbs, 然后在重新访问,这个时候就不满足if语   句的条件了了,那么就继续读取下一个location
1.2.7 rewrite企业应用场合:
  · 可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。
  · 为了让搜索引擎收录网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
  · 网站换新域名后,让旧域名的访问跳转到新的域名上,例如:让京东的360buy换成了jd.com。
  · 根据特殊变量、目录、客户端的信息进行URL跳转等。
1.3 Nginx访问认证
  部署过程:
  1. 编写配置文件,加入认证信息
  auth_basic         "kai training";
  auth_basic_user_file /application/nginx/conf/htpasswd;
  # cat bbs.conf
  server {
  listen       80;
  server_namebbs.etiantian.org bbs.org;
  auth_basic         "kai training";
  auth_basic_user_file /application/nginx/conf/htpasswd;
  root   html/bbs;
  indexindex.html index.htm;
  }
  2. 编写认证文件
  利用htpasswd命令生成密文密码信息
  httpd-tools-2.2.15-59.el6.centos.x86_64 ——安装apache(需要用其中的htpasswd命令)
  htpasswd -bc /application/nginx/conf/htpasswd kai kai123    ---生成认证文件
  chmod 400 /application/nginx/conf/htpasswd
  chown www.www /application/nginx/conf/htpasswd
  PS:-c#创建一个新的密码文件
  -b #采用免交互的方式输入用户的密码信
  
  3. 重启服务进行测试

  nginx -s>  windows浏览器进行测试
  linux系统下进行测试
  # curl -u lidao888:123456 www. dancy.com
  web01 www
1.3.1 curl命令参数
  总结curl命令参数:
  -v         --- 显示用户访问网站详细报文信息(请求报文 响应报文)
  -I         --- 显示响应报文起始行和响应头部信息
  -H host:       --- 修改请求报文host字段信息
  -L         --- 进行访问跳转追踪
  -u user:password--- 指定认证用户信息
  -o         --- 将输出内容可以指定到空
  -w         --- 指定需要输出显示的信息
  -s         --- 不显示错误输出,将错误信息追加到空
  小伙伴们可以关注我的微信公众号:linux运维菜鸟之旅

  关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量!


页: [1]
查看完整版本: Nginx服务其他管理配置