nginx 基础

第1章 Nginx介绍

1.1 nginx软件概念介绍

是一个开源的,支持高性能、高并发的www服务器和代理服务软件

1.2 nginx服务软件特点说明或优势

01. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)

02. 资源消耗少:在3万并发连接下,开启10个nginx线程消耗的内存不到200MB

03. 可以做HTTP反向代理及加速缓存、即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或者LVS的功能

04. 具备Squid等专业缓存软件等的缓存功能

05. 支持异步网络I/O事件模型epoll(Linux 2.6+)

1.3 nginx功能特性

01. web服务软件

02. 反向代理负载均衡(nginx lvs happroxy)

03. nginx缓存服务(memcache redis mongodb)

 

第2章 Nginx Web服务应用

2.1 nginx软件企业应用情况

静态业务:若是高并发场景,尽量采用Nginx或Lighttpd,二者首选Nginx。

动态业务:理论上采用Nginx和Apache均可,建议选择Nginx,为了避免相同业务的服务软件多样化,增加额外维护成本。动态业务可以由Nginx兼做前端代理,再根据页面元素的类型或目录,转发到后端相应的服务器处理进程。---首选tomcat

既有静态业务又有动态业务:采用Nginx

利用nginx软件是无法处理动态业务请求,要让nginx结合php软件处理动态业务请求,在加上mysql

2.2 nginx软件的动态访问瓶颈

2.2.1   网站数据请求处理流程:

01. web静态服务软件:主要负责处理静态页面请求 3W

02. php动态程序解释器:主要负责处理动态页面请求

03. db数据库:存取数据信息(重要的瓶颈点)3000-5000

说明:了解了架构瓶颈问题,就需要响应优化的技术进行解决,后期会在优化课程中进行详细说明讲解

2.2.2 网站数据请求模型说明:

  epoll模型与select模型的区别说明(比喻说明)

  nginx依赖epoll模型

  apache依赖select模型

01. 例子-宿管大妈

select模型方式请求宿管大妈:带领你一个一个屋去找

   epoll模型方式请求宿管大妈: 记录名单册

02. 例子-幼儿园老师

select模型方式幼儿园老师:一个一个人问

epoll模型方式幼儿园老师:画个圈,自行进入圈中

2.3 nginx软件安装步骤

回顾软件安装方式:

 a  yum安装方式(解决软件依赖关系)

 b  二进制包方式安装软件

 c  编译安装软件(无法解决软件依赖关系,需要自行解决)

01. 检查软件安装的系统环境

[root@web01 ~]# cat /etc/redhat-release

CentOS release 6.9 (Final)

[root@web01 ~]# uname -r

2.6.32-696.el6.x86_64

   02.安装nginx的依赖包(pcre-devel  openssl-devel)---假设不进行安装

   yum install -y pcre-devel openssl-devel

 pcre:兼容perl语言正则表达式,perl compatible regular expressions
              rewirte
模块 参数信息(perl方式定义正则表达式)
 openssl
ssh---openssh/openssl---https
        
总结:所有安装依赖软件,后面都要加上-devel

软件编译安装步骤:

 a  软件解压配置(将软件程序安装到哪个目录中 开启nginx软件的哪些功能)

 b  软件编译过程

 c  软件编译安装过程

02. 下载nginx-1.10.2

mkdir -p /server/tools
   cd /server/toos
   wget -q http://nginx.org/download/nginx-1.10.2.tar.gz  #下载软件

03. 解压软件并进行配置

tar xf nginx-1.10.2.tar.gz

cd /server/tools/nginx-1.10.2

useradd -s /sbin/nologin -M www

./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module  --with-http_ssl_module

(编译参数说明后续补充说明)

--prefix: 表示指定软件安装到哪个目录中,指定目录不存在会自动创建

--user/--group: nginx工作进程由哪个用户运行管理

--with-http_stub_status_module:  启动nginx状态模块功能(用户访问nginx的网络信息)

--with-http_ssl_module:         启动https功能模块

04. 进行编译

