Nginx的静态代理

Nginx的web请求的处理机制

  • Nginx结合多进程和异步机制对外提供服务,异步机制使用的是异步非阻塞机制,即AIO,Nginx的master进程会生成多个worker进程,master进程负责管理这些worker进程的生命周期、接受外部命令、解析perl脚本等工作,而worker进程则用于接受和处理用户的客户端请求;

  • 每个worker进程都是使用异步非阻塞方式处理多个客户端请求,当某个worker接到客户端的请求之后,其会调用IO进行处理,如果不能立即得到结果,worker机会去处理其他请求,当这个IO返回结果时,会通知worker进程,worker进程接收到通知后,就会挂起当前正在执行的事务,拿IO返回结果去响应给客户端,worker进程采用的是epoll事件驱动模型与IO进行通信,epoll模型底层采用的是"回调callback"替代了轮询,使用效率要高于select模型

使用到的命令

  • ngxin -h : 查看命令选项

  • ngxin -c file : 启动命令

  • ngxin -s stop/quite : 停止命令

  • nginx -s reload : 平滑重启

  • nginx -tq : 检测配置文件是否出错,常用

请求定位(开胃小菜)

这个其实不算核心功能,但作为一个引入为后面的讲解做一个铺垫还是很有必要的,在我们安装玩Nginx后,我们对其进行访问,就会得到一个"Welcome to nginx"的页面,为什么我们访问80端口就能访问到这个页面呢?其中是不是指定了默认的显示的页面,就想index.html那样?

  

首先我们找到安装目录下的conf文件夹下的nginx.conf配置文件:cat /usr/local/nginx/conf/nginx.conf

然后我们就可以看到以下配置:

  • listen:代表监听的端口

  • location :个人理解为一个拦截规则并对拦截到的请求做中括号里面的逻辑

  • location后跟的是 "/",表示拦截所有,也对资源定位有一个约束,后面有详细介绍

  • root:指定一个资源定位目录为 :html目录,也可以指定绝对路径

  • index:指定一个资源文件为:index.tml,后面还可以跟多个,第一个访问不了就访问第二个

  • 总结:拦截80端口的所有请求,指定路径为:根目录下的html目录下的index.html资源

  • 总结:拦截80端口的所有请求,指定路径为:根目录下的html目录下的index.html资源

下面我们来看看这个index.html是个什么页面

  

可以看到这个html,就是我们刚安装完毕后,测试访问时的那个页面,为什么要说这个东西呢?因为后面的知识点都要设计到nginx.conf中的拦截规则已经相应逻辑操作,在这里先打个铺垫。

静态代理

  • 经过前面的开胃小菜,我相信大家心里都对Nginx的大概逻辑流程有一点点的B数了

  • 动态代理:将所有的静态资源,比如【html、css、js、jpg、...】等资源存放到Nginx服务器,而不存放在应用服务器Tomcat中,当客户端对这些静态资源进行访问的时候,就可以不用去麻烦Tomcat了,我们Nginx直接将其响应给客户端,这样就大大降低了应用服务器Tomcat的负载压力,

  • 同时Nginx对于静态资源的处理相较于Tomcat,所有在很多场景里面,Ningx都是作为静态代理服务器,专门处理静态资源的请求响应;

下面我们动手操刀,一起来看看着静态代理

  • 首先我们配置我们的Nginx的配置文件,增添我们自己的拦截规则:

  • 这里值得注意的是,每个配置后面都是以";"结尾,不然识别不出来

  • 我配置的这个拦截规则是什么意思呢?拦截 “ip:port/bb/cc” 的请求,

  • 对拦截到的请求响应资源 : /opt/aa/bb/cc/default.html页面

  • 级联创建自定义资源存放目录 : mkdir /opt/aa/bb/cc -p

  • 进入cc目录,创建自定义资源default.html : echo "This is default page" > /opt/aa/bb/cc/default.html

  • 然后我们平滑重动Nginx : ngxin -s reload,然后开始访问测试:

location后跟的拦截规则是支持正则表达式的,下面我们来看看:

首先修改nginx.conf配置文件如下:

  

  • 正则表达式的运用在Nginx中都是以 ~ 打头 以$收尾 : ~ ...$

  • .:表示任意字符

  • *:0个或多个

  • \:转义,后面跟"."表示真正的"."

  • (jpg|png|css|js|html) :限定请求的资源类型为其中之一;

修改完配置文件,记得检测一下配置文件是否语法通过 : nginx -tq

  

发现有误,就要及时的改正:大括号和正则表达式之间有个空格,需要打出来

我们已经把拦截规则设立好了,我们的静态资源也得到位才能看效果,上传图片到 /opt/statics/images/

  

然后我们想一下,根据前面教的经验,这些图片根据我们的拦截规则,我们该发起什么样的URL才能访问?

http://92.168.159.169:80 / ?? / ?? ,我们知道我的资源访问规则是 Root指定的目录+拦截的目录

所以路径为? http://92.168.159.169:80 / images/6.jpg ,先测试一下行的同否

  

完美! 你,想通了吗?

首先我们的拦截规则是零个或多个任意字符 " ip:port//images/6" 符合我们的拦截规则

然后".jpg"也符合我们的请求资源类型约束规则

其次就是资源定位问题:

  • root属性所指定的目录 :/opt/statics

  • 此条请求的拦截规则中路径:images/6.jsp

  • 两个相并 : /opt/statics/images/6.jgp ,完美路径!

Nginx的静态代理的更多相关文章

  1. 用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面

    用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面 1.什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地 ...

  2. nginx的应用【静态代理、动静分离】

    Nginx主要应用: 静态web服务器 负载均衡 静态代理虚拟主机 静态代理 :把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高 ...

  3. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  4. 在ubuntu上面配置nginx实现反向代理和负载均衡

    上一篇文章(http://www.cnblogs.com/chenxizhang/p/4684260.html),我做了一个实验,就是利用Visual Studio,基于Nancy框架,开发了一个自托 ...

  5. Nginx实现静态资源的缓存

    1.1   需求 1.对静态文件进行缓存:html,js,css,png,gif,jpg,jpeg,bmp,swf. 2.对符合url规则的请求进行缓存. 3.针对某个url进行清除缓存. 1.1   ...

  6. 安装nginx 做反向代理

    nginx反向代理配置实例(前nginx+后apache)Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP ...

  7. Nginx +iis反向代理

    一:简介      Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所 ...

  8. Nginx + Apache 反向代理

    反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求均匀转发给多台内部Web服务器之一上, ...

  9. nginx的反向代理功能和缓存功能

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

随机推荐

  1. node-mysql连接数据库

    const mysql=require('mysql') const con=mysql.createConnection({ host:'localhost', user:'root', passw ...

  2. Delphi DBgrid 动态点击事件

    错误的写法: DBGrid1CellClick(DBGrid1.Columns[ DBGrid1.DataSource.DataSet.RecNo ]); //执行点击事件 正确的写法: DBGrid ...

  3. jsp引擎是什么

    1.JSP引擎 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有webLogic和Tomcat.把这些支持JSP的web服务器配置好后,就可以在客户端通过浏览器来访问JSP页面了. 2.J ...

  4. 建模+线性dp——cf1201D

    这类题目要首先把模型建立起来,挑选一个好的状态能让dp方程简化很多 /* dp[i][0]表示从右到左,最后停在左端 dp[i][1]表示从左到右,最后停在右端 dp[i+1][0]=min(dis( ...

  5. BulkLoad加载本地文件到HBase表

    BulkLoad加载文件到HBase表 1.功能 将本地数据导入到HBase中 2.原理 BulkLoad会将tsv/csv格式的文件编程hfile文件,然后再进行数据的导入,这样可以避免大量数据导入 ...

  6. Shell基本正则表达式和扩展正则表达式

    BRE和ERE的区别 基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已. BRE: 只有^$.*[]是元字符 ERE: ^$.[]*+() ...

  7. HTML-参考手册: Px、Em 换算工具

    ylbtech-HTML-参考手册: Px.Em 换算工具 1.返回顶部 1. Px.Em 换算工具 以下工具提供了em和px的换算工具. 第一个输入框:设置了网页默认的字体像素 (通常 16px) ...

  8. 使用U盘或在本地电脑作为git远程仓库进行托管

    情景描述: 当有两台电脑需要共同维护一段代码,其中一台电脑不希望(或者不能)通过网络的方式进行访问git仓库(即不使用github),那么可以使用U盘作为介质将其作为远程仓库,或者使用局域网中一台电脑 ...

  9. Linux用户空间内存区域的匿名映射

    1 在调用mmap系统调用时,可以指定的标志(flag)参数: 1: #define MAP_SHARED 0x01 /* Share changes */ 2: #define MAP_PRIVAT ...

  10. Linux内存管理(深入理解Linux内核)

    Linux的内存管理,实际上是借助80x86的硬件分段和分页电路,将逻辑地址转化为物理地址的. 物理内存中,有一部分是一直(Permanently)映射给内核使用的,这部分主要用于保存内核的代码,以及 ...