4-2-面试必备-nginx实现网站动态php请求代理

上节课讲了nginx代理服务器可以修改传递给后端服务器和客户端的请求报文,其中还有
proxy_pass_header field;---能够允许nginx把由后端被代理服务器发来的响应报文的指定首部和值直接传递给客户端。
proxy_pass_request_body on|off;
proxy_pass_request_headers on|off;---能否把请求报文的某些首部直接传递给后端服务器,默认on

nginx代理服务器:1、代理服务器本地没有缓存的时候,通过到后端服务器的网络IO和后端服务器的本地磁盘IO才能到达代理服务器2、后端服务器的文件结构是树状结构,通过根一级一级的去查找,而代理服务器的缓存数据结构虽然也是树状结构,但是是固定等级的路径,而每级路径的名字是哈希码
nginx代理服务器的缓存有两种:一种是内存中的hash表,根据用户请求来去hash表中查找,速度快,另外一种是磁盘上的多级目录1:1:2,如果hash表中有,就遍历
缓存空间要先定义后使用,多级目录也要先定义,哪一个地方放这些缓存
有些情况是不需要缓存的,例如:用户提交表单的post方法不需要,put上传文件不需要,delete删除文件不需要,f5+shift强刷(告诉代理服务器不要缓存),httpv1、httpv2等版本不同的缓存,ftp、http不同协议可能请求的url相同但是请求内容不同,也不需要缓存,后端服务器挂了也不能缓存,缓存满了也不能缓存,有些动态信息也不能缓存;

需不需要缓存,要看用户能不能接受过期的信息

接上节课的课件:
3、proxy_cache_path
定义可用于proxy功能的缓存;Context:http
4、proxy_cache zone | off
指明要调用的缓存,或关闭缓存机制;Context:http,server,location
5、proxy_cahe_key string;
缓存中用于"键"的内容;
默认值:proxy_cache_key $scheme$proxy_host$request_url;
6、proxy_cache_valid [code ...] time;
定义对特定响应码的响应内容的缓存时长;
定义在http{...}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
定义在需要调用缓存功能的配置段,例如server{...};
proxy_cache pxycache;
proxy_cache_key $request_url;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
7、proxy_cache_use_state---定义对于那些过期的内容响应与否怎么响应,默认off,只要后端服务器联系不上就不能使用缓存来响应。
8、proxy_cache_methods GET|HEAD|POST...;---post没有必要缓存,默认是get和head,可以不用定义
9、proxy_hide_header field;
10、proxy_connect_timeout time;---定义向服务器一侧发请求(建立三次握手的连接)超时时间。
默认为60s,最长为75s;
11、proxy_read_timeout time;---定义两次重传之间的时间间隔,而不是多长时间完成请求,读取后端服务器给代理服务器的响应的超时时间
12、proxy_send_timeout time;---设置向服务端,向被代理服务端发请求报文时的超时时长,默认60s

ngx_http_headers_modules模块:
向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值;
1、add_header name value [always];
添加自定义首部;
add_header X-Via $server_addr;
add_header X-Accel $server_name;
2、expires [modified] time;
expires epoch | max|off;
用于定义Expire或Cache-Control首部的值;



