您的位置:首页 > 运维架构 > Nginx

第10周总结 (nginx介绍并安装) (nginx配置信息详解) (nginx使用方法详解)

2020-01-13 05:23 1466 查看

*************************************ansible批量管理剧本编写(利用角色编写)******************************

01. 课程知识介绍
    1) ansible剧本整合功能    
    2) 网站服务概念知识(名词概念)
       a 用户访问网站原理过程
       b HTTP协议组成部分
       c 网站资源信息(图片 视频 -- 静态资源  表格信息 搜索信息 评价 -- 动态资源)
       d 网站用户访问度量方式(IP数 PV数 UV数)  
    3) 常用网站服务软件 nginx php tomcat apache    
    
02. 课程知识回顾 
    1.剧本设置变量方法    shell变量 
      a 对剧本进行设置变量 
      b 对主机清单进行设置变量     
        · 针对一个主机设置变量
        · 针对一个主机组设置变量
      b 对剧本执行的命令添加参数信息  -e 
      PS: 如何调用变量: {{ 变量名 }} "{{ 变量名 }}"
      
    2.剧本判断功能配置    when --> setup 
      单个进行判断 
      多个进行判断   or/and
      对剧本进行取反操作  !=
    3.剧本循环功能配置
      loop with_itmes
      PS: 当一个name中, 出现重复模块信息      
    4.剧本忽略错误功能 
      调试剧本/shell 创建用户
    5.剧本标记功能配置  
      调试剧本/然后也可以对执行完的剧本进行标记
    6.剧本执行输出功能  
      register -- debug(msg)
    7.剧本执行触发功能
      notify --> 配置文件分发 --> 重启服务
    8.剧本执行提升效率 了解  gather_fact: no  收集受控主机信息
      提升剧本执行速度
       
