Nginx基础详细讲解

≡放荡痞女 提交于 2019-12-25 00:31:25

Nginx基础详细讲解

链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ
提取码:migq
复制这段内容后打开百度网盘手机App,操作更方便哦

1.nginx的特点

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

2.Nginx是什么?

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

3.Nginx的重要特性

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

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

4.1作为Web服务软件

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

4.2反向代理或负载均衡服务

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

4.3前端业务数据缓存服务

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

5.Web 服务产品性能对比测试

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

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

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

  • Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid,Memcached软件采用的都是epoll模型。
  • 处理大量连接的读写时,Apache所采用的select网络I/O模型比较低效
指标 select(同步网络I/O模型) epoll(异步网络I/O模型)
性能 随着连接数的增加性能急剧下降。处理成千上万并发连接数时,性能很差 随着连接数的增加,性能基本上没有下降。处理成千上万并发连接时,性能很好
连接数 连接数有限制,处理的最大连接数不超过1024。如果要处理的连接数超过1024个,则需要修改FD SETSIZE宏,并重新编译 连接数无限制
内在处理机制 线性轮询 回调callback
开发复杂性

6.nginx的编译安装部署

6.1用本地yum仓库安装依赖包

[root@Nginx /]# yum install -y pcre-devel openssl-devel gcc gcc-c++ make curl
[root@Nginx /]# rpm -qa pcre-devel openssl-devel gcc gcc-c++ make curl
openssl-devel-1.0.1e-15.el6.x86_64
gcc-4.4.7-4.el6.x86_64
gcc-c++-4.4.7-4.el6.x86_64
pcre-devel-7.8-6.el6.x86_64
make-3.81-20.el6.x86_64
curl-7.19.7-37.el6_4.x86_64

6.2创建程序用户

[root@Nginx /]# useradd -s /sbin/nologin -M www
[root@Nginx /]# id www
uid=500(www) gid=500(www) groups=500(www)

6.3#解压缩

[root@Nginx yang]# ls
nginx-1.10.2.tar.gz
[root@Nginx yang]# tar xf nginx-1.10.2.tar.gz -C /usr/src/

6.4预配置

[root@Nginx yang]# cd /usr/src/nginx-1.10.2/
[root@Nginx nginx-1.10.2]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
以下省略。。。

6.5编译和安装

[root@Nginx nginx-1.10.2]# make && make install
以下省略。。。

6.6给命令做软连接,以便PATH能找到

