澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

Linux实战教学笔记27,Web服务使用

前言:nginx的特点

本节主要对Nginx Web服务软件进行介绍,涉及Nginx的基础,特性,配置部署,优化,以及企业中的日常运维管理和应用。作为HTTP服务软件的后起之秀,Nginx与它的老大哥Apache相比有很多改进之处,比如,在性能上,Nginx占用的系统资源更少,能支持更多的并发连接(特别是静态小文件场景下),达到更高的访问效率;在功能上,Nginx不但是一个优秀的Web服务软件,还可以作为反向代理负载均衡及缓存服务使用;在安装配置上,Nginx更为方便,简单,灵活,可以说,Nginx是一个极具发展潜力的Web服务软件。

 

      Nginx(发音engine x)专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。如新浪,金山,网易,腾讯,百度文库,51cto,人人网等。

nginx服务部署 说明,nginx服务部署

第1章 常用的软件

Nginx是什么?

  • nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。
  • nginx因具有高并发(特别是静态资源),占用系统资源少等特性,且功能丰富而逐渐流行起来。
  • nginx不但是一个优秀Web服务软件,还具有反向代理负载均衡功能和缓存服务功能,与lvs负载均衡及Haproxy等专业代理软件相比,Nginx部署起来更为简单,方便;在缓存功能方面,它又类似于Squid等专业的缓存服务软件。

1.nginx介绍

网站 apache IIS lighttpd html
负载均衡 lvs haproxy
反向代理 squid varnish

1.1 常用来提供静态服务的软件

图片 1  Apache :这是中小型Web服务的主流,Web服务器中的老大哥,

图片 2  Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊,现已长大。