03. 如何实现一键化部署服务
    nginx tomcat mysql docker 
    1) 掌握服务部署流程
       a rsync服务   服务端部署/客户端服务
       b nfs服务     服务端部署/客户端服务
       c 全网备份    服务端部署/客户端服务
       d 实时同步    服务端部署/客户端服务
       存储服务器: (备份服务器上rsync服务必须配置)
       a 安装软件程序  inotify+sersync
       b 编写配置文件
       c 启动服务程序
       
    2) 如何将服务的部署过程利用模块实现
       实时同步:
       a 安装软件程序
       ansible 172.16.1.31 -m yum -a "inotify-tools"
       下载软件 
       ansible 172.16.1.31 -m get_url -a "url=https://github.com/wsgzao/sersync/archive/master.zip dest=/server/tools/sersync.zip" 
       ansible 172.16.1.31 -m unarchive -a "src=/server/tools/sersync_installdir_64bit.zip dest=/usr/local/ copy=no"
       b 编写配置文件
       ansible 172.16.1.31 -m copy -a "src=xxx dest=/usr/local/sersync_installdir_64bit/sersync/conf/"
       c 启动服务程序
       ansible 172.16.1.31 -m file  -a "path=/usr/local/sersync_installdir_64bit/sersync/bin/sersync mode=755"
       ansible 172.16.1.31 -m shell -a "/usr/local/sersync_installdir_64bit/sersync/bin/sersync -dro /usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml"
           
    3) 将模块信息整合到剧本文件中       (剧本语法结构)
       - hosts: 172.16.1.31
         tasks:
           - name: 01 install software
             yum: name=inotify-tools state=installed
             #get_url: url=https://github.com/wsgzao/sersync/archive/master.zip dest=/server/tools/sersync.zip
           - name: 02 unarchive software
             unarchive: src=/server/tools/sersync_installdir_64bit.zip dest=/usr/local/ copy=no
           - name: 03 copy conf file
             copy: src=/etc/ansible/ansible_playbook/confxml.xml  dest=/usr/local/sersync_installdir_64bit/sersync/conf/
           - name: 04 change file execute
             file: path=/usr/local/sersync_installdir_64bit/sersync/bin/sersync mode=755
           - name: 05 boot server  
             shell: /usr/local/sersync_installdir_64bit/sersync/bin/sersync -dro  /usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml  
       
    4) 进行剧本测试执行过程
    
     测试前需要:配置好主机清单
       vim /etc/ansible/roles/hosts
       [rsync_server]
       172.16.1.41
       
       [rsync_client]
       172.16.1.31
       172.16.1.7
       
       [nfs_server]
       172.16.1.31
       
       [nfs_client]
       172.16.1.41
       172.16.1.7
       
    5) 将多个剧本进行整合(需要确认主机清单配置)
       整合剧本方法:
       方法一: 将多个剧本信息整合在一个文件  简单易懂
       (在同个目录内创建一个新的文件,将其他的剧本名称加入,然后使用命令执行这个心文件即可)
       include:          将多个剧本进行包含
       # cat summary.yaml      
       - include: auto_rsync.yaml
       - include: auto_nfs.yaml
       - include: auto_sersync.yaml

       import_playbook : 将多个剧本进行包含
       # cat summary.yaml 
       - import_playbook: auto_rsync.yaml
       - import_playbook: auto_nfs.yaml
       - import_playbook: auto_sersync.yaml

       方法二: 利用角色功能进行多个剧本整合  官方推荐  看的明白
       第一个历程: 创建角色目录
       对不同的服务定义不同角色信息:
       /etc/ansible/roles/rsync/
       /etc/ansible/roles/nfs/
       /etc/ansible/roles/sersync/
       /etc/ansible/roles/all/
       
       第二个历程: 创建角色目录中数据信息
       vars:        main.yaml  保存变量设置文件信息
       tasks:       main.yaml  保存所有任务配置文件
       files:                  所有要分发传输文件信息
       templates:   ???        保存所有模板文件信息
       headlers:    main.yaml  保存所有触发器信息
       
       mkdir all/{files,vars,tasks,headlers,templates}
       ansible-galaxy init nfs
       
       第三个历程: 编写角色目录中文件信息
       编写tasks: main.yaml
       [root@m01 tasks]# cat main.yml 
       ---
       # tasks file for rsync
       - name: 01:安装软件程序
         yum: name=rsync state=installed
       - name: 02:编写文件信息
         copy:
           src: /etc/ansible/ansible_playbook/rsyncd.conf
           dest: /etc/
       - name: 03:创建虚拟用户
         user:
           name: rsync
           shell: /sbin/nologin
           create_home: no
         when: ansible_eth1.ipv4.address == "172.16.1.41"
       - name: 04:创建备份目录
         file: path=/backup  state=directory  owner=rsync group=rsync
         when: ansible_eth1.ipv4.address == "172.16.1.41"
       - name: 05:创建密码文件
         copy: content="rsync_backup:oldboy123" dest=/etc/rsync.password mode=600
         when: ansible_eth1.ipv4.address == "172.16.1.41"
       - name: 06:启动服务程序
         service: name=rsyncd state=started enabled=yes
         when: ansible_eth1.ipv4.address == "172.16.1.41"
       - name: 02:创建密码文件
         copy: content="oldboy123" dest=/etc/rsync.password mode=600
         when: ansible_eth1.ipv4.address != "172.16.1.41"

       编写files: rsyncd.conf
       
       编写handlers: main.yml
       # handlers file for rsync
       - name: rsync_restart
         service: name=rsyncd state=restarted

       编写汇总剧本 site.yml
       - hosts: rsync
         roles:
           - rsync

       
       templates:  模板文件 
       01. 在templates目录中编写模板文件
       port = {{ port }}

       02. 设置模板变量信息
       # cat vars/main.yml 
       ---
       # vars file for rsync
       port: 874
       
       03. 任务中必须调用模板目录中的文件
       template:
         src: rsyncd.conf
         dest: /etc/

       nfs + rsync + sersync
       
04. ansible课程总结
    1) 掌握ansible主机清单配置  主机组配置
    2) 掌握ansible模块使用方法  
       command shell script file copy fetch yum service cron user ping debug mount setup get_url unarchive
       shell 万能模块
    3) 掌握ansible剧本编写方法
       a 注意剧本编写规范 3点 缩进 字典 列表
       b 剧本执行过程方法 ansible-playbook  --syntax-check / -i 主机清单文件
       c 剧本文件扩展编写 变量* 判断* 循环* 忽略错误 标记 触发*
    4) 掌握ansible剧本整合方法
       简单方法: - include / - import_playbook
       复杂方法: roles --> 不同目录(ansible-galaxy init 角色目录) --> 子目录信息(vars-main.yml tasks-main.yml file/template handlers-main.yml)
     
    sersync rsync nfs 全网备份  nginx php mysql nginx负载均衡 keepalived zabbix     


*************************************综合架构nginx网站架构服务简介以及安装******************************

04. 课程知识说明
    1) HTTP报文信息
       HTTP请求报文: 请求行  请求头
       HTTP响应报文: 起始行(状态码)
    2) 网站资源信息
       网站静态资源
       网站动态资源
       网站伪静态处理
    3) 网站访问量度量方法
       IP PV UV
    4) 如何部署安装nginx软件程序
       a yum安装
       b 编译安装
       