下边是如何定义缓存的演示:
vim nginx.conf---放在http上下文中,添加下列一行
proxy_cache_paht /data/nginx/cache levels=1:1:1 keys_zone=pcache:10m max_size=2g;
定义缓存的存放目录,指明是几级子目录(每个子目录截取URL多少个字符),在内存中取个名字以及大小,存放缓存目录的磁盘空间最大是多少
mkdir -pv /data/nginx/cache---会自动按需创建缓存目录
nginx -s reload
然后编辑自定义的虚拟主机配置文件:
vim ilinux.conf
server {
listen 80;
server_name www.ilinux.io;
proxy_cache pcache;---使用pcache这个缓存,上边已经定义过了下边的两个location都生效。
proxy_cache_key $request_uri;
proxy_cache_method GET POST;
proxy_cache_min_uses 1;---缓存内部的缓存项在指定非活动时间内(默认10min)至少访问到几次认为是活动项,如果少于定义的次数,就把它清理掉,默认是1次
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_state http_502;

location / {---没有root就没法提供web服务,但是我们是反代服务器,不需要web功能
    proxy_pass http://192.168.10.11:80;---可以是域名,可以是ip地址,后边要不要跟斜线,如果没有斜线,是把能匹配到的补到后边,如果有斜线,是替换斜线
    proxy_set_header X-Real-IP $remote_addr;---把客户端真实地址添加到报文首部发给后端主机
    add_header X-Via $server_addr;---把真实后端服务器地址发给客户端

}
location ~* \.(jpg|jpeg|png)$ {---这是另一台后端服务器了UPSS2,使用了正则表达式匹配的话,url后边不能加斜线
    proxy_pass http://192.168.10.12:80;
}

}
定义好缓存后,就可以进入到我们创建的缓存目录中,查看缓存的信息了
cat /data/nginx/cache/9/d/7/**---可以查看到缓存信息

httpd+php有两种方式:1、把php做成httpd的模块2、把php做成fpm server
而nginx只能用第二种方式fpm server

lnmp架构
lnamp也是不错的架构nginx apache+php mysql

原文地址:https://blog.51cto.com/13852573/2368257

时间: 2024-10-20 06:49:17

4-2-面试必备-nginx实现网站动态php请求代理的相关文章

浅谈大型网站动态应用系统架构【转】

浅谈大型网站动态应用系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: l l l l l l

Nginx提供代理服务(网站代理),nginx实现负载均衡集群和高可用集群、nginx实现网站动静页面分离

静态页面:用静态编程语言编写的页面为静态页面,支持静态页面的语言为,css html  xml,不手动改变源代码,页面就不会改变. 动态页面:用动态编程语言编写的页面为动态页面,支持动态页面的语言有,java php .net,根据用户访问的时间和用户的不同显示不同的页面. nginx网站服务代理 实验(一)实验目的:nginx实现反向代理代替公网用户访问私网的web页面. 实验环境: 内网web服务器: IP地址 :192.168.1.1  主机名:fanlj nginx代理服务器:IP地址:

Java常用英语汇总(面试必备)

Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口,使用权) algorithm                     n.算法 ['.lg.riem] annotation                     [java]代码注释 [.n.u'tei..n] anonymous                

使用nginx部署网站

前面的话 如果服务器只需要放置一个网站程序,解析网站到服务器的网站,网站程序监听80端口就可以了.如果服务器有很多应用,借助nginx不仅可以实现端口的代理,还可以实现负载均衡.本文将详细介绍前端及nodeJS项目在服务器配置时需要用到的nginx配置 安装 [卸载nginx] 在介绍如何安装nginx之前,先要介绍如何卸载nginx.因为nginx不正确的安装,导致无法正常运行,所以需要卸载nginx sudo apt-get remove nginx nginx-common # 卸载删除除

面试必备:ArrayList源码解析(JDK8)

面试必备:ArrayList源码解析(JDK8) https://blog.csdn.net/zxt0601/article/details/77281231 概述很久没有写博客了,准确的说17年以来写博客的频率降低到一个不忍直视的水平.这个真不怪我,给大家解释一下. 一是自从做了leader,整天各种事,开会,过需求,无限循环.心很累,时间也被无线压榨 二 我本身也在学习一些其他的技术,比如ReactNative,也看了半天的kotlin,撸了几个groovy脚本.gradle插件. 三 是打

Nginx+Tomcat 实现动态分离,负载均衡

什么是动静分离 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器.用户请求的动态文件比如servlet,jsp则转发给Tomcat,Jboss服务器处理,这就是动静分离.这也是反向代理服务器的一个重要的作用. 本文的动静分离主要是通过nginx+tomcat来实现,其中nginx处理图片.html.JS.C

nginx 静态网站配置

/************************************************************************************** * nginx 静态网站配置 * 说明: * 配置下面的配置中包括python.php.静态网站的配置,配置静态网站主要目的是为了以后 * 能够跑Markdown生成的静态网站. * * 2016-8-7 深圳 南山平山村 曾剑锋 **********************************************

nginx配置网站所有目录下文件http认证

要实现网站所有目录均通过验证才能访问,可将nginx配置文件加为如下内容: location ^~ / { auth_basic "Authorized users only"; auth_basic_user_file wttxAuth.conf; } 这样访问网站及网站下所有文件均出现提示验证了. 注意,加上认证之后该目录下的PHP将不会被解析,会出现下载提示,如果想可以解析PHP可以将上面的配置改为: location ^~ / { location ~ .*.(php|php5

新站长必备 各大网站收录入口,各大搜索引擎提交, 搜索引擎提交地址

网站建设完成之后,第一件事情就是向各大搜索引擎提交新网站.已更好的分享自己的文章,获取更多的访客. 搜索引擎提交包括提交给搜索引擎爬虫和提交给分类目录. 提交给搜索引擎爬虫的目的是让搜索引擎将网站收录到索引数据库.检验网站是否被搜索引擎收录的办法是直接在搜索引擎中搜索网址,查看能否找到网站结果,也可以通过输入命令”site:hoar.me”获得具体的页面收录数量. 提交给搜索引擎分类目录有两个目的:一是为了用户通过分类目录检索到网站,二是为网站获得一个高质量的外部链接,有助于增加网站的链接广度.