图片 3  Nginx 的分支 Tengine (

图片 4  Lighttpd :这是一个不溫不火的优秀 Web软件,社区不活跃,静态解析效率很高.在 Nginx 流行前,它是大并发静态业务的首选,国内百度贴吧、豆瓣等众多网站都有Lighttpd奋斗的身彩"  

Nginx的重要面试知识

1.1 nginx的特点

nginx的基本特性

  1. 对静态资源高速高并发访问及缓存
  2. 可使用反向代理加速,并且可进行数据缓存
  3. 具有简单负载均衡、节点健康检查和容错功能
  4. 支持远程FastCGI服务的缓存加速
  5. 支持FastCGI、Uwsgi、SCGI、Memcache Server的加速和缓存
  6. 支持SSL、TLS、SNI
  7. 具有模块化的架构:过滤器包括gzip压缩、rangs支持、chunked响应、XSLT、SSI及图像缩放等功能。在SSI过滤中,一个包含多个SSI的页面,如果经由FastCGI或反向代理,可被并行处理。

它所具备的其他www服务特性

  1. 支持基于名字、端口、ip的多虚拟主机站点
  2. 支持Keepalive和pipelined连接
  3. 可支持简单方便灵活的配置和管理
  4. 支持修改nginx配置,并在代码上线时,可平滑重启,不中断业务访问
  5. 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志
  6. 可利用信号控制nginx进程
  7. 支持3xx-5xxHTTP状态码重定向
  8. 支持rewrite模块,支持URI重写及正则表达式匹配
  9. 支持基于客户端ip地址和HTTP基本认证的访问控制
  10. 支持PUT、DELETE、MKCOL、COPY、MOVE等特殊的HTTP请求方法
  11. 支持FLV流和MP4流技术产品应用
  12. 支持HTTP响应速率限制
  13. 支持同一ip地址的并发连接或请求数限制
  14. 支持邮件服务代理

面试时可能需要解答如下nginxHTTP服务器的特色及优点

  1. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
  2. 资源消耗少:在3万并发连接下,开启10个nginx线程消耗的内存不到200MB
  3. 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS的功能
  4. 具备Squid等专业缓存软件等的缓存功能
  5. 支持异步网络I/O时间模型epoll

apache软件的特点

  1. Apache2.2版本非常稳定强大,性能好。
  2. prefork模式取消了进程开销
  3. 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在Apache上
  4. 高并发时消耗资源相对多一些
  5. 基于传统的select模型,高并发能力有限
  6. 支持扩展库,可以通过DSO、apxs方法编译安装额外的插件功能,不需要重新编译Apache
  7. 功能多,更稳定,更安全,插件也多
  8. 市场份额逐渐递减

 

1.2 常用来提供动态服务的软件

图片 5  PHP ( FastCGI ):大中小型网站都会使用,动态网页语言PHP程序的解析容器。它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程横式,而是mod_php5.so ( module)也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务。

图片 6  Tomcat :中小企业动态Web服务主流,互联网Java容器主流(如jsp、do )

图片 7  Resin :大型动态Web服务主流,互联网Java容器主流(如jsp、do )

图片 8  IIS ( Internet information services ):微软 windows 下的 Web 服务软件(如 asp、aspx )

Nginx的重要特性

  • 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
  • 资源消耗少:在3万并发连接下,开启10哥Nginx线程消耗的内存不到200MB
  • 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS的功能
  • 具备Squid等专业缓存软件等的缓存功能。
  • 支持异步网络I/O事件模型epoll(linux2.6 )。

1.2 nginx和其他web对比(epoll和select)

  处理静态小文件(小于1Mb),nginx比Apache和Lighttpd更有优势,处理动态文件时Apache更有优势,但是差距不大。这是因为处理动态数据的能力取决于PHP(java)和后端数据库的服务能力,也就是说瓶颈不在web服务器上,一般情况下普通的PHP引擎支持的并发连接参考值为300~1000,java引擎和数据库的并发连接参考值为300~1500。

为什么nginx总体性能比Apache高

        nginx使用最新的epoll和kqueue(freebsb)异步网络I/O模型,而Apache使用的是传统的select模型

       异步的安全性、稳定性没有同步高,中间容易被人窃取,用户收不到数据

select和epoll的释义:

  select模型就像保姆照看一群孩子,会询问每个孩子是否要尿尿,有就带领去(尿尿比作网络I/O时间,时间复杂度是O(n))

       epoll就是孩子要尿尿,自己主动去规定好的地方,然后保姆带领去,这样保姆只需要关心那个地方有没有孩子 (时间复杂度O(1))

指标

select

epoll

性能

随着连接数的增加而急剧下降。处理成千上万的并发连接数时,性能很差。

随着连接数的增加,性能基本没有下降,处理成千上万的并发连接数时,性能好

连接数

连接数 有限制,处理最大连接数不超过1024.如果超过1024那么就要修改FD_SETSIZE宏,并重新编译。

连接数无限制

内在处理机制

性能轮询

回调callback

开发复杂性

表1   Apache select和nginx epoll技术对比

apache select
nginx epoll

第2章 nginx 软件

Nginx软件的主要企业功能应用

(1)作为Web服务软件

Nginx是一个支持高性能,高并发的Web服务软件,它具有很多优秀的特性,作为Web服务器,与Apache相比,Nginx能够支持更多的并发连接访问,但占用的资源更少,效率更高,在功能上也强大了很多,几乎不逊色于Apache。

(2)反向代理或负载均衡服务

在反向代理或负载均衡服务方面,Nginx可以作为Web服务,PHP等动态服务及Memcached缓存的代理服务器,它具有类似专业反向代理软件(如Haproxy)的功能,同时也是一个优秀的邮件代理服务软件,但是Nginx的代理功能还是相对简单了些,特别是不支持TCP的代理(Nginx1.9.0版本已经开始支持TCP代理了)

(3)前端业务数据缓存服务

在Web缓存服务方面,Nginx可通过自身的proxy_cache模块实现类Squid等专业缓存软件的功能。

综上:Nginx的这三大功能(Web服务,反向代理或负载均衡服务,前端业务数据缓存服务)是国内使用Nginx的主要场景,特别是前两个。

1.3 如何选择web

静态业务:

  若是高并发场景,尽量采用nginx或Lighttpd,首选nginx

动态业务:

  理论上采用nginx和Apache均可,为了避免相同业务服务软件多样化,增加维护成本

既有动态又有静态:

  选用nginx

 

2.1 软件介绍

如果你听说或使用过 Apache软件,那么很快就会熟悉 Nginx软件,与 Apache软件类似, Nginx ( “engme x")是一个开源的,支持高性能、高并发的 WWW服务器和代理服务软件。它是由俄罗斯人 Igor Sysoev开发的,最初被应用在勘罗斯的大型网站 www.rambler.ru 上,后来作者将源代码以类BSD许可证的形式开源出来供全球使用。

Nginx因具有高并发(特别是静态资源)占用系统资源少等特性,且功能丰富而逐渐流行起来。

在功能应用发面,Nginx不但是一个优秀的Web服务软件,还具有反向代理负载均衡功能和缓存服务功能。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS负载均衡及Haproxy等专业代理软件,但是Nginx部署起来更为简单、方便;在缓存服务功能方面,它又类似于Squid等专业的缓存服务软件。

Nginx 可以运行在 UNIX、Linux、BSD、Mac 0S X、Solaris,以及 Microsoft Windows 等操作系统中。随着Nginx在国内很多大型网站中的稳定高效运行,近两年它也逐渐被越来越多的中小型网站所使用。当前流行的Nginx Web组合被称为LNMP或LEMP(即Linux Nginx MySQL PHP),其中 LNMP 里的 N 取自Nginx ( "engine x" )

Nginx 的官方介绍见

 

Web 服务产品性能对比测试

从下图中可以看出处理静态小文件(小于1MB时),Nginx和Lighttpd比Apache更有优势,Nginx处理小文件的优势明显,Lighttpd综合最强。

图片 9

下图是各类Web服务器在动态数据性能上的对比,从图中可以看出,在处理动态数据时,三者的差距不大,Apache更有优势一点。这是因为处理动态数据的能力取决于PHP(java)和后端数据库的服务能力,也就是说瓶颈不在Web服务器上。一般情况下普通PHP引擎支持的并发连接参考值为300~1000,Java引擎和数据库的并发连接参考值为300~1500.业务场景及网站架构不同,并发连接数也会有上下浮动。

图片 10

2.安装nginx

安装nginx有3种方法:

  1. rpm –ivh ngin*.rpm(有依赖问题)
  2. yum(自动解决rpm的安装依赖问题,安装简单化,缺点:不能定制)
  3. make编译安装(./configure(配置),make(编译),make install(安装),缺点:复杂,效率低)

 

更换国内的yum源

 

网站应用统计站点:

2.2 NGINX 软件特性

为什么Nginx总体性能比Apache高?

  • Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid,Memcached软件采用的都是epoll模型。
  • 处理大量连接的读写时,Apache所采用的select网络I/O模型比较低效。

图片 11

图片 12

  CentOS 5

 

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

 

Nginx官方站点:
淘宝Tengine:

2.2.1 HTTP服务器的特色及优点:

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

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

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

u  具备Squid等专业缓存软件等的缓存功能。

u  支持异步网络I/O事件横型epoll(Linux2.6 )

如何正确选择Web服务器

虽然国内很多人都在使用Nginx,但是Apache,Lighttpd这两个Web服务器同样非常强大且实用,尤其时Apache,到目前为止仍是全球使用最广泛的Web服务软件。
在实际工作,我们需要根据业务需求来选择合适的业务服务软件,有关Web服务,建议如下。

  • 静态业务:若是高并发场景,尽量采用Nginx或Lighttpd,二者首选Nginx。
  • 动态业务:理论上采用Nginx和Apache均可,建议选择Nginx,为了避免相同业务的服务软件多样化,增加额外维护成本。动态业务可以由Nginx兼做前端代理,再根据页面元素的类型或目录,转发到后端相应的服务器进行处理。
  • 既有静态业务又有动态业务:采用Nginx

此外,如果并发不是很大,又对Apache很熟悉,采用Apache也是可以的,Apache2.4版本也很强大,并发连接数也有所增加。总的来说,在满足需求的前提下,首先选择自己最擅长的软件,若发现了更好的软件,可在掌握新软件之后逐步替换。虽然动态和静态业务都倾向于选择Nginx,但是大前提是自己要熟练掌握Nginx。切记,在工作中不要盲目选择软件,这可能最终会导致自己无法控制局面,从而给企业带来灾难性的损失。

  CentOS 6

 

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

 

2.2.2 nginx功能特性

Ø  web网站服务

Ø  反向代理负载均衡(nginx /lvs /haproxy)

Ø  nginx缓存服务(memcache /redis /mongodb)

1,nginx的编译安装部署

yum install -y pcre-devel openssl-devel         #用本地yum仓库安装依赖包
#wget -q http://nginx.org/download/nginx-1.10.2.tar.gz     #下载软件源码包
useradd -s /sbin/nologin -M www     #创建程序用户
tar xf nginx-1.10.2.tar.gz -C /usr/src/     #解压缩
cd /usr/src/nginx-1.10.2
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module       #预配置
make && make install        #编译和安装
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/  #给命令做软连接,以便PATH能找到
/usr/local/nginx/sbin/nginx #启动nginx

特别提示:
/usr/local/nginx/sbin/nginx -s reload nginx平滑重启命令
/usr/local/nginx/sbin/nginx -s stop nginx停止服务命令

  CentOS 7

 

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

 

安装阿里云的epol源

1、备份(如有配置其他epel源)

  mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

  mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

2、下载新repo 到/etc/yum.repos.d/

  epel(RHEL 7)

    wget -O /etc/yum.repos.d/epel.repo

  epel(RHEL 6)

    wget -O /etc/yum.repos.d/epel.repo

  epel(RHEL 5)

    wget -O /etc/yum.repos.d/epel.repo

 

配置安装nginx的yum源

cd /etc/yum.repos.d/

vim nginx.repo,填写如下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

 

最新的稳定版:1.6.2
最新的开发板:1.7.9

2.3 nginx软件的企业功能应用

业务类型

应用方案

静态业务

若是高并发场景,尽量采用Nginx或Lighttpd,二者首选Nginx

动态业务

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

---首选tomcat

既有静态业务又有动态业务

采用Nginx

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

1.1 web排错三部曲下面介绍客户端排查的思路

第一步,在客户端上ping服务器端IP,命令如下:

ping 10.0.0.8排除物理线路问题影响

第二步,在客户端上telnet服务器端IP,端口,命令如下:

telnet 10.0.0.8 80排除防火墙等得影响

第三步,在客户端使用wget命令检测,如下:

wget 10.0.0.8(curl -I 10.0.0.8)模拟用户访问,排除http服务自身问题,根据输出在排错

提示:
以上三步是客户端访问网站异常排查的重要三部曲。

2.1 编译安装步骤

1.安装nginx需要的pcre库

yum install pcre pcre-devel -y

安装pcre库是为了是nginx支持具备URI重写功能的rewrite模块,不安装那就无法使用rewrite模块的功能。基本上rewrite功能是企业必须的。

  1. 安装openssl-devel

    [root@web01 nginx]#yum -y install openssl openssl-devel

  2. 开始安装nginx

    [root@web01 nginx]#wget [root@web01 nginx]#tar xf nginx-1.6.3.tar.gz [root@web01 nginx]#useradd nginx -M -s /sbin/nologin [root@web01 nginx]#cd nginx-1.6.3 [root@web01 nginx]#./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module [root@web01 nginx]#make [root@web01 nginx]#make install [root@web01 nginx]#ls /application/nginx-1.6.3/ conf html logs sbin [root@web01 nginx]#ln -s /application/nginx-1.6.3/ /application/nginx [root@web01 nginx]#/application/nginx/sbin/nginx

wget

2.4 nginx软件的动态访问瓶颈

2,Nginx主配置文件nginx.conf

Nginx主配置文件nginx.conf是一个纯文本类型的文件(其他配置文件大多也是如此),它位于Nginx安装目录下的conf目录,整个配置文件是以区块的形式组织的。一般,每个区块以一个大括号“{}”来表示,区块可以分为几个层次,整个配置文件中Main区位于最上层,在Main区下面可以有Events区,HTTP区等层级,在HTTP区中又包含有一个或多个Server区,每个Server区中又可有一个或多个location区,整个Nginx配置文件nginx.conf的主体框架为:

[root@chensiqi conf]# egrep -v "#|^$" nginx.conf #去掉包含#号和空行的内容
worker_processes  1; #worker进程的数量
error_log  logs/error.log;  #错误日志(默认没开)
pid        logs/nginx.pid;  #进程号(默认没开)
events {    #事件区块开始
    worker_connections  1024;   #每个worker进程支持的最大连接数
}           #事件区块结束
http {      #http区块开始
    include       mime.types;   #Nginx支持的媒体类型库文件包含
    default_type  application/octet-stream; #默认的媒体类型
    sendfile        on;     #开启高效传输模式
    keepalive_timeout  65;  #连接超时。
    server {      #网站配置区域(第一个server第一个虚拟主机站点)
        listen       80;    #提供服务的端口,默认80
        server_name  www.chensiqi.org; #提供服务的域名主机名
        location / {    #第一个Location区块开始
            root   html;  #站点的根目录(相对于nginx安装路径)
            index  index.html index.htm; #默认的首页文件,多个用空格分开
        }
        error_page 500 502 503 504  /50x.html;  #出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html {  #Location区块开始,访问50x.html
            root   html;     #指定对应的站点目录为html
        }
    }
    server {      #网站配置区域(第二个server第二个虚拟主机站点)
        listen       80;    #提供服务的端口,默认80
        server_name  bbs.chensiqi.org; #提供服务的域名主机名
        location / {    #服务区块
            root   html;  #相对路径(nginx安装路径)
            index  index.html index.htm;
        }
        location = /50x.html { #发生错误访问的页面
            root   html;
        }
    }
}

整个nginx配置文件的核心框架如下:

worker_processes 1;
events {

    worker_connections 1024;

}
http {
    include mime.types;
    server {
        listen  80;
        server_name localhost;
        location / {
            root  html;
            index  index.html index.htm;
        }
    }
}

2.2 验证安装结果

  1. 检查语法

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

  2. 启动nginx服务

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

  3. 查看服务对应的端口是否成功开启

    [root@web01 nginx]#netstat -tunlp|grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7377/nginx

    [root@web01 nginx]# ps -ef|grep nginx root 7377 1 0 17:38 ? 00:00:00 nginx: master process www 7378 7377 0 17:38 ? 00:00:00 nginx: worker process /application/nginx/sbin/nginx root 7382 4710 0 17:39 pts/0 00:00:00 grep nginx

    [root@web01 nginx]# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 7377 root 6u IPv4 22767 0t0 TCP :http (LISTEN) nginx 7378 www 6u IPv4 22767 0t0 TCP :http (LISTEN)

  4. 结果

(1)用浏览器输入10.0.0.8看到下图就成功了

  图片 13

(2)wget 10.0.0.8

(3)curl -I

补充

/application/nginx/sbin/nginx -V        #显示编译参数

/application/nginx/sbin/nginx -h        #man帮助

/application/nginx/sbin/nginx -t         #检查语法

编译安装目录结构

[root@localhost ~]# tree /application/nginx-1.6.3/

/usr/local/nginx
├── client_body_temp
├── conf                                  # Nginx所有配置文件的目录
│   ├── fastcgi.conf                      # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default                 # fastcgi.conf的原始备份文件
│   ├── fastcgi_params                     # fastcgi的参数文件
│   ├── fastcgi_params.default              # 所有结尾为default的文件都是备份文件
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                        # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                        # Nginx主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params                        # scgi相关参数文件
│   ├── scgi_params.default 
│   ├── uwsgi_params                     # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                         # fastcgi临时数据目录
├── html                                    # Nginx默认站点目录
│   ├── 50x.html              #错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│   └── index.html                           # 默认的首页文件
├── logs                                      # Nginx日志目录
│   ├── access.log                          # 访问日志文件
│   ├── error.log                          # 错误日志文件
│   └── nginx.pid               # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                            # 临时目录
├── sbin                                    # Nginx命令目录
│   └── nginx                               # Nginx的启动命令
├── scgi_temp                             # 临时目录
└── uwsgi_temp                          # 临时目录

yum安装的nginx的目录结构:
[root@10.0.0.20 ~]#rpm -qa nginx
nginx-1.12.2-1.el6.ngx.x86_64
[root@10.0.0.20 ~]#rpm -ql nginx-1.12.2-1.el6.ngx.x86_64

 

2.4.1 与其他软件的对比

先来看看Apache软件的特点,如下

²  Apache2.2版本非常稳定强大,据官方说,Apache2.4版本性能更强。

²  Prefork模式取消了进程创建开销,性能很高。

²  处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在Apache上。

²  高并发时消耗系统资源相对多一些。

²  基于传统的select模型,高并发能力有限。

²  支持扩展库,可通过DSO、apxs方法编译安装额外的插件功能,不需要重新编译Apache

²  功能多,更稳定,更安全,插件也多。

²  市场份额在逐年递减

 

再来看看Nginx软件的特点,如下:

n  基于异步网结I/O模 型(epollk kqueue)

n  具备支持高性能,高并发的特性,并发连接可达数万。

n  对小文件(小于1 MB的静态文件)高并发支持很好,性能很高

n  不支持类似 Apache的DSO模式、扩展库必须编译进主程序(缺点)

n  进程占用系统资源比较低。

n  支持Web、反向Proxy、Cache三大重点功能,幷且都很优秀。

n  市场份额在逐年快速增加。

 

最后是Lighttpd的特点,如下:

²  基于异步网络 I/ O模型,性能、并发都与 Nginx相近。

²  扩展库是 SO模式,比Nginx灵活

²  目前国内的使用率比较低,安全性没有 Apache和Nginx好。

²  通过插件(mod_secdownload)可实现文件 URL地址加密(优点)

²  社区不活跃,市场份额较低,

 

3,Nginx其他配置文件

  • 如果是配合动态服务(例如PHP服务),Nginx软件还会用到扩展的fastcgi相关配置文件,这个配置是通过在Nginx.conf主配置文件中嵌入include命令来实现的,不过默认情况是注释状态,不会生效。

  • fastcgi.conf配置文件的初始内容如下:

[root@localhost conf]# cat fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
  • fastcgi_params 默认配置文件的内容如下:
[root@localhost conf]# cat fastcgi_params

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

上述未做注释的目录或文件是比较少用的,有关动态扩展配置后文讲到PHP服务时再来讲解。

2.3 编译安装nginx参数

编译安装nginx软件时。可以使用./configure--help查看相关参数帮助。

­--prefix                                         #设置安装路径

--user=USER                              #进程用户权限

--group=GROUP                         #进程用户组权限

--with-http_stub_status_module      #激活状态信息

--with-http_ssl_module                    #激活ssl功能

 

1)安装支持软件:
Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。

2.4.2 最主要的区别(select & epoll)

NGINX 使用的是epoll 和Kqueue 异步网络I/O模型,而apache使用的是传统的select模型

比喻:

第一个比喻:

假设你在大学读书,住的宿舍楼有很多房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友到各房间挨个去找,直到找到你为止。而epoll版宿管大妈会先记下每位入住同学的房间号,你的朋友来找你时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满宿舍楼找人了。如果同时来了100个人,都要找自己住这栋楼的同学,select版和epoll版宿管大妈,谁的效率更高,就很明显了。

第二个比喻:

select的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看照看一群孩子,如果把孩子是否需要尿尿比作网络I/O事件,select的作用就好比这个保姆挨个询问每个孩子"你要尿尿吗?”如果孩子回答是,保姆则把孩子领出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络I/O事件).在epoll机制下,保姆不再需要挨个询问每个孩子是否需要尿尿。取而代之的是,如果孩子需要尿尿,他就自己主动站到事先约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去上厕所(网络事件处理)。因此,epoll的这种机制,能够高效地处理成千上万的并发连接,并且性能不会随着连接数増加而下降太多。

4,Nginx的功能模块说明

图片 14

2.4 Nginx http功能模块

Nginx http 功能模块                模块说明

ngx_http_core_module              包括一些核心的http参数配置对应的配置为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基本访问状态信息等的模块

 

2.4.3 apache select和nginx epoll技术对比图

指标

select

epoll

性能

随着连接数的增加性能急剧下降。处理成千上万的并发连接数,性能很差