make

05. 进行编译安装

make install

06. 为软件创建软链接文件

ln -s /application/nginx-1.10.2/ /application/nginx

07. 启动服务

/application/nginx/sbin/nginx

 

2.4 软件安装完目录信息

conf             --- 软件配置文件保存目录

        html             --- 网站站点目录*

        logs             --- 日志文件保存目录

        sbin             --- nginx命令保存目录

2.4.1 conf目录中内容:

        nginx.conf           --- nginx程序的主配置文件

        nginx.conf.default   --- nginx配置备份文件

2.5 对nginx主配置文件做精简化操作

egrep -v "#|^$" nginx.conf.default >nginx.conf

2.6 nginx软件使用过程中深入说明

    ①. nginx软件语法检查方法:

           nginx -t 

     ②. nginx软件访问测试过程:

           curl -v www.baidu.com

                      扩展说明:

           a. 304状态码的意义说明

           304状态码是浏览器缓存造成的,可以利用装包工具进行查看获取(抓包工具进行理解http访问过程)

              取消缓存的方式为:在浏览器设置中进行清除缓存;或者采用浏览器强制刷新功能进行浏览器缓存的刷新

           b. wireshark抓包软件使用说明

           启动软件---选择需要进行转包的网卡---开始进行抓包

           ③. nginx软件编译参数查看:

           nginx -V                 <--- 查看原有的编译参数信息

 

第3章 nginx软件的编译安装常见的错误的说明

 

3.1 nginx软件安装过程中遇到的问题  

          · 软件依赖包未正确安装问题---PCRE依赖包没有安装

          ./configure: error: the HTTP rewrite module requires the PCRE library.

          You can either disable the module by using --without-http_rewrite_module

          option, or install the PCRE library into the system, or build the PCRE library

          statically from the source with nginx by using --with-pcre=<path> option.

             解决方法:yum install pcre pcre-devel -y

            · 软件依赖包未正确安装问题---OPENSSL依赖包没有安装 

         ./configure: error: SSL modules require the OpenSSL library.

          You can either do not enable the modules, or install the OpenSSL library

          into the system, or build the OpenSSL library statically from the source

          with nginx by using --with-openssl=<path> option.

         解决方法:yum install openssl openssl-devel -y

3.2 nginx软件启动过程中遇到的问题    nginx软件重复启动产生的错误信息

          

          [root@web01 nginx-1.10.2]# /application/nginx/sbin/nginx

          nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

          nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

          nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

          nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

          nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

          nginx: [emerg] still could not bind()

          解决方法:nginx软件已经启动无需反复启动,如果需要重新启动需要停止nginx进程或者用reload方式进行重启

   

3.3 nginx软件编译安装后,看不到程序目录(/application)

        说明:编译安装步骤不对(配置 编译 编译安装生成/appliation)

 

 

 

3.4 nginx软件排查问题三部曲说明

         01. 在客户端上ping服务器端IP,检查链路是否通畅

          02. 在客户端上telnet服务器端IP、端口,检查链路访问是否通畅

         03. 在客户端上wget检测模拟页面访问是否正常

3.5 403状态码出现情况原因:

        01. 服务阻止客户端访问

        02. 服务端站点目录中,没有指定首页文件信息

第4章 nginx虚拟主机配置实践

4.1 虚拟主机的概念

   所谓虚拟主机,在Web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口);即一个server就是一个虚拟机

4.2 Nginx配置虚拟主机的步骤如下(适合各类虚拟主机类型):

1)增加一个完整的server 标签段到结尾处。注意,要放在http 的结束大括号前,也就是将
server 标签段放入http 标签。
2)更改server_name及对应网页的root根目录,如果需要其他参数,可以增加或修改。
3)创建server_name域名对应网页的根目录,并且建立测试文件,如果没有index 首页,访问会出现403错误。
4)检查Nginx配置文件语法,平滑重启Nginx服务,快速检查启动结果。
5)在客户端对server_name 处配置的域名做host 解析或DNS 配置,并检查(ping 域名看返回的IP是否正确)
6) 在Win32 浏览器中输入地址访问,或者在Linux 客户端做hosts 解析,用wget 或curl 接地址访问。
Nginx 虚拟主机的官方帮助网址为:http //Nginx org/en/docs/http/request_processing html

第6章 nginx状态模块信息说明

6.1 模块信息说明

 

参数信息

中文说明

Active connections

当前活动客户端连接数量包含Waiting连接数量

accepts

接收客户端连接的总数量

handled

处理连接的总数量
通常,这个参数值是和accepts值相同,除非已经到达一些资源限制
(例如:worker_connections连接数限制)

requests

客户端请求的总数

Reading

当前nginx正在读取请求头的连接数

Writing

当前nginx将响应写回客户机的连接数量

Waiting

当前空闲客户端连接等待请求的数量

 

6.2 nginx状态信息功能事件(stub_status_module)

01. nginx -V  ---查看编译参数中,是否加载了状态模块信息(--with-http_stub_status_module )

           配置nginx服务的状态模块信息

02. 修改配置文件 添加模块信息

cat nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

     server{

         listen  80;

         server_name  status.etiantian.org;

         location / {

         stub_status on;

         access_log   off;

       }

    }

 

   

    include extra/www.conf;

    include extra/bbs.conf;

    include extra/blog.conf;

}

第7章 日志

7.1 日志信息中个各数据说明

日志参数

参数说明

$remote_addr

直接访问客户端地址

$http_x_forwarded_for

间接访问客户端地址(一般前面会有代理服务器)

$remote_user

远程客户端用户名称

$time_local

记录访问时间与时区

$request

用户的请求,使用的http协议

$status

返回状态,200,404,304等

$body_bytes_sents

发送的body字节数

$http_referer

引用页(表示从哪个链接跳转访问过来的)

$http_user_agent

客户端浏览器信息

 

 

第8章 nginx rewrit

8.1 rewrit中的正则表达式

 

 

 

 

 

字符

描述

\

将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。

例如:“\n”匹配一个换行符,序列“\\" 和“\$”则匹配“$”

 

^

匹配输入字符串的起始位置,如果设置了RegExp 对象的Multiline 属性,

^也匹配“\n”或“r”之后的位置

$

匹配输入字符串的起始位置,如果设置了RegExp 对象的Multiline 属性,

$也匹配“\n”或“r”之前的位置

*

匹配前面的字符零次或多次,例如,ol*能匹配"o”及“oll”,*等价于{0.}

+

匹配前面的字符一次或多次,例如,"ol+" 能匹配“ol”及”oll"”,但不能匹配"o”,+ 等价于{1,}

 

?

匹配前面的字符零次或一次,例如,"do(es)?" 可以匹配"do”或"does" 中的“do”,.? 等价于{0,1}

当该字符紧跟任何一个其他限制符(*,+?,{n},{n},{n,m})的后面时,匹配模式是非贪婪模式的,非贪婪模式会尽可能少地匹配所搜索的字符串,而默认的贪婪模式则会尽可能多地匹配所搜索的字符串,例如,对于字符串'oooo","o+ ?" 将匹配单个“o”,而“o+" 将匹配所

有“o”

.

匹配除“\n" 之外的任何单个字符,要匹配包括“\n" 在内的任何字符,请使用像"{.\n}"这样的模式

{pattern}

匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0.$9 属性获取小括号中的匹配内容。要匹配圆括号字符,请使用“\(”或"\)”

8.2 rewrite 最后一项参数flag标记说明

flag标记符号

说明

last

本条规则匹配亮成后继续向下匹配斯的locationURL规则

break

本条规则匹配亮成即终止,不再匹配后面的任何规则

redirect

返回302临时重定向浏览器地址栏会显示跳转层的URL地址

permanent

返回301永久重定向浏览器地址栏会显示跳转层的URL地址

 

posted @ 2019-09-23 10:20  巴黎斜塔  阅读(167)  评论(0编辑  收藏  举报