[root@Nginx nginx-1.10.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

6.7启动nginx

[root@Nginx nginx-1.10.2]# /usr/local/nginx/sbin/nginx

特别提示:

  • /usr/local/nginx/sbin/nginx nginx启动
  • /usr/local/nginx/sbin/nginx -s reload nginx平滑重启命令
  • /usr/local/nginx/sbin/nginx -s stop nginx停止服务命令

7.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服务自身问题,根据输出在排错

8.Nginx主配置文件nginx.conf(修改配置文件)

[root@yangwenbo conf]# pwd
/usr/local/nginx/conf
[root@yangwenbo conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf
[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;    #worker进程的数量(服务器有几核就写几,不能超过核说的二倍)
events {    #事件区块开始
    worker_connections  20480;     #每个worker进程支持的最大连接数的线程
}           #事件区块结束
http {      #http区块开始
    include       mime.types;       #Nginx支持的媒体类型库文件包含(是把mime.types文件里的内容导入到当前位置,与把mime.types里的文件内容直接写入当前效果是一样的)
    default_type  application/octet-stream;     #默认的媒体类型
    sendfile        on;         #开启文件的高效传输功能
    keepalive_timeout  65;      #默认链接保持65秒
    server {          #网站配置区域(一个server就代表一个虚拟网站)
        listen       80;           #提供服务的端口,默认80
        server_name  localhost;    #提供服务的“域名”(网页名)
        location / {
            root   html;           #网页的根目录路径
            index  index.html index.htm;
            #首页  #首页文件
        }
    }
}

修改系统最大打开文件数

[root@yangwenbo ~]# ulimit -n           #查看系统最大同时可以打开几个文件
1024
[root@yangwenbo ~]# ulimit -n 20480
20480                                   #临时修改系统最大同时打开文件的上限
[root@yangwenbo ~]# ulimit -n           #即时生效
20480

9.虚拟主机概念和类型介绍

9.1虚拟主机概念

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

9.2虚拟主机类型

基于域名的虚拟主机:

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

基于端口的虚拟主机

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

基于IP的虚拟主机

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

10.项目实战

10.1项目实战(1)

10.1.1已知Nginx配置文件

[root@yangwenbo conf]# pwd
/usr/local/nginx/conf
[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.yangwenbo.com;  #修改域名
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

10.1.2平滑重启Nginx并检查关闭防火墙

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload      #平滑重启Nginx
[root@yangwenbo conf]# service iptables stop      #关闭防火墙
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]

10.1.3修改首页文件内容

[root@yangwenbo html]# pwd
/usr/local/nginx/html
[root@yangwenbo html]# ls
50x.html  index.html
[root@yangwenbo html]# rm -rf *
[root@yangwenbo html]# echo "`hostname -I` www.yangwenbo.com" > index.html
[root@yangwenbo html]# cat index.html
192.168.0.105  www.yangwenbo.com
[root@yangwenbo html]# echo "`hostname -I` www.yangwenbo.com" >> /etc/hosts      #追加到映射文件里
[root@yangwenbo html]# cat /etc/hosts | tail -1
192.168.0.105  www.yangwenbo.com

10.1.4Linux 实验

[root@yangwenbo conf]# curl www.yangwenbo.com
192.168.0.105  www.yangwenbo.com

10.1.5修改windos的映射文件

10.1.6在windos上查看实验结果

10.2项目实战(2)

10.2.1已知Nginx配置文件

[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       81;   #修改其端口为81
        server_name  www.yangwenbo.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

10.2.2平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

10.2.3普通登录

[root@yangwenbo html]# curl www.yangwenbo.com
curl: (7) couldn't connect to host    #已无法正常登录

10.2.4指定端口登录

[root@yangwenbo html]# curl www.yangwenbo.com:81 #指定端口为81(Nginx默认端口为80)
192.168.0.105  www.yangwenbo.com

10.2.5windos普通登录

10.2.6windos指定端口登录

10.3项目实战(3)

10.3.1已知Nginx配置文件

[root@yangwenbo conf]# pwd
/usr/local/nginx/conf
[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.yangwenbo.com;
        location / {
            root   html/yang;   #修改根目录路径为yang 
            index  index.html index.htm;
        }
    }
}

10.3.2平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

10.3.3在windos上实验结果

10.3.4修改首页文件内容

[root@yangwenbo html]# pwd
/usr/local/nginx/html
[root@yangwenbo html]# ls
index.html  
[root@yangwenbo html]# rm -rf *
[root@yangwenbo html]# mkdir yang
[root@yangwenbo html]# echo "`hostname -I` www.yangwenbo.com" > yang/index.html
[root@yangwenbo html]# cat yang/index.html
192.168.0.105  www.yangwenbo.com

10.3.5再次在windos上实验结果

10.4项目实战(4)

10.4.1已知Nginx配置文件

[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  logs.yangwenbo.com;
        location / {
            root   html/bo;
            index  index.html index.htm;
        }
    }
server {
        listen       80;
        server_name  123.yangwenbo.com;
        location / {
            root   html/wen;
            index  index.html index.htm;
        }
    }
server {
        listen       80;
        server_name  www.yangwenbo.com;
        location / {
            root   html/yang;
            index  index.html index.htm;
        }
    }
}

10.4.2平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

10.4.3修改首页文件内容(现在共计3个域名)

[root@yangwenbo html]# pwd
/usr/local/nginx/html
[root@yangwenbo html]# ls
yang
[root@yangwenbo html]# mkdir bo
[root@yangwenbo html]# echo "`hostname -I` logs.yangwenbo.com" > bo/index.html
[root@yangwenbo html]# cat bo/index.html
192.168.0.105  logs.yangwenbo.com
[root@yangwenbo html]# echo "`hostname -I` logs.yangwenbo.com" >> /etc/hosts                  #追加到映射文件里
[root@yangwenbo html]# cat /etc/hosts | tail -1
192.168.0.105  logs.yangwenbo.com
[root@yangwenbo html]# mkdir wen
[root@yangwenbo html]# echo "`hostname -I` 123.yangwenbo.com" > wen/index.html
[root@yangwenbo html]# cat wen/index.html
192.168.0.105  123.yangwenbo.com
[root@yangwenbo html]# echo "`hostname -I` 123.yangwenbo.com" >> /etc/hosts                    #追加到映射文件里
[root@yangwenbo html]# cat /etc/hosts | tail -1
192.168.0.105  123.yangwenbo.com

10.4.4Linux 实验结果(域名)

[root@yangwenbo html]# curl logs.yangwenbo.com
192.168.0.105  logs.yangwenbo.com
[root@yangwenbo html]# curl 123.yangwenbo.com
192.168.0.105  123.yangwenbo.com
[root@yangwenbo html]# curl www.yangwenbo.com
192.168.0.105  www.yangwenbo.com

10.4.5Linux 实验结果(IP)

[root@yangwenbo html]# curl 192.168.0.105   #只指定IP,默认访问第一个域名
192.168.0.105  logs.yangwenbo.com

10.5项目实战(5)

10.5.1已知Nginx配置文件

[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.yangwenbo.com;
        location / {
            root   html/bo;
            index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  123.yangwenbo.com;
        location / {
            root   html/wen;
            index  index.html index.htm;
        }
    }
    server {         #防黑域名
        listen       80 default_server;  #IP用户访问默认进入此页面
        server_name  logs.yangwenbo.com;
        location / {
        return 403;   #错误代码  
        }
    }
}

10.5.2平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

10.5.3Linux 实验结果

[root@yangwenbo html]# curl www.yangwenbo.com
192.168.0.105  www.yangwenbo.com
[root@yangwenbo html]# curl 123.yangwenbo.com
192.168.0.105  123.yangwenbo.com
[root@yangwenbo html]# curl 192.168.0.105   #只要是IP访问都是此页面
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.10.2</center>
</body>
</html>

10.6项目实战(6)

10.6.1创建Nginx副配置文件

[root@yangwenbo conf]# pwd
/usr/local/nginx/conf
[root@yangwenbo conf]# mkdir extar
[root@yangwenbo conf]# cat extar/www.conf
server {
        listen       80;
        server_name  www.yangwenbo.com;
        location / {
            root   html/bo;
            index  index.html index.htm;
        }
    }
[root@yangwenbo conf]# cat extar/123.conf
server {
        listen       80;
        server_name  123.yangwenbo.com;
        location / {
            root   html/wen;
            index  index.html index.htm;
        }
    }

10.6.2已知Nginx主配置文件

[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extar/www.conf;    #文件导入
    include extar/123.conf;    #文件导入
    server {
        listen       80 default_server;
        server_name  logs.yangwenbo.com;
        location / {
        return 403;
        }
    }
}

10.6.3平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

10.6.4Linux 实验结果

[root@yangwenbo conf]# curl www.yangwenbo.com
192.168.0.105  www.yangwenbo.com
[root@yangwenbo conf]# curl 123.yangwenbo.com
192.168.0.105  123.yangwenbo.com

10.7项目实战(7)

10.7.1创建Nginx副配置文件

[root@yangwenbo conf]# cat extar/status.conf
    server {
        listen       80;
        server_name  status.yangwenbo.com;
        location / {
           stub_status on;      #开启状态信息功能
        access_log off;         #不记录访问日志
        allow 192.168.0.105;    #只允许某IP地址访问
        deny all;               #禁止其他IP访问
        }
    }

10.7.2已知Nginx主配置文件

[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include extar/www.conf;
    include extar/123.conf;
    include extar/status.conf;    #文件导入
    server {
        listen       80 default_server;
        server_name  logs.yangwenbo.com;
        location / {
        return 403;
        }
    }
}

10.7.3加入本机映射文件

[root@yangwenbo conf]# echo "`hostname -I` status.yangwenbo.com" >> /etc/hosts
[root@yangwenbo conf]# cat /etc/hosts | tail -1
192.168.0.105  status.yangwenbo.com

10.7.4平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

10.7.5Linux 实验结果

[root@yangwenbo conf]# curl status.yangwenbo.com
Active connections: 1    #处于活动中的连接为1个(最低一个)
server accepts handled requests
 92 92 60 
Reading: 0 Writing: 1 Waiting: 0

以上所示详解

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

11. Nginx location

11.1创建Nginx副配置文件

[root@yangwenbo extar]# pwd
/usr/local/nginx/conf/extar
[root@yangwenbo extar]# cat y.conf 
server {
        listen       80;
        server_name  www.yunjisuan.com;
    location / {               #默认匹配
        return 401;       
        }
    location = /images/ {      #精确匹配
        return 402;
    }
    location /documents/ {     #模糊匹配(字符串前缀匹配,必须从根开始)
        return 404;
    }
    location ^~ /images/ {     #特殊正则匹配
        return 501;
    }
    location ~* \.(gif|jpg|jpeg)$ {  #普通正则匹配 
        return 500;
    }
  }

11.2已知Nginx主配置文件

[root@yangwenbo conf]# pwd
/usr/local/nginx/conf
[root@yangwenbo conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    include extar/y.conf;    #文件导入
    server {
        listen       80 default_server;
        server_name  logs.yangwenbo.com;
        location / {
        return 403;
        }
    }
}

11.3平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

11.4实验如下

11.4.1默认匹配(默认优先级最低)

11.4.2特殊正则与普通正则

由此证明:特殊正则优先级高于普通正则

11.4.3普通正则与模糊匹配(字符串前缀匹配)

由此证明:普通正则优先级高于模糊匹配(字符串前缀匹配)

11.4.4精确匹配与特殊正则

**由此证明:精确匹配优先级高于特殊正则

11.4.5由此可以得出

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

12.Nginx rewrite 语法

12.1regex常用正则表达式说明

字符 描述
/ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。例如,“\n”匹配一-个换行符,序列“ ”和“$”则匹配“$”
^ 匹配输人字符串的起始位置,如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“r之后的位置
$ 匹配输入字符串的结束位置,如果设置了RegExp对象的Multiline属性,$也匹配“\n” 或“\r”$之前的位置
* 匹配前面的字符零次或多次,例如,01能匹配“0”及“0111",等价于{0,}
+ 匹配前面的字符一次或多次,例如,“01+” 能匹配“01”及“011", 但不能匹配“0”, .+等价于{1,}
? (1)匹配前面的字符零次或一次,例如,“do(es)?”可以匹配“do”或“does”中的“do",.?等价于{0,1}。
? (2)当该字符紧跟在任何一个其他限制符( *.+?. {n},{n}, {n,m})的后面时,匹配模式是非贪婪模式的,非贪婪模式会尽可能少地匹配所搜索的字符串,而默认的贪婪模式则会尽可能多地匹配所搜索的字符串,例如,对于字符串“0000” ,“o+?”将匹配单个“o”. 而“o+” 将匹配所有“o”
. 匹配除“\n”之外的任何单个字符,要匹配包括“\n”在内的任何字符,请使用像“[\m]”这样的模式
( pattern ) 匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0..$9属性获取小括号中的匹配内容。要匹配圆括号字符,请使用“(”或“)”

12.2rewrite指令的最后一项参数flag标记的说明

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

12.3Nginx rewrite 的企业应用场景

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

13.Nginx访问认证

13.1安装依赖软件包

[root@yangwenbo /]# yum -y install httpd
[root@yangwenbo /]# which htpasswd
/usr/bin/htpasswd

13.2使用apache的htpasswd软件,来创建加密的账号和密码

[root@yangwenbo /]# htpasswd -bc /usr/local/nginx/conf/htpasswd yunjisuan 123123                 #htpasswd是文件的名字
Adding password for user yunjisuan
[root@yangwenbo /]# cat /usr/local/nginx/conf/htpasswd
yunjisuan:msULyJwjSSlEY       #账号密码是加密的

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

[root@yangwenbo extar]# pwd
/usr/local/nginx/conf/extar
[root@yangwenbo extar]# cat status.conf 
    server {
        listen       80;
        server_name  status.yangwenbo.com;
        location / {
           stub_status on;
       access_log off;
       auth_basic  "welcome to yangwenbo";
       auth_basic    #验证的基本信息选项(后边跟着的双引号里就是验证窗口的名字)
       auth_basic_user_file    /usr/local/nginx/conf/htpasswd;
       #auth_basic_user_file    #验证的用户文件(后边根账号密码文件的绝对路径)
        }
    }

13.4平滑重启Nginx

[root@yangwenbo conf]# /usr/local/nginx/sbin/nginx -s reload

13.5实际演练

13.6演练结果

14.Nginx相关问题解答

14.1Tengine和Nginx是什么关系?

Tengine是淘宝开源Nginx的分支,官方站点为http://tengine.taobao.org/

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

Nginx配置文件里没有配置默认首页参数,或者首页文件在站点目录下没有如下内容:index index.php index.html index.htm;

  • 系统默认403特殊报错,如果在配置文件里加上autoindex on;在浏览器上就可以访问根下所有目录文件,甚至下载,极度危险!!!

  • 站点目录或内部的程序文件没有Nginx用户访问权限
  • Nginx配置文件中设置了allow,deny等权限控制,导致客户端没有访问权限。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!