随着连接数的增加,性能基本上没有下降。处理成千上万连接时性能很好

连接数

连接数有限制,处理的最大连接数不超过1024,如果要处理的连接数超过1024个,则需要修改FD_SETSIZE宏,并重新编译

连接数无限制

内在处理机制

线性轮询

回调callback

开发复杂性

5,Nginx虚拟主机配置实战

2.5 nginx.conf

[root@web01 conf]# egrep -v '#|^$' nginx.conf

worker_processes  1;                               #work进程的数量
events {                                            #事件区块开始
    worker_connections  1024;                          #每个worker进程支持的最大连接数
}                                                     #事件区块结束
http {                                             #http区块开始
    include       mime.types;                   #nginx支持的媒体类型库文件
    default_type  application/octet-stream;     #默认的媒体类型
    sendfile        on;                            #开启高效的传输模式
    keepalive_timeout  65;                      #连接超时
 include  path/*.conf;                          #如果server标签过多可以摘出去,到任何路径下

    server {                                #第一个server区块开始,表示一个独立的虚拟主机站点
        listen       80;                           #提供服务的端口,默认是80
        server_name  localhost;                     #提供服务的域名主机名
        location / {                                #第一个location区块开始
            root   html;                         #站点的根目录,相当于nginx安装目录
            index  index.html index.htm;         #默认的首页文件,如果没有首页文件报403,报403的除了添加首页文件的另一个解决方法,在这放置autoindex on
        }                                         #第一个location区块结束
        error_page   500 502 503 504  /50x.html;   #出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html {                   #location区块开始,访问50x.html
            root   html;                           #指定站点目录html
        }
    }
}                                                 #http区块结束

 

[root@nginx ~]# service iptables stop
[root@nginx ~]# setenforce 0
[root@nginx ~]# service httpd stop
[root@nginx ~]# yum -y install pcre-devel zlib-devel

第3章 nginx的安装与使用

5.1 虚拟主机概念和类型介绍

3. nginx虚拟主机配置

 

3.1 nginx软件的编译安装步骤

5.1.1 虚拟主机概念

所谓虚拟主机,在Web服务里就是一个独立的网站站点(www.baidu.org),这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。
这个独立的站点在配置里是由一定格式的标签段标记,对于Apache软件来说,一个虚拟主机的标签段通常被包含在

3.1 虚拟主机的概念

  所谓的虚拟主机,在web访问里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序和目资源录,可以独立的对外提供服务供用户访问。

  这个独立的站点在配置里由一定的格式的标签段标记的。在nginx软件里是使用一个server{}标签来标识一个虚拟主机,一个web服务里可以有多个虚拟主机,即可以支持多个虚拟主机站点。

2)创建运行用户、组:
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。

3.1.1 检查软件安装的系统环境

[[email protected] ~]# cat /etc/redhat-release

CentOS release 6.9 (Final)

[[email protected] ~]# uname -r

2.6.32-696.el6.x86_64

5.1.2 虚拟主机类型

常见的虚拟主机类型有如下几种。

  • 基于域名的虚拟主机

所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站都是使用基于域名的虚拟主机,例如:www.etiantian.org

  • 基于端口的虚拟主机

同理,所谓基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要为公司内部的网站,例如:一些不希望直接对外提供用户访问的网站后台等,访问基于端口的虚拟主机地址里要带有端口,例如:

  • 基于IP的虚拟主机

同理,所谓基于IP的虚拟主机,意思就是通过不同的IP区分不同的虚拟主机,此类虚拟主机对应的企业应用非常少见,一般不同业务需要使用多IP的场景都会在负载均衡器上进行VIP绑定,而不是在Web上通过绑定IP区分不同的虚拟机。
三种虚拟主机类型均可独立使用,也可以互相混合一起使用,同学们应把基于域名的虚拟主机类型当作重点来学习掌握,其他的两个类型了解即可。

3.2 虚拟主机类型

[root@nginx ~]# useradd -M -s /sbin/nologin nginx

3.1.2 安装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

5.2 基于域名的虚拟主机配置实战

说明:本节内容再生产场景中是最常用到的,因此,同学们要优先并且熟练掌握。

3.2.1 域名(应用层)

企业外网场景,通过不同的域名区分不同的虚拟主机,企业应用最广的类型

1.配置基于域名的nginx.conf内容

[root@web01 conf]# egrep -v '#|^$' nginx.conf.default >nginx.conf

[root@web01 conf]# 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  www.etiantian.org;
        location / {
            root   html;             
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

2.创建域名对应的站点目录即文件

mkdir -p /application/nginx/html/www -p
echo http://www.etiantian.org >/application/nginx/html/www/index.html

3.检查语法重新加载

/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx -s reload

4.最后测试配置的访问结果

echo “10.0.0.8 www.etiantian.org” >>/etc/hosts

注意:

  在windows客户端进行访问,如果域名没有做正是DNS解析,可在笔记本的hosts文件添加记录

 

3.1.3 下载nginx软件

wget

说明:软件很小,用心查看一下

解压软件

tar xf nginx-1.10.2.tar.gz

5.2.1 配置基于域名的nginx.conf内容

这里使用grep过滤命令来生成基础的Nginx主配置文件nginx.conf,然后根据生成的初始配置进行修改,使其成为所需的形式,具体步骤为:

[root@localhost conf]# pwd
/application/nginx/conf
[root@localhost conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf

或者干脆直接新创建配置文件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  localhost;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }
}

编辑完配置文件后,我们需要检查语法

[root@localhost conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2//conf/nginx.conf test is successful

然后由于web的存放路径是相对路径,因此我们需要创建个目录,

图片 15

[root@localhost html]# cd /application/nginx/html/
[root@localhost html]# ls
50x.html  index.html            #原本的网页文件
[root@localhost html]# mkdir www   #创建一个目录叫做www
[root@localhost html]# echo "I am www" > www/index.html  #写入网页文件
[root@localhost html]# cat www/index.html   #查看一下
I am www
[root@localhost html]# curl 192.168.0.100  #测试链接
I am www

接下来,我们再创建一个域名的网站,配置文件如下

图片 16
注意:修改配置文件需要重启动nginx

给第二个网站添加网页文件

[root@localhost html]# ls
50x.html  index.html  www
[root@localhost html]# mkdir bbs
[root@localhost html]# echo "I am bbs" > bbs/index.html

通过测试,我们发现,永远都只能看到第一个网站

[root@localhost html]# curl 192.168.0.100
I am www
[root@localhost html]# curl 192.168.0.100
I am www
[root@localhost html]# curl 192.168.0.100
I am www
[root@localhost html]# curl 192.168.0.100
I am www

这是因为通过IP地址来访问的话,nginx并不知道你想要访问哪个站点,因此,他默认你是要访问他配置文件里的第一个站点,也就是www.chensiqi.com
通过修改hosts映射我们可以访问不同的站点。

修改hosts映射文件

[root@localhost html]# echo "192.168.0.100 www.chensiqi.com bbs.chensiqi.com" >> /etc/hosts
[root@localhost html]# tail -1 /etc/hosts
192.168.0.100 www.chensiqi.com bbs.chensiqi.com

现在我们再进行访问测试

[root@localhost html]# curl www.chensiqi.com
I am www
[root@localhost html]# curl www.chensiqi.com
I am www
[root@localhost html]# curl bbs.chensiqi.com
I am bbs
[root@localhost html]# curl bbs.chensiqi.com
I am bbs

如上所示:基于域名的虚拟主机配置完毕。我们在工作中遇到的基本都是这种类型的网站。配置过程需要重点练习。其他类型,了解即可。

3.2.2 端口(传输层)

  公司后台,测试场景,内部服务

  这类虚拟主机主要是针对企业内部网站,一些不希望直接对外提供用户访问的网站后台

注意:

  一般是先判断端口号,然后判断域名,如果端口对应上了,域名没有找见默认去找这个端口下的第一台主机(也就是第一个server标签)

[root@web01 conf]# 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  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
   }
    server {
        listen       81;
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
   }
    server {
        listen       82;
        server_name  blog.etiantian.org;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
   }
}

检查

重启

访问

3)编译安装nginx:
释放nginx源码包

3.1.4 创建管理用户 www

useradd -M -s /sbin/nologin www

 

6 Nginx常用功能配置实战

3.2.3 IP(网络层)

网卡上增加IP

法一:

ip addr add 10.0.0.3/24 dev eth0 label eth0:3
ip addr add 10.0.0.4/24 dev eth0 label eth0:4

法二:

ifconfig eth0:0 10.0.0.101/24 up

查看结果:

[root@web01 conf]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:98:47:1B 
          inet addr:10.0.0.8  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe98:471b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5611 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3963 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2142583 (2.0 MiB)  TX bytes:579494 (565.9 KiB)
eth0:3    Link encap:Ethernet  HWaddr 00:0C:29:98:47:1B 
          inet addr:10.0.0.3  Bcast:0.0.0.0  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
eth0:4    Link encap:Ethernet  HWaddr 00:0C:29:98:47:1B 
          inet addr:10.0.0.4  Bcast:0.0.0.0  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

[root@web01 conf]# cat nginx.conf.base_port

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       10.0.0.8:80;
        server_name  www.etiantian.org;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
   }
    server {
        listen       10.0.0.3:81;
        server_name  bbs.etiantian.org;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
   }
    server {
        listen       10.0.0.4:82;
        server_name  blog.etiantian.org;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
   }
}

图片 17图片 18

3.1.5  nginx软件编译安装过程

6.1 规范化Nginx配置文件

下面是优化后的Nginx配置的实战方案

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extra/www.conf;   #虚拟网站配置信息统一放在了当前的extra目录下
    include extra/mail.conf;
    include extra/status.conf;

}

[root@localhost nginx]# tree conf/extra/
conf/extra/
├── mail.conf
├── status.conf
└── www.conf

0 directories, 3 files
[root@localhost nginx]# cat conf/extra/www.conf 
    server {
        listen       80;
        server_name  www.yunjisuan.com;
        location / {
            root   /var/www/html/wwwcom;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www/html;
        }
    }

3.3 nginx状态信息功能

也就是新添加一个server标签打开stub_status on;,编译安装nginx的时候的参数--with-http_stub_status_module

[root@web01 extra]# cat extra/status.conf
    server {
        listen       80;
        server_name  status.etiantian.org;
        location / {
          stub_status on;
          access_log off;
        }
    }

检查语法,重启服务,配置hosts解析

 图片 19

第一个server表示nginx启动到现在共处理了多少个连接;

第二个accepts表示启动到现在共成功创建了多少多少次握手

第三个handled requests表示处理了多少次请求

reading为nginx读取到客户端的header信息数

writing为nginx返回给客户端的header信息数

waiting为nginx已经处理完正在等候下一次请求指令的驻留连接

[root@nginx ~]# tar xf nginx-1.6.2.tar.gz -C /usr/src/

3.1.5.1  注意

软件编译安装步骤

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

b>软件编译过程

c>软件编译安装过程

   注意顺序,顺序不对软件安装会出错

6.2 Nginx状态信息功能实战

3.4 nginx访问日志

查看命令

3.1.5.2  编译安装软件

1、配置软件,在软件的解压目录中

[[email protected] nginx-1.10.2]# ./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功能模块

通过软件编译过程中的返回值是否正确,确认配置是否正确

[[email protected] nginx-1.10.2]# echo $?

0

   2、编译软件

[[email protected] nginx-1.10.2]# make

   3、编译安装

[[email protected] nginx-1.10.2]# make install

6.2.1 确认编译时是否设定了此模块

root@localhost nginx]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.10.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx-1.10.2/ --with-http_stub_status_module --with-http_ssl_module

##说明
--with-http_stub_status_module模块就是状态信息模块

3.4.1 日志配置

[root@web01 conf]# cat >>/xxx/xxx/nginx/conf/extra/02_blog.conf<<EOF
    server {
        listen       80;
        server_name  blog.etiantian.org;
        location / {
            root   html/blog;
            index  index.html index.htm;
        }
        access_log  logs/access.log  [format buffer=size [flush=time]]  main;
   }
EOF

注意

       1. 这行配置中的main是http标签中配置的log_format后面的main对应的格式,可以多个格式,方便使用.

       2. 配置行的[]括号内的选项是可选的,配置缓存,防止高并发的大量IO

       3. format gzip[=level]

错误日志级别

default:error_log     logs/error.log      level;

         关键配置     日志文件             错误日志级别[debug|info|warn|error|alert|notice|crit|emerg]

生产场景一般用warn|error|crit三个级别

标签端的配置

  main,http,server,location

 

3.1.6 创建软连接

[[email protected] application]# ln -s /application/nginx-1.10.2/ /application/nginx

6.2.2 设定信息模块配置

[root@localhost nginx]# cat conf/extra/status.conf 
##status


server{

    listen  80;
    server_name  status.yunjisuan.com;
    location / {
       stub_status  on;   #开启状态信息功能
           access_log   off;  #不记录访问日志

         }
}  

##说明
状态信息模块配置方式和搭建虚拟网站类似需要占用一个域名来访问

注意:需要重启Nginx服务

3.4.2 nginx日志变量说明

日志格式

http {
    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  logs/access.log main;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include  extra/*.conf;
}

 

nginx日志变量

说明

$remote_addr

记录访问网站客户端地址

$remote_user

远程客户端用户名称

$time_local

访问时间和时区

$request

用户的http请求的起始行信息

$status

http状态码,记录请求返回的状态

$body_bytes_sent

服务器发送给客户端的响应body字节数

$http_referer

此链接是从哪个连接访问过来的

$http_user_agent

记录客户端的访问信息

$http_x_forwarded_for

当前有代理服务器时,设置了web节点机理客户端地址的配置

例:

 图片 20

$remote_addr                 对应的10.0.0.20,客户端的IP

$remote_user                 对应的是第二个中杠,没有远程用户用-填充

$time_local                     对应的时间

$request                         对应的是GET/HTTP/1.0

$status304                     状态码

$body_bytes_sent          对应的是0

$http_referer                  这里是-,直接打开的域名浏览,所以没有值

$http_user_agent           那一长串的东西

$http_x_forwarded_for   这里是10.0.0.1

 

3.1.7 精简化nginx.conf 主配置文件内容

[[email protected] conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf

6.2.3 Nginx status显示结果详解

[root@localhost nginx]# curl status.yunjisuan.com
Active connections: 2 #表示Nginx正在处理的活动连接2个
server accepts handled requests
 39 39 41 
Reading: 0 Writing: 1 Waiting: 1 

第一个server表示Nginx启动到现在2共处理了39个连接
第二个accepts表示Nginx启动到现在共成功创建了39次握手
请求丢失数=(握手数-连接数),可以看出,本次状态显示没有丢失请求。
第三个handled requests,表示总共处理了41次请求。
Reading为Nginx读取到客户端的Header信息数
Writing为Nginx返回给客户端的Header信息数
Waiting为Nginx已经处理完正在等候下一次请求指令的驻留连接。在开启keep-alive的情况下,这个值等于active

  • (reading writing)

特别提示:

出于安全起见,这个状态信息要防止外部用户查看。

3.4.3 nginx 访问日志切割

[root@web01 logs]# mv access.log $(date %F -d "-1day")_access.log

[root@web01 logs]# /application/nginx/sbin/nginx -s reload

  重新启动就会重新生成access_www.log文件,然后写定时任务。

[root@web01 scripts]# crontab -l

  ################time sync by oldboy at 2010-2-1

  */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1

  ################

  00 00 * * * /bin/sh /server/scripts/cut_log.sh >/dev/null 2>&1

cat cut_log.sh
cd /application/nginx/logs &&
mv access.log $(date  %F -d "-1day")_access.log
/application/nginx/sbin/nginx -s reload

Nginx常用日志收集及分析工具有rsyslog、awstats、flume、ELK(Elasticsearch logstash Kibana)、storm等。

编译前配置:

3.1.8 启动程序

[[email protected] application]# /application/nginx/sbin/nginx

[[email protected] application]#

检查是否启动

[[email protected] application]# ps -ef |grep nginx

root      26548      1  0 20:13 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx

www       26549  26548  0 20:13 ?        00:00:00 nginx: worker process       

root      26551  23431  3 20:13 pts/0    00:00:00 grep --color=auto nginx

检查端口信息

[[email protected] application]# netstat -lntup |grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      26548/nginx 

服务部署完成

 

至此软件安装完毕!

nginx命令简化方法

echo 'export PATH=/application/nginx/sbin:$PATH'>>/etc/profile

source /etc/profile

which nginx

6.3 增加错误日志

范例:error_log file level;

常见的日志级别【debug|info|notice|warn|error|crit|alert|emerg】
生产场景一般是warn|error|crit这三个级别之一,注意不要配置info等较低级别,会带来巨大磁盘I/O消耗。
error_log的默认值为:
# default:error_log logs/error.log error;

worker_processes  1;
error_log  logs/error.log;    #非常简单,一般增加此行即可
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extra/www.conf;
    include extra/mail.conf;
    include extra/status.conf;

}

4. nginx location

作用:是根据用户请求的URI来执行不同的应用

语法:location { = | ~ | ~* | ^~ } uri {

  …

  }

注意:    = 精确匹配,~区分大小写,~*不区分大小写,!匹配取反,^~在常规字符串检查之后,不做正则表达式的检查

    URI是关键部分,可以是普通字符串地址路径,或者是正则表达式

location

{ = | ~ | ~* | ^~ }

uri

{…}

指令

匹配标识

匹配网站地址

配置URI后要执行的配置端

location示例:

[root@web01 extra]# cat 02_blog.conf
    server {
        listen       80;
        server_name  blog.etiantian.org;
        location / {
           return 401;
        }
        location = / {
            return 402;
        }
        location /documents/ {
            return 403;
        }
        location ^~  {
            return 404;
        }
        location ~* .(gif|jpg|jpeg)$ {
            return 500;
        }
   }

检查语法

重启生效

实验返回状态码:

  curl -s -o /dev/null -I -w "%{http_code}n"

  curl -s -o /dev/null -I -w "%{http_code}n"

参数解释:-s静默,-o不输出,-I请求头,-w "%{http_code}n"状态码

顺序

不用URI即特殊字符匹配

匹配说明

1

“location = / { ”

精确匹配

2

“location ^~ { ”

匹配常规字符串,不做正则匹配检查

3

“location ~* .(gif/jpg/jpeg)$ { ”

正则匹配

4

“location /documents/ { ”

路径匹配

5

“location / { ”

所有location都不能匹配后的默认匹配

表2  URI及特殊字符组合匹配的顺序说明

[root@nginx ~]# cd /usr/src/nginx-1.6.2/
[root@nginx nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module

3.1 nginx 目录结构

[[email protected] nginx]# ll

total 36

drwxr-xr-x 2 root root 4096 Oct 21 19:34 conf    #配置文件保存目录

drwxr-xr-x 2 root root 4096 Oct 21 19:34 html    #站点目录

drwxr-xr-x 2 root root 4096 Oct 21 20:26 logs    #nginx 服务相关日志文件保存目录(错误日志访问日志)

drwxr-xr-x 2 root root 4096 Oct 21 19:34 sbin    # 服务命令目录(只有一个nginx文件)

6.4 Nginx访问日志轮询切割

默认情况下Nginx会把所有的访问日志生成到一个指定的访问日志文件access.log里,但这样一来,时间长了就会导致日志个头很大,不利于日志的分析和处理,因此,有必要对Nginx日志,按天或按小时进行切割,使其分成不同的文件保存。

[root@localhost nginx]# cat /server/scripts/cut_nginx_log.sh 
#!/bin/bash
#日志切割脚本可挂定时任务,每天00点整执行

Dateformat=`date  %Y%m%d`
Basedir="/usr/local/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access"

[ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1
[ -f ${Logname}.log ] || exit 1
/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload

[root@localhost nginx]# cat >>/var/spool/cron/root << KOF
#cut nginx access log by Mr.chen
00 00 * * * /bin/bash /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

5. nginx rewrite

注:配置前可以参考:./configure --help给出说明
--prefix 设定Nginx的安装目录
--user和—group 指定Nginx运行用户和组
--with-http_stub_status_module 启用http_stub_status_module模块以支持状态统计
--with-http_ssl_module 启用SSL模块
--with-http_flv_module 启用FLV模块,提供寻求内存使用基于时间的偏移量文件

3.2 nginx.conf 配置文件说明

这样的配置文件是通过精简化配置文件得到!

[[email protected] conf]# cat nginx.conf

worker_processes  1;                        ← worker 进程数量

events {                                    ←事件区块

    worker_connections  1024;               ←每个worker进程可以处理的连接数

}                                            ←事件区块结束

http {                                      ← HTTP 区块

    include       mime.types;               ←支持的媒体文件

    default_type  application/octet-stream;←默认的媒体类型

    sendfile        on;                     ←高效传输模式

    keepalive_timeout  65;                  ←超时时间

    server {                                 ← server 区块

        listen       80;                    ←端口

        server_name  localhost;             ←域名

        location / {                        ←第一个location区块

            root   html;                     ←站点目录

            index  index.html index.htm;     ←首页文件

        }                                    ←第一个location区块结束

        error_page   500 502 503 504  /50x.html;  ← 错误信息配置

        location = /50x.html {                  文件位置

            root   html;                      在哪找:路径

        }                                     

    }                                         ← server 区块结束

}                                            ← HTTP 区块结束

6.5 Nginx location

5.1 rewrite用法

  和Apache等的web服务软件一样,nginx rewrite的主要功能也是实现URL地址重写,nginx的rewrite规则需要PCRE软件的支持,通过Perl兼容正则表达式语法进行规则匹配。

rewrite指令语法:

  rewrite regex replacement [flag]

默认值:none    应用位置:server、location、if

例子:rewrite ^/(.*) permanent;

server标签下:

  直接rewrite ^/(.*) http://www.etiantian.org/$1permanent;

if匹配:

  if ( $http_host ~* "^(.*).etiantian.org$") {

       set $domain $1;

       rewrite ^(.*) http://www.etiantian.org/$domain/oldboy.html break;

  }

 

 

3.2.1 站点目录与首页文件概念

 

6.5.1 location使用的语法为:

location [ = | ~ | ~* | ^~ ] uri {

  ...

}

上图是对location语法的说明。上述语法中的URI部分是关键,这个URI可以是普通的字符串地址路径,或者是正则表达式,匹配成功则执行后面大括号里的相关命令。正则表达式的前面还可以有“~”或“~*”等特殊字符。

图片 21

匹配这两种特殊字符“~”或“~*”的区别为:“~”用于区分大小写(大小写敏感)的匹配;“~*”用于不区分大小写的匹配。还可以用逻辑操作符“!”对上面的匹配取反,即“!~”和“!~*”。此外,“^~”的作用是先进行字符串的前缀匹配(必须以后边的字符串开头),如果能匹配到,就不再进行其他location的正则匹配了。

5.2 正则表达式

字符

描述

将后面的字符标记为一个特殊字符或一个后项引用,例:\和n匹配换行符

^

匹配输入字符串的起始位置

$

匹配输入字符串的结束位置

*

匹配前面字符0次或多次,例:ol*匹配“o”或者“olllll”

匹配前面字符1次或多次,例:ol*匹配“ol”或者“olllll”

?

匹配前面字符0次或1次

.

匹配除‘n’之外的任何单个字符

(pattern)

匹配括号内得pattern,并且在后面获取对应的匹配,会后项通过$1~n引用

 

编译 安装:

3.2.2 配置文件详解

 

6.5.2 location匹配示例

[root@localhost nginx]# cat /usr/local/nginx/conf/extra/www.conf 
    server {
        listen       80;
        server_name  www.yunjisuan.com;
    root    /var/www/html/wwwcom;
        location / {
        return 401;     
        }
    location = / {
        return 402;
    }
    location = /images/ {
        return 501;
    }
    location /documents/ {
        return 403;
    }
    location ^~ /images/ {
        return 404;
    }
    location ~* .(gif|jpg|jpeg)$ {
        return 500;
    }

    }

正则匹配结果如下:

[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com
402        #匹配了=的情况
[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com/
402         #匹配了=的情况
[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com/xxxx
401         #匹配不到默认匹配 /的情况
[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com/documents/
403         #匹配字符串
[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com/images/
501         #优先匹配=的情况
[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com/images/1.jpg
404         #匹配
[root@localhost nginx]# curl -s -o /dev/null -w "%{http_code}n" www.yunjisuan.com/documents/images/1.jpg
500         #匹配~*的情况

从多个location的配置匹配可以看出匹配的优先顺序

顺序 匹配标识的location 匹配说明
1 " location = / { " 精确匹配
2 " location ^~ /images/ { " 先进行字符串的前缀匹配,如果匹配到就不做正则匹配检查
3 " loction ~* .(gif | jpg | jpeg)$ { " 正则匹配,*为不区分大小写
4 " location /documents/ { " 匹配常规字符串,模糊匹配,如果有正则检查,正则优先
5 " location / { " 所有location都不能匹配后的默认匹配原则

5.2 flag标记的说明

flag标记符号

说明

last

本条规则匹配完成后,继续向下匹配新的location URI规则

break

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

redirect

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

permanent

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

rewrite ^(.*)/bbs/ h有关rewrite特殊flag标记last与break的说明:

  在根location中或者server标签中编写rewrite规则,建议使用last标记,而在普通的location或if{}中编写rewrite规则,则建议使用break标记。

注意:

  1. last和break用来URL重写,浏览器的URL地址不变,
  2. redirect和permanent用来实现URL跳转,浏览器的URL地址显示跳转后的地址
[root@nginx nginx-1.6.2]# make && make install

3.3 【常见错误】nginx软件的编译安装常见错误说明

6.6 Nginx rewrite

6.  nginx 访问认证

示例:

  location / {
   auth_basic           "oldboy training";             #这是个提示
   auth_basic_user_file /application/nginx/conf/htpasswd;   #认证读取的文件
  }

创建账号密码:此账号就是登陆时需要的

[root@web01 extra]# rpm -qf /usr/bin/htpasswd

  httpd-tools-2.2.15-53.el6.centos.x86_64

 [root@web01 extra]# htpasswd -cb /application/nginx/conf/htpasswd oldboy 123456

  Adding password for user oldboy

[root@web01 extra]# cat /application/nginx/conf/htpasswd

  oldboy:hkWTQUKYkqLSo

具体操作:

htpasswd -bc /application/nginx/conf/htpasswd oldboy 123456

chmod 400 /application/nginx/conf/htpasswd

chown nginx /application/nginx/conf/htpasswd

检查语法

重启生效

  

3.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

6.6.1 什么是Nginx rewrite?

和Apache等Web服务软件一样,Nginx rewrite的主要功能也是实现URL地址重写。Nginx的rewrite规则需要PCRE软件的支持,即通过Perl兼容正则表达式语法进行规则匹配。默认参数编译时,Nginx就会安装支持rewrite的模块,但是,也必须要有PCRE软件的支持。

7 本章重点回顾

  1. Nginx的特性优点;
  2. 主流Web动态静态性能对比;
  3. Apache select和Nginx epoll模型区别形象比喻(面试常考);
  4. 虚拟主机概念及类型分类详解;
  5. 基于域名和端口虚拟主机的介绍及搭建;
  6. Nginx错误及访问日志及访问日志切割;
  7. Nginx访问状态信息介绍及配置实践;
  8. Nginx location介绍及配置实践;
  9. Nginx Rewrite介绍及配置实践;
  10. Nginx Web访问认证介绍及配置实践。
  11. 403报错的原因找不到首页文件,首页文件权限等

 

更多常用开源运维工具见

 为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用Nginx的主程序。

3.3.2 nginx软件启动过程中遇到的问题

nginx软件重复启动产生的错误信息

[[email protected] 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方式进行重启

6.6.2 Nginx rewrite 语法

(1)rewrite指令语法

指令语法:rewrite regex replacement 【flag】;
默认值:none
应用位置:server,location,if
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分的内容,重定向到replacement部分,结尾是flag标记。下面是一个简单的URL rewrite跳转例子:

rewrite ^/(.*) http://www.baidu.com/$1  permanent;

在上述指令中,rewrite为固定关键字,表示开启一条rewrite匹配规则,regex部分是^(.*),这是一个正则表达式,表示匹配所有,匹配成功后跳转到 。这里的$1是取前面regex部分括号里的内容,结尾的permanent;是永久301重定向标记,即跳转到后面的 地址上。

(2)regex常用正则表达式说明

图片 22

(3)rewrite指令的最后一项参数flag标记的说明

图片 23

  • 在以上的flag标记中,last和break用来实现URL重写,浏览器地址栏的URL地址不变,但在服务器端访问的程序及路径发生了变化。redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址。
  • last和break标记的实现功能类似,但二者之间有细微的差别,使用alias指令时必须用last标记,使用proxy_pass指令时要使用break标记。last标记在本条rewrite规则执行完毕后,会对其所在的server{...}标签重新发起请求,而break标记则会在本条规则匹配完成后,终止匹配,不再匹配后面的规则。

 

3.3.3 启动 Nginx 时如下报错"nginx:[emerg]getpwnam(“nginx”〉failed"

解答这是因为没有对应的Nginx服务用户,执行useradd nginx-s/sbin/no丨ogin-M创建 Nginx

用户即可。为了让读者理解问题,重现上述错误过程,命令如下:

[[email protected] tools]# pkill nginx

[[email protected] tools]# userdel nginx

[[email protected] tools]# /application/nginx/sbin/nginx

nginx: [emerg] getpwnam(Mnginx") failed

[[email protected] tools]# useradd nginx -s /sbin/nologin -M

[[email protected] tools]# /application/nginx/sbin/nginx

 

6.6.3 Nginx rewrite 的企业应用场景

Nginx的rewrite功能在企业里应用非常广泛:

  • 可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。
  • 为了让搜索引擎收录网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务
  • 网站换新域名后,让旧域名的访问跳转到新的域名上,例如:让京东的360buy换成了jd.com
  • 根据特殊变量,目录,客户端的信息进行URL跳转等。
[root@nginx nginx-1.6.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@nginx nginx-1.6.2]# ll /usr/local/bin/nginx 
lrwxrwxrwx 1 root root 27 12-29 07:24 /usr/local/bin/nginx -> /usr/local/nginx/sbin/nginx

3.3.4 编译安装pcre编译软件时,gcc不全导致报错(本文使用yum安装不存在此问题)。

报错信息如下:

[[email protected] pcre-8.30]# make && make install

make all-am

make[l] : Entering directory 7home/gjlin/tools/pcre-8.30'

CXX pcrecpp.lo

libtool : compile : unrecognized option '-DHAVE_CONFIG_H'

libtool : compile : Try 'libtool --help* for more information.

make[l】:*** [pcrecpp.lo】错误 1

make[l] : Leaving directory Vhome/gjlin/tools/pcre-8.30'

make : *** [all]错误 2

解答:执行“yum -y install gcc-c ”命令安装gcc-c 依赖包。

6.6.4 Nginx rewrite 301 跳转

以往我们是通过别名方式实现yunjisuan.com和www.yunjisuan.com访问同一个地址的,事实上,除了这个方式外,还可以使用nginx rewrite 301 跳转的方式来实现。实现的配置如下:

[root@localhost nginx]# cat conf/extra/www.conf 
#www virtualhost by Mr.chen   
    server {
        listen       80;
        server_name  www.yunjisuan.com;
    root    /var/www/html/wwwcom;
        location / {
        index index.html index.htm;
        }
#   location = / {
#       return 402;
#   }
    location = /images/ {
        return 501;
    }
    location /documents/ {
        return 403;
    }
    location ^~ /images/ {
        return 404;
    }
    location ~* .(gif|jpg|jpeg)$ {
        return 500;
    }

    }

    server{
        listen  80;
        server_name yunjisuan.com;
        rewrite ^/(.*)  http://www.yunjisuan.com/$1 permanent;
        #当用户访问yunjisuan.com及下面的任意内容时,都会通过这条rewrite跳转到www.yunjisuan.com对应的地址
    }

客户端访问测试结果

图片 24

图片 25

Nginx的运行控制:
与Apache的主程序httpd类似,Nginx的主程序也提供了"-t"选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录/usr/local/nginx/conf/目录中。若要检查位于其他位置的配置文件,可使用"-c"选项来指定路径。

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

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

6.6.5 实现不同域名的URL跳转

示例:实现访问

外部跳转时,使用这种方法可以让浏览器地址变为跳转后的地址,另外,要事先设置

(1)配置Nginx rewrite规则

[root@localhost nginx]# cat conf/extra/mail.conf 
    server {
        listen       80;
        server_name  mail.yunjisuan.com;
        location / {
            root   /var/www/html/mailcom;
            index  index.html index.htm;
        }
    if ( $http_host ~* "^(.*).yunjisuan.com$") {
        set $domain $1;
        rewrite ^(.*) http://www.yunjisuan.com/$domain/yunjisuan.html break;

    }
}

客户端访问测试

图片 26

图片 27

[root@nginx conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

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

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

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

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

6.6.6 rewrite跳转标记flag使用总结

1,在根location(即location / {...})中或server{...} 标签中编写rewrite规则,建议使用last标记
2,在普通的location(例 location/yunjisuan/{...}或if{}中编写rewrite规则,则建议使用break标记)

启动、停止Nginx:
直接运行nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加"-c 配置文件路径"选项来指定路径。需要注意的是,若服务器中已安装有httpd等其他WEB服务软件,应采取措施(修改端口,停用或卸载)避免部突。

3.3.7 【注意】403状态码出现情况原因

    01. 服务阻止客户端访问

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

6.7 Nginx访问认证

有时,在实际工作中企业要求我们为网站设置访问账号和密码权限,这样操作后,只有拥有账号密码的用户才可以访问网站内容。
这种使用账号密码才可以访问网站的功能主要应用在企业内部人员访问的地址上,例如:企业网站后台,MySQL客户端phpmyadmin,企业内部的CRM,WIKI网站平台。

[root@nginx conf]# service httpd stop
[root@nginx conf]# netstat -anpt |grep :80
[root@nginx conf]# nginx
[root@nginx conf]# netstat -anpt |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      6810/nginx: master 

3.4 nginx软件使用命令参数

6.7.1 创建密码文件

我们可以借用apache的htpasswd软件,来创建加密的账号和密码

[root@localhost ~]# which htpasswd
[root@localhost ~]# htpasswd -bc /usr/local/nginx/conf/htpasswd yunjisuan 123123
Adding password for user yunjisuan   
[root@localhost ~]# cat /usr/local/nginx/conf/htpasswd 
yunjisuan:FC1/eEc/iK0Mo   #账号密码是加密的(htpasswd是文件的名字)

通过检查 Nginx程序的监听状态,或者在浏览器中访问此WEB服务(默认页面将显示"Welcome to nginx!"),可以确认Nginx服务是否正常运行。

3.4.1 nginx 启动方法

[[email protected] application]# /application/nginx/sbin/nginx

6.7.2 在虚拟主机配置文件里加入两条配置信息

[root@localhost html]# cat /usr/local/nginx/conf/extra/blog.conf 
    server {
        listen       80;
        server_name  blog.yunjisuan.com;
        location / {
            root   /var/www/html/blogcom;
            index  index.html index.htm;
            auth_basic      "yunjisuan training";   #加入这条配置
            auth_basic_user_file    /usr/local/nginx/conf/htpasswd; #加入这条配置
        }
    }


#配置解释:

auth_basic :验证的基本信息选项(后边跟着的双引号里就是验证窗口的名字)
auth_basic_user_file :验证的用户文件(后边根账号密码文件的绝对路径)
[root@nginx ~]# elinks --dump http://localhost
                               Welcome to nginx!

3.4.2 nginx 停止方法

[[email protected] application]# /application/nginx/sbin/nginx -s stop

6.7.3 网页登陆验证

图片 28

图片 29

图片 30

主程序Nginx支持标准的进程信号,通过kill或者killall命令传送  

3.4.3 nginx 重启方法 (平滑重启)

[[email protected] application]# /application/nginx/sbin/nginx -s reload

6.8 Nginx相关问题解答

HUP 重载配置 等同于-1
QUIT 退出进程 等同于-3
KILL 杀死进程
USR1 重新写入日志
USR2 平滑重启

3.4.4 检查配置文件语法是否正确

[[email protected] application]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

6.8.1 Tengine和Nginx是什么关系?

Tengine是淘宝开源Nginx的分支,官方站点为

[root@nginx ~]# killall -s HUP nginx
[root@nginx ~]# killall -s QUIT nginx
[root@nginx ~]# netstat -anpt |grep :80

3.4.5 显示配置参数  -V (大写V)

[[email protected] application]# /application/nginx/sbin/nginx -V

nginx version: nginx/1.10.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

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

6.8.2 访问Nginx时出现状态码“403 forbidden”的原因

(1)Nginx配置文件里没有配置默认首页参数,或者首页文件在站点目录下没有如下内容:

index index.php index.html index.htm;

(2)站点目录或内部的程序文件没有Nginx用户访问权限

(3)Nginx配置文件中设置了allow,deny等权限控制,导致客户端没有访问权限。

   

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

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

    nginx -t 

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

curl -v www.baidu.com

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

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

7 本章知识点回顾

  1. Nginx的特性优点
  2. 主流Web动态静态性能对比
  3. Apache select 和Nginx epoll 模型的区别(面试常考)
  4. 虚拟主机概念及类型分类详解
  5. 基于域名和端口虚拟主机的介绍及搭建
  6. Nginx错误,访问日志,以及访问日志切割
  7. Nginx访问状态信息介绍及配置实践。
  8. Nginx location介绍及配置实践
  9. Nginx rewrite介绍及配置实践
  10. Nginx Web访问认证介绍及配置实践

  

3.5 nginx软件静态页面编写过程

编写配置文件

[[email protected] www]# cat ../../conf/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 www.zinx.top;

        location / {

            root   html/www;

            index  oldboy.html index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

编写静态访问页面文件信息

[[email protected] www]# cat oldboy.html  

<html>

<meta charset="utf-8">

<head>

<title>TEST</title>

</head>

<body>

惨绿少年

<table border=1>

<tr> <td>01</td> <td> </td> </tr>

<tr> <td>02</td> <td> </td> </tr>

 <tr> <td>03</td> <td> </td> </tr>

 </table>

<a href=";

<img src="znix.png" />

</a>

</body>

</html>

 

第4章 nginx进阶 --虚拟主机配置

当Nginx进程运行时,PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。

4.1 【企业要求】需要按照以前nginx服务编译安装过程安装

1、参看已安装服务的配置参数信息

[[email protected] sbin]# /application/nginx/sbin/nginx -V

nginx version: nginx/1.10.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

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

   -V 参数能显示软件的详细详细,安装配置参数

2、按照配置参数进行部署

为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和service工具来进行管理,也更加符合RHEL系统的管理习惯。

4.1.1 【语法检查】检查配置文件

[[email protected] nginx]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[root@nginx ~]# vim /etc/init.d/nginx

脚本一:

#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Server Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0

 脚本二:
#!/bin/sh
#
# nginx Startup script for nginx
#
# chkconfig: - 85 15
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# description: nginx is a HTTP and reverse proxy server
#
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop nginx
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

CONFFILE="/etc/nginx/nginx.conf"

if [ -f /etc/sysconfig/nginx ]; then
. /etc/sysconfig/nginx
fi

prog=nginx
nginx=${NGINX-/usr/sbin/nginx}
conffile=${CONFFILE-/etc/nginx/nginx.conf}
lockfile=${LOCKFILE-/var/lock/nginx.lock}
pidfile=${PIDFILE-/var/run/nginx/nginx.pid}
RETVAL=0

start() {
echo -n $"Starting $prog: "

daemon --pidfile=${pidfile} ${nginx} -c ${conffile}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} ${prog}
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

reload() {
echo -n $"Reloading $prog: "
killproc -p ${pidfile} ${prog} -HUP
RETVAL=$?
echo
}

upgrade() {
oldbinpidfile=${pidfile}.oldbin

configtest || return 6
echo -n $"Staring new master $prog: "
killproc -p ${pidfile} ${prog} -USR2
RETVAL=$?
echo
sleep 1
if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
echo -n $"Graceful shutdown of old $prog: "
killproc -p ${oldbinpidfile} ${prog} -QUIT
RETVAL=$?
echo 
else
echo $"Upgrade failed!"
return 1
fi
}

configtest() {
${nginx} -t -c ${conffile}
RETVAL=$?
return $RETVAL
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} ${nginx}
RETVAL=$?
;;
restart)
stop
start
;;
upgrade)
upgrade
;;
condrestart|try-restart)
if status -p ${pidfile} ${nginx} >&/dev/null; then
stop
start
fi
;;
force-reload|reload)
reload
;;
configtest)
configtest
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|upgrade|reload|status|help|configtest}"
RETVAL=2
esac

exit $RETVAL

4.2 首页文件不存在--利用nginx服务搭建文件共享服务器

通过配置  autoindex on; 参数

使用 autoindex参数,nginx能识别的直接显示,不识别的直接下载

配置完 autoindex on; 参数以后 会显示站点下的文件信息

对于nginx可以解析的资源会解析相应的内容

对于nginx不可以解析的资源会直接下载

  

4.2.1 进行curl时,报403错误,因为没有首页文件信息

 [[email protected] ~]# echo 'web01 www' > /application/nginx/html/www/index.html

        <- 在虚拟主机指定的站点目录中创建首页文件         

[[email protected] ~]# curl www.etiantian.org 

<- 利用curl命令本地检测nginx配置是否成功;已经存在首页文件,测试成功

[root@nginx ~]# chmod  x /etc/init.d/nginx
[root@nginx ~]# chkconfig --add nginx
[root@nginx ~]# chkconfig nginx on
[root@nginx ~]# chkconfig --list nginx 
nginx           0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

4.2.2 autoindex on参数实践

1)修改配置文件

[[email protected] www]# cat ../../conf/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       10.0.0.8:80;

        server_name  www.etiantian.org;

        location / {

            root   html/www;

            autoindex on;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

2)重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

3)访问测试

 

这样就可以通过nginx脚本来启动、停止、重启、重载Nginx服务器了。

4.3 【概念】虚拟主机的概念和类型

虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。

利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。

 

 

4.3.1 虚拟主机概念

所谓虚拟主机,在Web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是ip或端口.具有独立的程序及资源目录,可以独立地对外提供服务供用户访问。

这个独立的站点在配置里是由一定格式的标签段标记的,对于Apache软件来说,一个虚拟主机的标签段通常被包含在以的此<VirtualHost></VirtualHost>,而Nginx软件则使用一个server{}标签来标示一个虚拟主机。一个Web服务里可以有多个虚拟主机标签对,即可以同时支持多个虚拟主机站点。

3、配置文件nginx.conf:
在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为"关键字 值;"(末尾以分号表示结束),以"#"开始的部分表示注释。

4.3.2 虚拟主机类型

常见的虚拟主机类型有如下几种

1)基于域名的虚拟主机

所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站使用的都是基于域名的虚拟主机,例如: www.znix.top。

2)基于端口的虚拟主机 

同理,所谓基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要为公司内部网站,例如:一些不希望直接对外提供用户访问的网站后台等,访问基于端口的虚拟主机,地址里要带有端口,例如:

    3)基于IP的虚拟主机

 所谓基于IP的虚拟主机,意思是通过不同的IP区分不同的虚拟主机,

1)全局配置
由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。
常用配置项:

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

1)增加一个完整的server标签段到结尾处。注意,要放在http的结束大括号前,也就是将server标签段放入http标签。

2)更改server_name及对应网页的root根目录,如果需要其他参数,可以增加或修改。

3)创建Seever_name域名对应网页的根目录,并且建立测试文件,如果没有index首页,访问会出现403错误。

    如果是apache软件,没有首页文件,默认会把站点目录下面的信息显示出来

    nginx出403错误解决方式:

    autoindex on;#<==当找不到首页文件时,会展示目录结构,这个功能一般不要用除非有需求。

    PS:显示的目录结构中,有些信息点击就是下载,有的点击就是显示,因为扩展名称不一样

        根本在于nginx软件是否能够进行解析

        nginx是否解析:

        1.htmljpg认识显示出内容

        2.不认识不解析便直接下载

4)检査Nginx配置文件语法,平滑重启Nginx服务,快速检査启动结果。

5)在客户端对server_name处配置的域名做host解析或DNS配置,并检査(ping域名看返回的IP是否正确)。

6)在Win32浏览器中输入地址访问,或者在Linux客户端做hosts解析,用wget或curl接地址访问。

7)在服务重启或关闭之前先进行一次配置文件检查 /application/ngnix/sbin/nginx -t