05. 网站访问原理过程:
    1) 进行域名解析过程      DNS解析原理(本地查询 递归查询 迭代查询(A记录))
    2) 和网站服务建立连接    三次握手过程
    3) 发送HTTP请求信息      HTTP请求报文  
    4) 发送HTTP响应信息      HTTP响应报文
    5) 和网站服务断开连接    四次挥手过程
    
03. HTTP网络协议介绍
    超文本传输协议
    HTTP请求报文:  客户端 ---> 服务端
    1) 请求行:
       > GET / HTTP/1.1
       1) 请求方法         GET(获得 客户端 -- 从 -- 服务端获得页面数据信息 )  POST(提交  客户端 -- 发送数据 --- 服务端)
       2) 请求内容         请求网站资源信息(页面文件 图片 视频 音频)  没有具体只需求会默认请求首页文件(index.html)   
       3) 请求使用的协议   HTTP/1.0 HTTP/1.1  HTTP/2.0(高可用)
          TCP长链接:   HTTP/1.1   一次链接,可以发送多个请求
          TCP短链接:   HTTP/1.0   一次链接,可以发送一次请求
    2) 请求头:
       > User-Agent: curl/7.2    --- 请求客户端软件信息
       > Host: www.baidu.com     --- 显示不同的网站页面信息
    3) 空行
    4) 请求主体:
       get  方法访问网站是无法看到请求主体信息
       post 方法访问网站是可以看到请求主体信息  ???
    
    HTTP响应报文:  服务端 ---> 客户端
    1) 起始行:
       HTTP/1.1 200 OK
       a 协议版本
       b 状态码信息: 表示客户端访问结果
       c 状态码描述:
       
       200 OK                   ---  可以正常访问网站
       301 Moved Permanently    ---  永久跳转     会将跳转信息在浏览器中进行缓存   域名信息永久更换
       302 Moved Temporarily    ---  临时跳转   不会将跳转信息在浏览器中进行缓存   域名频繁变化情况
       304                      ---  本地进行缓存
       401                      ---  访问认证失败  VIP 账号/密码  
       403                      ---  禁止用户访问  根据IP网段或地址   
                                     oldboy/* 可以访问  AV/*  内网人员访问
       404                      ---  访问页面资源无法找到
       500                      ---  网站架构服务器出现问题了    
       502                           1) 服务器负载过高
       503                           2) 服务器网络异常
       504                           3) 服务器程序代码异常
                                     4) 服务器是否服务停止  tail -f 日志
                                     5) 服务器硬件资源不足  
       PS: 记忆常见状态码
       ======================================================================================
       架构设计思想
       用户01访问网站         北京   CDN服务器 -->  负载均衡 ---> 负载均衡  -->   web01服务器
       用户10万访问网站                                                           web02服务器
       网站资源缓存到本地                                                         web03服务器
                                                                  负载均衡  -->   web01服务器
                                                                                    web02服务器
                                                      回源                          web03服务器
       用户01访问网站
       用户10万访问网站       深圳   CDN服务器
       
       
       用户10万访问网站       上海   CDN服务器
       ======================================================================================
    
    2) 响应头:
    3) 空行
    4) 响应主体:
       网站页面源代码信息  --- 浏览器解析 --- 查看页面内容

04. 网站的资源信息

    识别哪些资源: .txt 文本  jpg图片 png img avi mp3   静态资源
    不能识别资源: php                                  动态资源
    媒体资源类型文件: /etc/nginx/mime.types   --- 定义可以识别处理的静态文件信息
    
    URL:  全称为Uniform Resource Location,  中文翻译为统一资源定位符
    URI:  全称为Uniform Resource Identifier,中文翻译为统一资源标识符
    
    www.taobao.com      /markets/coolcity/coolcityHome?spm=a21bo.2017.201867-main.19.5af911d9lFFVW9
        URL                                  URI
        
    静态资源:
    1) 每个页面都有一个固定的URL/URI地址,且URL一般以.html、.htm、.shtml等常见形式为后缀,
       而且地址中不含有问号“?”或“&”等特殊符号。
       
    2) 网页的内容保存在网站服务器文件系统上,也就是说,
       静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件。(缺点)
       
    3) 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)
    
    4) 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大,当网站信息量很大时,
       完全依靠静态网页比较困难(缺点)。
       
    5) 网页的交互性较差,在程序的功能实现方面有较大的限制(缺点)
    
    6) 当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据,待客户端拿到数据后,
       在浏览器端解析并展现出来, 这样可以应对大量的高并发请求.(优点)

    
    动态资源:    
    1)    网页扩展名后缀常见为:.asp、.aspx、.php、.js、.do、.cgi等.
    
    2)    网页一般以数据库技术为基础,大大降低了网站维护的工作量。(优点)
    
    3)    采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等。(优点)
    
    4)    动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,
        服务器解析这些程序并可能通过读取数据库来返回一个完整的网页内容。(缺点)
        
    5)    动态网页中的“?”在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,
        或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓取网址中“?”后面的内容,因此在企业通过搜索引擎进行推广时,
        需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求。
    
    伪静态资源: 
    1) 网页一般以数据库技术为基础,大大降低了网站维护的工作量。
    2) 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等
    3) 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)
    
    
05. 网站访问量度量方法:
    IP: 记录每一个用户源IP地址,进行统计  不同IP访问 IP数据累加   awk数组 分析日志   ELK(开源软件程序)  第三方 百度统计
        参考数值: NAT映射 网络拨号
    PV: 记录统计页面访问量pageview                               awk数组 分析日志   ELK(开源软件程序)  第三方 百度统计
        参考数值: 
    UV: 记录独立访客数
        cookie:   会员卡       网站根据访问用户进行生成  保存记录到浏览器中         开发程序           第三方 百度统计
        session:  会员记录表   网站根据用户访问情况生成  保存记录到缓存服务器  ???
    统计网站: 站长之家: 
    http://alexa.chinaz.com/alexa_more.aspx
    
    IP:20w  PV: 30w  架构规模: 30-40  优化 web 数据库  CDN 阿里云
    
06. 常用网站服务软件:
    处理静态资源网站服务: nginx(国内) apache(少量)
    处理动态资源网站服务: php(php编写动态页面)  tomcat(java编写动态页面) python(框架编写动态页面)
    https://w3techs.com/technologies/overview/web_server/all
  
07. nginx软件概述说明
    
    特点: 处理高并发能力(大量小文件), 比较强; 占用本地服务器资源比较少(内存资源)
    功能: 1v3
          nginx 可以实现网站web服务功能   apache
          nginx 可以实现负载均衡功能      lvs haproxy
          nginx 可以实现数据缓存功能      squid
          缓存作用: 用于减缓后端压力
          
08. 如何部署nginx软件程序
    1. yum  
       a 官方源yum安装nginx     软件目录结构(标准)  最新稳定版
       第一个历程: 更新yum源
       vim /etc/yum.repos.d/nginx.repo
       [nginx-stable]
       name=nginx stable repo
       baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
       gpgcheck=1
       enabled=1
       gpgkey=https://nginx.org/keys/nginx_signing.key
       module_hotfixes=true
       
       第二个历程: 安装软件
       yum install -y nginx
       
       b 非官方源yum安装nginx   软件目录结构        历史版本
       yum install -y nginx
        
    2. 编译安装
       第一个历程: 下载软件源码包
       wget http://nginx.org/download/nginx-1.16.1.tar.gz
       
       第二个历程: 下载nginx所需的依赖软件
       openssl-devel : 可以让网站实现HTTPs访问 
       pcre-devel    : 兼容perl语言正则表达式   
       
       第三个历程:  解压软件程序 进入到软件源码目录编译安装
       编译安装软件三步曲
       1) 配置过程
          ./configure --prefix=/application/nginx-1.16.1 --with-http_ssl_module --with-http_stub_status_module
           
          --prefix=PATH                      set installation prefix
                                             程序安装好后存储数据目录
          --sbin-path=PATH                   set nginx binary pathname
                                             设置命令文件保存目录
          --modules-path=PATH                set modules path
                                             设置模块保存目录
          --conf-path=PATH                   set nginx.conf pathname
                                             配置文件保存目录
          --error-log-path=PATH              set error log pathname
          --pid-path=PATH                    set nginx.pid pathname
          --lock-path=PATH                   set nginx.lock pathname
          --user=USER                        set non-privileged user for worker processes
                                             指定worker进程管理用户
          --group=GROUP                      set non-privileged group for worker processes
                                             指定worker进程管理用户组
          --with-http_ssl_module             enable ngx_http_ssl_module
                                             激活ssl模块功能
          --with-http_stub_status_module     enable ngx_http_stub_status_module
                                             ?????
      2) 编译过程 == 翻译
         make        

      3) 编译安装
         make install


*************************************综合架构nginx软件配置信息详解******************************

02. 课程知识介绍
    1) 网站目录结构信息 (配置文件目录  日志文件目录)
    2) 网站配置文件信息 主配置文件 扩展配置文件
    3) 静态资源网站搭建  多个扩展配置文件--站点目录--代码  运维
    4) 网站数据统一存储  

03. 网站服务软件目录结构
    /etc/logrotate.d/nginx         --- 实现日志切割功能
    
    ==============================================================================
    日志切割方式:
    1) 利用系统自带的软件实现日志切割
       logrotate 程序
       cat /etc/logrotate.conf    logrotate程序主配置文件
       weekly                     日志切割周期(按天 按小时)
       rotate 4                   切割日志文件留存几次
       create                     创建新的日志信息  
       dateext                    切割后日志文件标识信息(按照时间进行标识)
       include /etc/logrotate.d   加载目录中配置文件信息
       
       (将以下信息放入/etc/logrotate.conf中即可实现日志切割)
       /var/log/wtmp {            指定日志文件单独进行切割处理    
           monthly
           create 0664 root utmp
              minsize 1M
           rotate 1
       }
       
       
       cd /etc/logrotate.d
       cat nginx 
       (单独在/etc/logrotate.d下生成一个想要切割的日志的文件然后编辑下就可以实现切割)
        nginx日志切割配置文件
        /var/log/nginx/*.log {
                daily                      指定以天数转储
                missingok               发生错误忽略
                rotate 52               转储备份数量
                compress                转储时候是否压缩
                delaycompress              当前转储完成之后在下次转储压缩
                notifempty               空的日志不进行转储
                create 640 nginx adm      创一个640的属主和属组
                sharedscripts             执行完当前转储统一执行脚本
                postrotate                转储完成之后执行脚本
                        if [ -f /var/run/nginx.pid ]; then
                                kill -USR1 `cat /var/run/nginx.pid`
                        fi
                endscript
        }
    
    2) 利用编写脚本实现日志切割
       #!/bin/bash
       mv /var/log/nginx/access.log  /var/log/nginx/access_$(date +%F_%T).log
       (编写定时任务把源日志文件更改名字进行切割,同时重启服务让服务从新生成一个日志目录)
       systemctl reload nginx
       
       0  */6  * * *  /bin/sh  日志切割.sh &>/dev/null
    ==============================================================================
    
    /etc/nginx                        --- nginx程序目录
    /etc/nginx/nginx.conf             --- nginx程序主配置文件    ******
    /etc/nginx/conf.d/default.conf    --- nginx程序扩展配置文件  ******
    /etc/nginx/mime.types             --- nginx媒体资源类型文件???  决定了哪些资源可以被nginx处理
    
    /etc/nginx/fastcgi_params         --- 实现nginx将动态请求发送给动态服务  nginx -接口-> php
    /etc/nginx/scgi_params
    /etc/nginx/uwsgi_params           --- 实现nginx程序 -- python
    
    /etc/nginx/koi-utf                --- 程序字符编码有关文件
    /etc/nginx/win-utf
    /etc/nginx/koi-win
    /etc/nginx/modules                --- 程序模块目录
    说明: nginx程序配置文件

    /etc/sysconfig/nginx              --- 程序进行调试有关(开发)
    /etc/sysconfig/nginx-debug
    
    /usr/lib/systemd/system/nginx-debug.service   --- 控制服务是否能够正常运行文件  systemctl start nginx
    /usr/lib/systemd/system/nginx.service         --- shell介绍  
    
    /usr/lib64/nginx                              --- 程序运行需要调用库文件
    /usr/lib64/nginx/modules
    /usr/libexec/initscripts/legacy-actions/nginx
    /usr/libexec/initscripts/legacy-actions/nginx/check-reload
    /usr/libexec/initscripts/legacy-actions/nginx/upgrade
       
    /usr/sbin/nginx                               --- 程序命令文件保存路径  ******
    -v            : show version and exit
                    显示软件版本
    -V            : show version and configure options then exit
                    显示软件版本和配置参数
    -t            : test configuration and exit   * 
                    检测配置文件合法性
                    (指令信息后面需要有;结尾/ 花括号信息必须成对 / 参数指定要书写正确 并书写在合理位置 )
    -T            : test configuration, dump it and exit
                    检测配置文件合法性, 并将配置文件内容进行输出
    -q            : suppress non-error messages during configuration testing
                    抑制非错误消息输出
    -s signal     : send signal to a master process: stop, quit, reopen, reload  *
                    识别信号信息  stop  reload  
    -p prefix     : set prefix path (default: /etc/nginx/)
                    设置加载配置文件程序目录
    -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
                    指定需要加载配置文件
    -g directives : set global directives out of configuration file

    /usr/sbin/nginx-debug
        
    /usr/share/doc/nginx-1.16.1               --- 文件文档说明信息
    /usr/share/doc/nginx-1.16.1/COPYRIGHT
    /usr/share/man/man8/nginx.8.gz
    
    /usr/share/nginx                          --- 指定程序站点目录
    /usr/share/nginx/html
    /usr/share/nginx/html/50x.html            --- 网站程序代码文件信息
    /usr/share/nginx/html/index.html

    /var/cache/nginx                          --- 程序缓存目录
    功能强大:
    a 网站服务应用  web服务    apache
    b 网站负载应用  lb服务     lvs
    c 网站缓存应用  缓存服务器 squid  蓝汛    
    
    /var/log/nginx                            --- 日志文件保存目录

