热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx基础详细讲解

Nginx基础详细讲解1.nginx的特点作为HTTP服务软件的后起之秀,Nginx与它的老大哥Apache相比有很多改进之处,比如,在性能上,Nginx占用的系统资源更少,能支持更多的

Nginx基础详细讲解

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综合最强。

image_1cldcg3ena14c0snoi6b61pvr9.png-750.4kB

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

image_1cldchadp195n1qe815td8lnm1m.png-721.9kB

为什么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的映射文件

image_1cldirv39k41gfp11937su1rk41g.png-28.6kB

image_1cldivum2124p1eo71co3dpc1rh71t.png-6.6kB

10.1.6在windos上查看实验结果

image_1cldj9qbshs2nbn39scbvhm2a.png-23.9kB

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普通登录

image_1cldqtip8va1k0t18fmmr310oo41.png-40kB

10.2.6windos指定端口登录

image_1cldr16sd1oni95b1gfam5115nk71.png-20.6kB

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上实验结果

image_1cldoivh01rfc46p1l5jmsc1m5b2n.png-41.2kB

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上实验结果

image_1cldomi29h5j1hd31lqtt631e8934.png-18.9kB

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访问都是此页面



403 Forbidden


nginx/1.10.2

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默认匹配(默认优先级最低)

image_1clivu9v8cir187q15a5t2s15o796.png-15.7kB

11.4.2特殊正则与普通正则

image_1clj2t8q318ic3c1g0lils1n6mbq.png-13.9kB

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

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

image_1clj1ldololg1bd573q1i1h1eaga0.png-19.5kB

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

11.4.4精确匹配与特殊正则

image_1clj2qdoan2fp271o2l1fgr15dubd.png-22.9kB

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

11.4.5由此可以得出

image_1clj34nsv1uo7ie3i6p1vfm1fhbcn.png-191.2kB

顺序 匹配标识的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实际演练

image_1cljd2m3lm061ttu1hi8rc61qh09.png-38.5kB

13.6演练结果

image_1cljd4gpg1l93hkc69pvv79hi16.png-14.8kB

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等权限控制,导致客户端没有访问权限。

推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
author-avatar
手机用户2602914827
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有