Nginx虚拟主机的官方帮助网址为:

http {
    include       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  logs/access.log  main;      //访问日志位置

    sendfile        on;                     //支持文件发送(下载)
    keepalive_timeout  65;                  //连接保持超时

    server {                                //web服务的监听配置
        listen       80;                    //监听地址及端口
        server_name  nginx.benet.com;       //网站名称(FQDN)
        charset utf-8;                      //网页的默认字符集

        location / {                        //跟目录配置
            root   html;                    //网站根目录的位置安装位置的html中
            index  index.html index.htm;    //默认首页(索引页)
        }

        error_page   500 502 503 504  /50x.html;    //内部错误的反馈页面
        location = /50x.html {                      //错误页面配置
            root   html;
        }
    }
}



http://shehui.rmzxb.com.cn/c/2016-06-03/851312312021.shtml
https://err.taobao.com/error1.html?c=404&u=https://www.taobao.com/c/2016-06-03/851312312021.shtml&r=

listen 支持采用 IP地址:端口 形式

4.4 【实践】虚拟主机配置

4、状态统计及虚拟主机应用:
Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。配置
编译参数时可添加--with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项

4.4.1 基于域名的虚拟主机

修改配置文件

[[email protected] ~]# cat  /application/nginx/conf/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  www.etiantian.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

    server {

        listen       80;

        server_name  bbs.etiantian.org;

        location / {

            root   html/bbs;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

    server {

        listen       80;

        server_name  blog.etiantian.org;

        location / {

            root   html/blog;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

检查配置信息是否正确

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

注意:服务没有启动的时候不能使用平滑重启

创建站点目录

[[email protected] conf]# for name in www blog bbs ;do  mkdir ../html/$name -p ;done

创建主页文件

[[email protected] conf]# for name in www blog bbs ;do echo "web01 $name" >../html/$name/index.html  ;done

检查主页内容信息

[[email protected] conf]# for name in www blog bbs ;do  cat ../html/$name/index.html ;done

web01 www

web01 blog

web01 bbs

修改主机hosts文件

[[email protected] ~]# vim /etc/hosts

172.16.1.8    web01 www.etiantian.org blog.etiantian.org bbs.etiantian.org

测试

[[email protected] ~]# curl  www.etiantian.org

web01 www

[[email protected] ~]# curl  blog.etiantian.org

web01 blog

[[email protected] ~]# curl  bbs.etiantian.org

web01 bbs

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

        location ~ /status {
            stub_status on;     //打开状态统计功能
            access_log off;     //关闭此位置的日志记录
        }

[root@nginx conf]# service nginx restart

4.4.2 基于端口的虚拟主机

修改配置文件内容

[[email protected] conf]# vim nginx.conf

    server {

        listen       81;

        server_name  bbs.etiantian.org;

        location / {

            root   html/bbs;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

"nginx.conf" 46L, 1098C written  

重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

检查端口信息

[[email protected] conf]# netstat -lntup |grep ng

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      40110/nginx        

tcp        0      0 0.0.0.0:81                  0.0.0.0:*                   LISTEN      40110/nginx  

测试访问

[[email protected] ~]# curl  bbs.etiantian.org:81

web01 bbs

浏览器访问

4.4.3 基于IP的虚拟主机

注意:  

采用基于IP的虚拟主机,配置文件修改后要重启(-s stop)

配置和IP地址配置相关的都要采用(-s stop)重启,不能够使用软重启的方式

修改配置文件

[[email protected] conf]# 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       10.0.0.8:80;

        server_name  www.etiantian.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

检查配置文件格式

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

重启服务,注意使用的是直接重启的方式 

只要nginx配置文件中涉及到IP地址的更改只能正真的重启才生效

[[email protected] conf]# /application/nginx/sbin/nginx -s stop

[[email protected] conf]# /application/nginx/sbin/nginx

[[email protected] conf]# netstat -lntup |grep ng

tcp        0      0 10.0.0.8:80                 0.0.0.0:*                   LISTEN      40592/nginx   

访问测试

 

Active connections: 1
server accepts handled requests
1 1 3
Reading: 0 Writing: 1 Waiting: 0

4.5 【规范化配置】nginx配置文件企业规范化

  

4.5.1 第一个里程碑:  创建虚拟主机配置文件存储目录

[[email protected] conf]# pwd

/application/nginx/conf

[[email protected] conf]# mkdir extra

Active connections 表示当前活跃的连接数,
第二行的三个数字表示Nginx当前总共 处理了1个连接,成功创建1次握手,总共处理了3个请求。
最后一行的Reading表示Nginx读取到客户端Header信息数,
Writing表示Nginx返回给客户端的Header信息数
“Waiting”表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数。

4.5.2 第二个里程碑: 生产虚拟主机配置文件

[[email protected] conf]# sed -n '10,21p' nginx.conf > extra/www.conf

[[email protected] conf]# sed -n '22,33p' nginx.conf > extra/bbs.conf

[[email protected] conf]# sed -n '34,45p' nginx.conf > extra/blog.conf

 

4.5.3 第三个里程碑: 修改nginx配置文件使之加载识别虚拟主机配置文件

[[email protected] conf]# cat  nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    include extra/*;

}

虚拟主机:
使用Nginx搭建虚拟主机服务器时,每个虚拟WEB站点拥有独立的"server {}"配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。
例如:要创建两个站点nginx.benet.com和nginx.accp.com
为两个虚拟WEB主机分别建立根目录,并准备测试首页

4.5.4 重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[root@nginx ~]# mkdir /usr/local/nginx/html/benet
[root@nginx ~]# mkdir /usr/local/nginx/html/accp
[root@nginx ~]# echo "<h1>nginx.benet.com</h1>" > /usr/local/nginx/html/benet/index.html
[root@nginx ~]# echo "<h1>nginx.accp.com</h1>" > /usr/local/nginx/html/accp/index.html
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  www.benet.com;
        charset utf-8;
        access_log  logs/benet.access.log  main;

        location / {
            root   html/benet;
            index  index.html index.htm;
        }
    }

    server {
        listen       80;
        server_name  www.accp.com;
        charset utf-8;
        access_log  logs/accp.access.log  main;

        location / {
            root   html/accp;
            index  index.html index.htm;
        }
    }
}

[root@nginx ~]# service nginx reload
[root@nginx ~]# vim /etc/hosts
192.168.200.128 nginx.benet.com
192.168.200.128 nginx.accp.com

[root@nginx ~]# elinks --dump http://nginx.benet.com
                                 nginx.benet.com
[root@nginx ~]# elinks --dump http://nginx.accp.com
                                  nginx.accp.com

4.5.5 检查监听端口

[[email protected] conf]# netstat -lntup |grep ng

tcp        0      0 0.0.0.0:80           0.0.0.0:*       LISTEN      40714/nginx       

  Nginx配置文件结构

4.5.6 查看配置文件的加载顺序

[ro[email protected] logs]# /application/nginx/sbin/nginx -T

参数说明:

-T   : test configuration, dump it and exit

   测试配置文件,并且加载一遍,并显示加载的顺序

配置项 值;
配置项 值;

events {

}

http {

    server {

        location {



        }


    }


} 

4.5.7 【优化】调整 inculde的加载顺序,指定第一个加载为conf

[[email protected] conf]# vim nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    include extra/www.conf;

    include extra/bbs.conf;

    include extra/blog.conf;

}

 开启压缩 

4.5.8 重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

gzip on;
gzip_min_length 1k;
gzip_buffer 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_type text/plain application/x-javascript text/css application/xml;
gzip_cary on;

4.5.9 说明;

这样的配置能够让用户通过IP访问的时候,访问到的网站是www的网站。

  自动索引

4.6 别名的配置

在配置文件中添加别名

[[email protected] conf]# vim extra/www.conf

    server {

        listen       80;

        server_name  www.etiantian.org ett.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

}

重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

修改hosts 进行访问测试

[[email protected] www]# curl  ett.org

web01 www

 

4.7 status 状态模块

location /download {
        autoindex on;
        }

4.7.1 状态模块的配置

修改配置文件,添加三status模块

[[email protected] conf]# vim 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;

}

检查配置文件是否正确

[[email protected] conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

重启服务

[[email protected] conf]# /application/nginx/sbin/nginx -s reload

访问测试

 

说明:

以上页面内容信息主要会被zabbix监控服务调取,形成图像信息

根据图形信息,从而判断nginx网站服务用户访问量情况

[root@nginx ~]# cd /usr/local/nginx/html/
[root@nginx html]# mkdir download/dir{1,2} -p
[root@nginx html]# touch download/1.txt
[root@nginx html]# touch download/2.txt
[root@nginx html]# service nginx reload
浏览器访问

4.7.2 状态模块说明

参数

参数说明

Active connections

当前的活动客户端连接数量

accepts          

接受客户端连接的总数

handled          

处理的连接总数

requests         

客户端请求的总数

Reading          

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

Writing          

nginx正在将响应写回客户端的当前连接数。

Waiting          

当前空闲客户端连接数等待一个请求。

自定义错误页面  

4.8 nginx的日志功能

nginx的两种日志种类

错误日志:记录nginx运行错误情况信息

访问日志:记录用户访问日志信息

官方说明

        error_page 403 404              /404.html;
        location = /404.html {
            root html;
        }
[root@nginx html]# echo "Sorry,Page Not Found" >  /usr/local/nginx/html/404.html
[root@nginx html]# service nginx reload
浏览器访问 http://192.168.200.213/abc
返回结果: Sorry,Page Not Found 

4.8.1 定义错误日志信息

系统默认配置

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

配置错误日志,修改主配置文件

[[email protected] logs]# vim ../conf/nginx.conf

worker_processes  1;

error_log  logs/error.log  error;

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;

}

重启服务

[[email protected] logs]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[[email protected] logs]# /application/nginx/sbin/nginx -s reload

查看错误日志信息

[[email protected] logs]# tail  error.log

2017/10/25 11:41:55 [error] 40842#0: *7 open() "/application/nginx-1.10.2/html/www/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: www.etiantian.org, request: "GET /favicon.ico HTTP/1.1", host: "www.etiantian.org", referrer: ""

 Nginx 支持为目录添加密码认证 

4.8.2 访问日志配置

系统默认配置

#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  logs/access.log  main;

修改访问日志配置--修改主配置文件

[[email protected] www]# cat ../../conf/nginx.conf

worker_processes  1;

error_log  logs/error.log  error;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                  '$status $body_bytes_sent "$http_referer" '

                  '"$http_user_agent" "$http_x_forwarded_for"';

 

          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;

}

修改访问日志配置--修改虚拟主机配置文件

[[email protected] www]# cat /application/nginx/conf/extra/www.conf

    server {

        listen       80;

        server_name  www.etiantian.org ett.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

access_log  logs/access_www.log  main;

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

用户访问控制:使用apache 的 htpasswd 来创建密码文件
[root@nginx ~]# yum -y install httpd
[root@nginx ~]# htpasswd -c /usr/local/nginx/.htpasswd crushlinux
New password: 
Re-type new password: 
Adding password for user crushlinux

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
        location ~ /status {
            stub_status on;
            access_log off;
            auth_basic "Nginx Status";
            auth_basic_user_file /usr/local/nginx/.htpasswd;
        }

客户端访问控制:
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
        location ~ /status {
            stub_status on;
            access_log off;
            auth_basic "Nginx Status";
            auth_basic_user_file /usr/local/nginx/.htpasswd;
            allow 192.168.200.1;
            deny 192.168.200.0/24;
        }

注:allow 允许规则,deny拒绝规则;规则的执行是按从上向下执行,匹配某条规则后将不再检查其他规则。

4.8.3 【重要】访问日志信息说明

日志内容

10.0.0.1 - - [22/Oct/2017:16:04:54 0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"

配置文件

'$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

日志信息说明

参数

日志内容

含义

$remote_addr

10.0.0.1

客户端ip地址

-

-

 

$remote_user

-

显示远程访问者用户信息

[$time_local]

[22/Oct/2017:16:04:54 0800]

显示访问时间

$request

GET / HTTP/1.1"

请求行信息

$status

304

状态码

$body_bytes_sent

0

响应报文主体内容大小

$http_referer

-

 

$http_user_agent

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

客户端浏览网页工具信息

$http_x_forwarded_for

-

反向代理转发

详细日志详细说明

Nginx日志变量

说明

$remote_addr

记录访问网站的客户端地址;即源IP地址

$http_x_forwarded_for

当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的

前提是代理服务器上也进行了相关的x_forwarded_for设置

可以记录用户真实的IP地址信息

$remote_user

远程客户端用户名称

$time_local

记录访问时间与时区

$request

用户的http请求起始行信息

$status

http状态码,记录请求返回的状态,例如:200 , 404 , 301等

$body_bytes_sents

服务器发送给客户端的响应body字节数

$http_referer

记录此次请求是从哪个链接访问过来的,可以根据referer进行防盗链设置

即表示是哪个网站介绍过来的

$http_user_agent

记录客户端访问信息,例如:浏览器、手机客户端等

在没有特殊要求的情况下,采用默认的配置即可,更多可以设置的记录日志信息的变量见:

 编写每天定时切割Nginx日志的脚本 

4.8.4 日志的切割

切割日志方式

01:利用脚本实现日志切割

简单脚本

[[email protected] logs]# cat /server/scripts/log_cut.sh

#!/bin/bash

 

mv /application/nginx/logs/access_www.log  /application/nginx/logs/access_www_`date %F`.log

/application/nginx/sbin/nginx -s reload

包含判断的脚本

[[email protected] logs]# cat /server/script/cut_nginx_log.sh

# ! /bin/sh

Dateformat='date %Y%m%d'

Basedir= "/application/nginx"

Nginxlogdir="$Basedir/logs"

Logname="access_www"

[-d $Nginxlogdir ] && cd $Nginxlogdir || exit 1

[-f ${Logname}.log ] || exit 1

/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log

$Basedir/sbin/nginx -s reload

02.利用系统自带切割软件进行切割

cat /etc/logrotate.conf

1、创建脚本
[root@nginx ~]# vi /usr/local/nginx/sbin/cut_nginx_log.sh
#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/nginx/logs/"

mkdir -p ${logs_path}$(date  "%Y")/$(date  "%m")/
mv ${logs_path}access.log ${logs_path}$(date  "%Y")/$(date  "%m")/access_$(date  "%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

2、设置crontab,每天凌晨00:00切割nginx访问日志
[root@nginx ~]# chmod  x /usr/local/nginx/sbin/cut_nginx_log.sh
[root@nginx ~]# crontab -e
00 00 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh
[root@nginx ~]# service crond restart

4.9 企业需求解决(location应用)

   1、搭建好一台nginx的web服务器,配置好内网网卡地址与外网网卡地址

   2、web服务器的网站域名为www.etiantian.org 站点目录为 html/www

   3、要求内网可以访问 www.etiantian.org/AV 资源

   4、要求外网不可以访问 www.etiantian.org/AV 资源

 别名功能 

4.9.1 需求处理 --location的应用

1、定位需要控制的资源

     location == if

修改配置文件

[[email protected] extra]# cat www.conf

    server {

        listen       80;

        server_name  www.etiantian.org;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

        location /AV  {

            root  html/www;

            index index.html index.htm;

            allow 172.16.1.0/24;

            deny  all;

        }

    }

 

 

4.9.2 location 语法

location 指令的作用是根据用户请求的URI来执行不同的应用。

locationn使用的语法为

location [=|~|~*|^~] uri {

  ....

}

 

location 语法说明表

location

[=|~|~*|^~]

uri

{....}

指令

匹配标识

匹配的网站地址

匹配URI后要执行的配置段

 

~ 与~* 的区别

u  ~  匹配内容区分大小写

u  ~* 匹配内容不区分的小写

u  !~ 取反

u  ^~ 但多个匹配同时存在,优先匹配 ^~匹配的内容;不做正则表达式的检查 (优先处理)

[root@nginx html]# mkdir Centos RedHat
[root@nginx ~]# echo "hello,students" > /usr/local/nginx/html/RedHat/index.html
[root@nginx ~]# vi /usr/local/nginx/conf/nginx.conf
    location ~ /Centos {
        alias /usr/local/nginx/html/RedHat;
    }
[root@nginx ~]# service nginx restart
停止 nginx:[确定]
启动 nginx:[确定]
在浏览器中http://192.168.200.213/Centos 进行测试

4.9.3 官方配置示例

location = / {

    [ configuration A ]

}

 

location / {

    [ configuration B ]

}

 

location /documents/ {

    [ configuration C ]

}

 

location ^~ /images/ {

    [ configuration D ]

}

 

location ~* .(gif|jpg|jpeg)$ {

    [ configuration E ]

}

说明:

"/"请求将匹配配置A,

"/index.html"请求将匹配配置B,

"/documents/document.html"请求将匹配配置C,

"/images/1.gif"请求将匹配配置D,

"/documents/1.jpg"请求将匹配配置E.

 

不同uri及特殊字符组合匹配的顺序说明

顺序

不用URI及特殊字符组合匹配

匹配说明

1

location = / {}

精确匹配 /

2

location ^~ /image/{

匹配常规字符串,不做正则表达式匹配检查

3

location ~* .(gif|jpg|jpeg)$ {

正则匹配

4

location /documents/ {

匹配常规字符串,如果有正则,则优先匹配正则

5

location / {

所有location 都不能匹配后的默认匹配

Nginx的浏览器本地缓存设置  

4.9.4 【测试】测试location的访问

location ~.*.(gif|jpg|jpge|png|bmp|swf)$
{
    expires 30d;
}

location ~.*.(js|css)$
{
    expires 1h;
}

4.9.4.1  修改配置文件

定义不同的location返回不同的数值

[[email protected] extra]# vim www.conf

server {

    listen       80;

    server_name  www.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;

}

  设定限速

4.9.4.2  访问测试

根据请求不同uri的返回值验证 location的配置。

[[email protected] ~]# curl -I -w "%{http_code}n" -o /dev/null -s  www.etiantian.org/documents

401

[[email protected] ~]# curl -I -w "%{http_code}n" -o /dev/null -s  www.etiantian.org

402

[[email protected] ~]# curl -I -w "%{http_code}n" -o /dev/null -s  www.etiantian.org/documents/ss.jpg

500

[[email protected] ~]# curl -I -w "%{http_code}n" -o /dev/null -s  www.etiantian.org/documents

401

[[email protected] ~]# curl -I -w "%{http_code}n" -o /dev/null -s  www.etiantian.org/documents/

403

[[email protected] ~]# curl -I -w "%{http_code}n" -o /dev/null -s  www.etiantian.org/images/1.jpg

404

location /download
{
limit_rate 256k;
proxy_pass http://1.2.3.4;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /movie
{
    limit_rate_after 10m;
    limit_rate 100k;
}
if ($http_user_agent~Google|Yahoo|baidu){
    limit_rate 20k; 
}

4.10 rewrite 模块的使用--地址重写

 实现域名跳转 

4.10.1 rewrite 重写模块

  将地址信息进行重写

rewrite 语法格式

rewrite regex replacement [flag]

rewrite应用标签:server、location、if

 

4.10.2 rewrite模块两个功能

  1. 实现网站地址信息跳转

  2. 实现伪静态

server {
        listen 80 default_server;
        server_name www.jd.com;
        root /usr/local/nginx/html;
        index index.html;
        rewrite ^(.*)$ http://www.360buy.com$1 permanent;
        access_log /usr/local/nginx/logs/www.jd.com-access.log main;
        error_log /usr/local/nginx/logs/www.jd.com-error.log warn;
        }

在浏览器中http://www.360buy.com进行测试

4.10.3 方法一 使用if判断

[[email protected] extra]#Linux实战教学笔记27,Web服务使用。 cat www.conf

    server {

        listen       80;

        server_name  www.etiantian.org ett.org;

if ($host ~* "^etiantian.org$") {

rewrite ^/(.*) permanent;

}

        location / {

            root   html/www;

            index  index.html index.htm;

        }

        access_log  logs/access_www.log  main;

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

测试

[[email protected] www]# curl  etiantian.org -L

web01 www

 

  不同浏览器访问到不同的页面

4.10.4 方法二  再添加上一个区块

server {   

        server_name etiantian.org;

        rewrite ^/(.*) permanent;

}  

[root@nginx html]# mkdir firefox msie
[root@nginx html]# echo "hello,firefox" > firefox/index.html
[root@nginx html]# echo "hello,msie" > msie/index.html
        location / {
        if ($http_user_agent ~ Firefox) {
        root /usr/local/nginx/html/firefox;
        }
        if ($http_user_agent ~ MSIE) {
        root /usr/local/nginx/html/msie;
        }
            index  index.html index.htm;
        }

4.10.5 nginx 的rwite重写企业应用场景

图片 31  可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。

图片 32  为了让搜索引擎收录网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

图片 33  网站换新域名后,让旧域名的访问跳转到新的域名上,例如:让京东的360buy换成了jd.com。

图片 34  根据特殊变量、目录、客户端的信息进行URL跳转等。

图片 35  说明:开源软件类似wordpress的,官方都会对伪静态配置进行说明

  模拟手机端和电脑端

4.11 nginx 的访问认证

 

4.11.1 修改nginx的相关配置文件

vim extra/www.conf

location / {

        root   html/www;

        index  index.html index.htm;

        auth_basic           "oldboy training";

        auth_basic_user_file   /application/nginx/conf/htpasswd;

 }

location / {
    #默认PC端访问内容
    root /usr/local/nginx/html/web;

    #如果是手机移动端访问内容
    if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
    {
        root /usr/local/nginx/html/mobile;
    }

    index index.html index.htm;
}

4.11.2 创建密码文件

注: 这里使用的htpasswd命令默认是没有的,需要通过yum install httpd-tools -y 安装

[[email protected] extra]# htpasswd -c /application/nginx/conf/htpasswd oldboy

New password:

Re-type new password:

Adding password for user oldboy

参数说明:

-c  Create a new file.

    创建一个新的密码文件

-b  Use the password from the command line rather than prompting for it.

采用免交互的方式输入用户的密码信息

htpasswd参数说明

参数

参数说明

-c

创建一个新文件。

-n

不更新文件; 显示结果。

-m

强制MD5密码加密。

-d

强制CRYPT加密密码(默认)。

-p

不加密密码(明文)。

-s

强制SHA加密密码。

-b

使用命令行中的密码,而不是提示。(免交互)

-D

删除指定的用户。

 

  Nginx 匹配规则

4.11.3 更改密码文件权限

[[email protected] extra]#  chmod 400 /application/nginx/conf/htpasswd    

[[email protected] extra]#  chown -R www.www /application/nginx/conf/htpasswd

[[email protected] extra]# cat /application/nginx/conf/htpasswd

oldboy:e3OfMiJThE0Qg

 

4.11.4 重启服务: 配置修改后要重启服务

[[email protected] extra]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful

[[email protected] extra]# /application/nginx/sbin/nginx -s reload

location [=|~|~*|^~] /uri/{...}
默认值:no
使用字段:server
这个参数根据URI的不同需求来进行配置,可以使用字符串与正则表达式匹配,
如果要使用正则表达式,你必须指定下列前缀
~:区分大小写
~*:不区分大小写
^~:禁止表达式匹配
=:精确匹配

nginx匹配规则
location = / {
#只匹配 / 的查询.
[configuration A ]
}
location / {
#匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[configuration B ]
}
location ^~  {
#匹配任何以  开始的查询并且停止搜索,不检查正则表达式。
[configuration C ]
}
location ~* .(gif|jpg|jpeg)$ {
#匹配任何以gif,jpg,or,jpeg结尾的文件,但是所有  目录的请求将在Configuration C中处理。
[configuration D ]
}

4.11.5 访问测试

使用交互式输入密码

[[email protected] www]# curl www.etiantian.org -uoldboy

Enter host password for user 'oldboy':123456

web01 www

使用免交互输入密码

[[email protected] www]# curl www.etiantian.org -uoldboy:123456

web01 www

401错误说明: 需要认证,但是没有认证

 

说明,nginx服务部署 第1章 常用的软件 1.1 常用来提供 静态服务 的软件 Apache : 这是中小型 Web 服务的主流, Web 服务器中的老...

  

各请求的处理如下例:

./ ->configuration A
./documents/document.html -> configuration B
..gif -> configuration C
./document/1.jpg -> configuration D

  

 

Nginx rewrite
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressions)
perl兼容正则表达式的语法进行规则的功能,在编译Nginx之前,需要编译安装PCRE库

URL是Uniform Resource Location的缩写,译为“统一资源定位符”。如:

URI由一个通过通用资源标志符(Universal Resource identifier,简称“URI”)进行定位。

if指令
规则语法

if($http_user_agent ~MSIE){
rewrite ^(.*)$ /msie/$1 break;
}
if(!-f $request_filename){
rewrite ^/img/(.*)$/site/$host$1 last;
}

  

rewrite语法规则
变量名
变量名可以使用"="或"!="运算符
"~" 符号表示区分大小写字母的匹配
"~*" 符号表示不区分大小写字母的匹配
"!~" 和"!~*"与"~" "!~"相反
"-f"和"!-f" 用来判断文件是否存在
"-d"和"!-d" 用来判断目录是否存在
"-e"和"!-e" 用来判断文件或目录是否存在
"-x"和"!-x" 用来判断文件是否可以执行
也支持$!到$9位置化参数

return指令
示例,如果访问的URL以"*.sh" "*.bash"结尾,则返回状态码403

location ~ .*.(sh|bash)?$
{
return 403;
}

set、rewrite指令
if ($host ~* ^(.*?).aaa.com$)
{
set $var_tz '1';
if ($host ~* ^192.168.1.(.*?)$)
{
set $var_tz '1';
}
if ($host ~*^localhost)
{
set $var_tz '1'
}
if ($var_tz !~'1')
{
rewrite ^/(.*)$ http://www.aaa.com/ redlirect;

  

rewrite指令
rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种
last:相当于apache里的[L]标记,表示完成rewrite;
break:本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

last和break用来实现URI重写,浏览器地址栏URL地址不变
redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址

rewrite fiag案例
lacation /cms/ {
proxy_pass ;
rewrite "^/cms/(.*).html$" /cms/index.html break;
}
一般在跟location中(即location /{……})或直接在Server标签中编写rewrite规则,
推荐使用last标记,在非跟location中(location /cms/{……}),则使用break标记

rewrite规则编写实例
1.将原来要访问/data目录重写为/bbs
rewrite ^/data/?$ /bbs/ permanent;
2.根据不同的浏览器将得到不同的结果

if($http_user_agent~MSIE){
rewrite ^(.*)$/msie/$1 break;
}

3.防止盗链
localtion ~*.(gif|jpg|png|swf|flv)${
valid_referers none blocked www.test.com *.test.com;
if($incalid_referer){
rewrite ^/(.*)http://www.test.com/block.html;
}
}

  

4.实现域名跳转
所有对www.abc.com的访问,redirect到www.test.com

server
{
listen 80;
server_name www.test.com;
index index.html index.php;
root /export/home/www
if ($host = "www.abc.com") {
rewrite ^/(.*)$ http://www.test.com/$1 permanent
}
}

  

 

http://blog.csdn.net/donghustone/article/details/11524107

http://www.nginx.cn/784.html

  

本文由澳门新浦京娱乐场网站发布于澳门新浦京娱乐场网站,转载请注明出处:Linux实战教学笔记27,Web服务使用