04. 网站服务程序配置文件说明
    /etc/nginx/nginx.conf
    user  nginx;                              --- nginx进程管理用户  
    
    ==========================================================
    nginx进程信息:
    master process: 管理服务运行状态  进行存在--服务就可以正常运行    经理
    worker process: 处理用户访问请求  HTTP请求报文 -- worker进程处理  工人
    ==========================================================

    worker_processes  1;                     --- 指定worker进程数量  数量<= 服务器总的核心数
    
    error_log  /var/log/nginx/error.log warn;    --- 错误日志保存路径 错误日志级别
    pid        /var/run/nginx.pid;               --- 程序PID文件保存路径
    
    events {
        worker_connections  2048;            --- 每个worker进程并发连接数 连接数*进程数<系统打开文件数  
    }
                                                 一个用户访问建立文件信息---创建socket
    =============================================================================
    系统打开文件数/系统文件句柄数  (当你的的系统遇到大量访问时,可以把文件打开数调大)
    open files                      (-n) 2  所有程序可以打开文件数
    程序运行起来 -- 进程nginx -- 打开一些文件 nginx.conf access.log error.log nginx.pid
    修改调整系统打开文件数:
    /etc/security/limitsc.conf
    *    -    nofile    65535  20
    模拟打开文件数异常情况 ???
    ============================================================================
    
    http {
        include       /etc/nginx/mime.types;           --- 加载媒体资源文件, 识别静态资源信息
        default_type  application/octet-stream;        --- 默认识别文件类型
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   定义访问日志格式信息
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  /var/log/nginx/access.log  main;   --- 定义使用格式信息 保存日志路径
        keepalive_timeout  65;                         --- 连接会话超时时间  
        include /etc/nginx/conf.d/*.conf;              --- 加载其他配置文件信息
    }
    
    主配置区域:        程序核心功能配置信息
    事件配置区域:      程序性能参数信息
    HTTP配置区域:      网站服务功能信息
    server配置区域:    每一个网站页面配置信息
    location配置区域:  进行特殊功能设置  安全/跳转
    if配置区域:        访问信息进行判断

    /etc/nginx/conf.d/default.conf
    server {
        listen       80;                          --- 指定服务监听地址/指定服务端口信息
        server_name  bbs.oldboy.com;              --- 指定网站服务域名信息
        location / {                              
            root   /usr/share/nginx/html;         --- 指定站点目录信息
            index  index.html index.htm;          --- 首页文件定义  首页文件不存在,访问网站会报403错误
        }
        error_page   404 500 502 503 504  /error.html;  --- 优雅显示错误页面
        location = /error.html {
            root   /html;
        }
    }

    PS: 错误状态码: 403  首页文件不存在了


*************************************nginx软件使用配置详解**********************************
    
    
01. 搭建简单静态网站服务

    第一个历程: 安装部署nginx服务    
    vim /etc/yum.repos.d/nginx.repo
        [nginx-stable]
        name=nginx stable repo
        baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
        gpgcheck=1
        enabled=1
        gpgkey=https://nginx.org/keys/nginx_signing.key
        module_hotfixes=true
       
    yum install -y nginx
       
    第二个历程: 编写nginx配置文件(扩展配置)
    vim /etc/nginx/conf.d/www.conf
    server {
        listen       80;
        server_name  www.oldboy.com;
        location / {
            root   /html/www;
            index  index.html index.htm;
        }
    }
                   
    vim /etc/nginx/conf.d/bbs.conf
    server {
        listen       80;
        server_name  bbs.oldboy.com;
        location / {
            root   /html/bbs;
            index  index.html index.htm;
        }
    }

    vim /etc/nginx/conf.d/blog.conf
    server {
        listen       80;
        server_name  blog.oldboy.com;
        location / {
            root   /html/blog;
            index  index.html index.htm;
        }
    }
    
    第三个历程: 编写网站代码信息
    # mkdir /html/{www,bbs,blog} -p
    # for name in www bbs blog;do echo $name.oldboy.com >/html/$name/index.html;done
    # for name in www bbs blog;do cat /html/$name/index.html;done
    www.oldboy.com
    bbs.oldboy.com
    blog.oldboy.com
    
    第四个历程: 配置DNS解析信息(本地地址解析配置)
    hosts
    10.0.0.7   www.oldboy.com bbs.oldboy.com blog.oldboy.com

02. 网站服务访问方式
    方式一: 基于域名进行访问
            www.oldboy.com --> IP地址
            
    方式二: 基于端口进行访问
            修改文件 listen 8080 --> www.oldboy.com:8080
            用户访问网站:
            01. 解封装数据包识别网络层地址信息
            02. 解封装数据包识别传输层端口信息  可以匹配哪个网站  多个
            03. 解封装数据包识别应用层请求报文 Hosts信息  
                匹配: 根据Hosts信息, 匹配不同网站页面
              不匹配: 根据配置文件加载顺序, 显示第一个匹配网站页面信息

    方式三: 基于地址进行访问
            listen         172.16.1.7:80;


03. 网站页面实现文件资源共享存储功能   ( autoindex   on ) ---- 需要关闭首页显示
    编写配置文件
    server {
        listen       80;
        server_name  bbs.oldboy.com;
        location / {
            root   /html/bbs;
            #index  index.html index.htm;
            autoindex   on;
        }
    }
        
    /etc/nginx/mime.types  此文件决定是否下载或者显示
    
    页面显示出现乱码:charset utf-8;

04. 网站服务安全配置说明    ( auth_basic  auth_basic_user_file ) --- 具体内容可以灵活编写
    1) 进行网站认证访问
       认证模块: ngx_http_auth_basic_module
       指令信息:     
       auth_basic            : 开启认证功能
       auth_basic_user_file  : 设置加载指定密码文件
       
       第一个历程: 编写配置文件
       server {
           listen         80;
           server_name  bbs.oldboy.com;
           charset utf-8;
           location / {
               root   /html/bbs;
               #index  index.html index.htm;
               autoindex   on;
               auth_basic           "财务网站认证";
               auth_basic_user_file /etc/nginx/password;
           }
       }

       第二个历程: 创建密码文件
       创建密码文件(第一次创建时)
       htpasswd  -bc  /etc/nginx/password  oldboy  oldboy123
       添加用户信息
       htpasswd  -b  /etc/nginx/password  oldgirl  oldgirl123
       删除用户信息
       htpasswd -D /etc/nginx/password oldboy
       
       chown nginx /etc/nginx/password    ******************************
       需要解决(我没有解决的问题)
       (worker 这里把属主改为www为的是可以让普通用户可以获取到密码.在用户输入密码后,
       系统会将得到的密码与源密码进行比对,这时访问密码文件的是普通用户,如果文件
       权限是644还好,但是如果是644,那么安全性不高,如果更改为600,那么普通用户又不能访问,
       所以创建一个www用户,再把权限更改为600,这样密码文件既可以查看也提升了安全性.)
       
       说明: 认证密码文件密码信息必须密文信息;
       401 Authorization Required :  网站需要认证访问
       500 Internal Server Error  :  网站程序文件配置不正确/网站代码文件配置不正确
                                     配置密码文件权限不正确

05. 网站服务状态信息收集:
    状态模块: ngx_http_stub_status_module
    
    实现监控网站状态信息:
    第一个历程: 修改虚拟软件 虚拟网络编辑器
    vmnet8 nat设置中 ---> 端口转发设置
    访问 -- bbs.oldboy.com:9000 == 10.0.0.8:80
    第二个历程: 编写本地解析文件
    hosts:
    192.168.16.200   bbs.oldboy.com    
    第三个历程:
    配置方法:(没有试验过.只是理论书写)
    server {
      listen            80;
      server_name       bbs.oldboy.com;
      location = /basic_status {
          stub_status;
      }
    }
    
    bbs.oldboy.com:9000/basic_status(访问这个网址即可看到监控界面)
    
    Active connections: 2      --- 网站并发访问连接数量  5w
    server accepts:     1090   --- 从网站服务运行开始接受了多少次三次握手请求
    handled :           1090   --- 对请求建立三次握手的响应次数
                                   处理数量和请求数量一般是一致, 只有到达服务器性能极限时, 会出现不一致情况
                                   worker进程数 2*worker连接数 2048 = 4096
                                   5000请求  4096
    requests:                  --- 客户端总共发送HTTP请求数量
    Reading: 0                 --- 当前服务正在读取用户HTTP请求报文数量
    Writing: 1                 --- 当前服务正在处理用户HTTP请求报文数量
    Waiting: 4                 --- 等待处理请求数量
                                   异步网络模型 epoll 网络编程
                                   请求信息01 请求信息02 请求信息03  -- 队列机制 (内存)  -- 秒杀
                                                                  
06. nginx服务访问流量控制    (扩展,老师并未将)
    网站受到攻击,使网站压力过大
    方式一: 基于IP地址连接数进行控制  
    说明: 控制一个源IP地址只能建立1个连接
    
    http_limit_conn_module
    配置指令信息:
    Syntax:        limit_conn_zone key zone=name:size;
    Default:    —
    Context:    http
    
    key:   变量信息,在连接建立后,收集什么信息做控制管理
    · $remote_addr            变量的长度为7字节到15字节    存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
    · $binary_remote_addr    变量的长度是固定的4字节        存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。  
      1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
    zone:  定义共享存储空间
    · name: 存储空间的名称信息
    · size: 存储空间大小信息
    
    Syntax:        limit_conn zone number;
    Default:    —
    Context:    http, server, location
    
    zone:    调用响应的存储空间
    number:  限制存储空间源IP地址可以处理的数量
    
    配置样例:
    [root@web02 conf.d]# cat www.conf 
    limit_conn_zone $binary_remote_addr zone=oldboy:10m;
    server {
      listen        80;
      server_name   www.oldboy.com;
      root         /html/www;
      index        index.html;
      limit_conn oldboy 1;
    }

    
    方式二: 基于用户访问请求的频次
    http_limit_req_module
    配置指令信息:
    Syntax:        limit_req_zone key zone=name:size rate=rate [sync];
    Default:    —
    Context:    http    
    
    key:   变量信息,在连接建立后,收集什么信息做控制管理
    · $remote_addr            变量的长度为7字节到15字节    存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。
    · $binary_remote_addr    变量的长度是固定的4字节        存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。  
      1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。
    zone:  定义共享存储空间
    · name: 存储空间的名称信息
    · size: 存储空间大小信息    
    rate:  多个请求频次信息
    
    
    Syntax:        limit_req zone=name [burst=number] [nodelay];
    Default:    —
    Context:    http, server, location
    
    burst=number:   最大的请求阈值, 超过阈值请求都会进行控制    
    
    [root@web02 conf.d]# cat www.conf 
    limit_req_zone $binary_remote_addr zone=creq:10m rate=1r/s;
    server {
      listen        80;
      server_name   www.oldboy.com;
      root         /html/www;
      index        index.html;
      limit_req zone=creq burst=10;
    
    }

        
07. 网站服务日志信息说明
    cat /etc/nginx/ngng.conf
    错误日志:
    error_log  /var/log/nginx/error.log warn;
    debug     --- 调试级别    输出信息较多
    info      --- 信息级别
    notice    --- 通知级别
    warn      --- 警告级别    错误提示      *
    
    error     --- 错误级别                  *
    crit      --- 严重错误    
    alert     --- 极其严重
    emerg     --- 灾难级别    输出信息会更少 
    
    
    企业配置: 配置在不同网站server中(在不同的www bbs blog 中配置,可以给他们每个都配置日志)
    sever {
       error_log  /var/log/nginx/www_error.log warn;
    }
    
    
    cat /etc/nginx/ngng.conf
    访问日志:
    定义访问日志格式信息:
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
                      
    $remote_addr :   访问网站客户端源IP地址
    $remote_user :   记录认证用户名称信息
    [$time_local]:   访问网站时间信息
    $request     :   请求行信息
    $status      :   状态码
    $body_bytes_sent  :  资源信息传输消耗的网络流量
    $http_referer     :  调用网站资源域名信息
    $http_user_agent  :  客户端访问软件信息
    $http_x_forwarded_for  : ???  负载均衡
                      
    调用格式信息生成日志:
    access_log  /var/log/nginx/access.log  main;(已经生成的日志  可以自由改动)

    练习: 盗链练习:
    环境准备: 
    老男孩: 10.0.0.7  www.oldboy.com
    老女孩: 10.0.0.41 www.oldgirl.com
    
    盗链代码文件:
    <html>
    <head>
    <title>老女孩教育
    </title>
    </head>
    <body bgcolor=green>
    老女孩的网站!
    <img src="http://bbs.oldboy.com/oldboy.jpg">
    </body>
    </html>

  • 点赞
  • 收藏
  • 分享
  • 文章举报
天天气血缘 发布了14 篇原创文章 · 获赞 2 · 访问量 183 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: