一、fastcgi代理

1、示意图

2、fastcgi 代理配置语法

a、设置PHP服务代理地址

Syntax:    fastcgi_pass address;
Default: —
Context: location, if in location

address可以是域名,ip:port ,如:

fastcgi_pass localhost:9000;

或者Linux下的socket

fastcgi_pass unix:/tmp/fastcgi.socket;

Nginx和PHP的进程是在同一台机器上的话,那么也可以选择Linux下的socket,进程间通信的方式。

b、设置主页

Syntax:    fastcgi_index name;
Default: —
Context: http, server, location

fastcgi_index 用来设置首页文件,一般要结合 fastcgi_param一起来设置。

设置变量

Syntax:    fastcgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location

通过fastcgi_param设置变量,并将设置的变量传递到后端的FastCGI server。

parameter 为参数名

value 为参数值

如果 fastcgi_index 和 fastcgi_param 设置成下面这样

fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;

如果访问的是首页,那么传递到后端的 SCRIPT_FILENAME = /home/www/scripts/php/index.php

如果访问的不是首页, $fastcgi_script_name 会根据所访问的页面进行变化。

二、对比 http_proxy 代理和 http_fastcgi 代理

ngx_http_proxy_module ngx_http_fastcgi_module 作用
proxy_pass fastcgi_pass 代理的是哪一个服务
proxy_busy_buffers_size fastcgi_busy_buffers_size 忙时 buffer的最大值
proxy_buffer_size fastcgi_buffer_size 临时存储Response头信息的大小

http_proxy :通用语 HTTP 协议的代理。

http_fastcgi : 针对于 fastcgi 这种接口模式来进行反向代理。

fastcgi 的配置模式 跟 proxy 的配置模式大同小异,大部分可以通用。

三、fastcgi 缓存

1、示意图

2、配置fastcgi缓存的存储路径,大小等

Syntax:    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http

3、配置缓存的维度

Syntax:    fastcgi_cache_key string;
Default: —
Context: http, server, location

即缓存什么,几乎所有的http协议 请求头都可以缓存。定义的越细致缓存的维度也会越大,越准确。

4、使用/关闭fastcgi缓存

Syntax:    fastcgi_cache zone | off;
Default:
fastcgi_cache off;
Context: http, server, location

5、定义不同的状态码的生命周期

Syntax:    fastcgi_cache_valid [code ...] time;
Default: —
Context: http, server, location

6、示例:

a、配置Ngnix缓存

//配置缓存的路径,大小等
fastcgi_cache_path /opt/app/cache levels=1:2 keys_zone=chrdai:100m max_size=1g inactive=60m; server {
listen 8090;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
root /opt/app/wdcode;
index index.php index.html index.htm; location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
if ( $request_uri ~ "/admin/" ) {
set $is_nocache yes;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_cache_key $scheme$request_method$host$request_uri$is_args$args;
fastcgi_cache chrdai;
fastcgi_cache_valid 200 60m;      //添加一个响应头,方便前端页面查看是否命中了缓存
add_header X-Cache-Source $upstream_cache_status;
}
}

下面的这些都是 Nginx 的内置变量

  • $scheme:请求的协议。
  • $request_method :请求的方法。
  • $host :请求的主机名。
  • $request_uri :请求的路径。
  • $is_args 和 $args :请求的参数

配置语法几乎和 proxy的配置大同小异,可以先参考我关于proxy的相关博客:https://www.cnblogs.com/chrdai/protected/p/11337238.html

fastcgi_cache_key 缓存维度设置的影响

fastcgi_cache_key 设置的越详细越好,这样子缓存的维度就会更广,例如:

如果将 fastcgi_cache_key 设置为 $scheme$host ,也就是说只缓存协议和主机,其它的请求路径就都不会关系了,当我们访问 http://192.168.0.133:8090/time.php 和 访问 http://192.168.0.133:8090/wp-admin/profile.php 显示的页面是一样的。

b、新建页面文件

在项目目录下(/opt/app/wdcode)下新建一个time.php文件,写入如下内容。

<?php
echo date('Y-m-d H:i:s', time());

c、访问页面,看测试效果。

访问 http://192.168.0.133:8090/time.php , 发现不管怎么刷新,都是显示的第一次的时间,不会发生改变。

发现响应头显示仪有命中缓存。

如果不想使用缓存,就将 fastcgi_cache 关闭就可以啦。

fastcgi_cache off

四、后端服务添加no-cache头对于Nginx缓存的影响

当后端服务器设置了 Cache-Control:no-cache 等不需要缓存的头信息时,我们的Nginx会遵从http的请求头要求,不进行缓存,也就是说就算我们设置了fastcgi_cache,也不会缓存这些页面。

示例:

我们访问我们安装好的这个 wordpress 项目,并配置fastcgi缓存,就会发现主页永远不会被缓存。

当然我们也可以对Nginx进行配置,来忽略一些头信息,从而安装Nginx的缓存规则来进行。

配置如下:

fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

再次请求相同的页面,发现已经缓存了。

·

本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/protected/p/11374847.html

fastcgi代理的更多相关文章

  1. Nginx + CGI/FastCGI + C/Cpp

    接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...

  2. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

       FastCGI编程包括四部分:初始化编码.接收请求循环.响应内容.响应结束循环. FCGX_Request request; FCGX_Init(); ); FCGX_InitRequest(& ...

  3. 基于LNMP(fastcgi协议)环境部署、原理介绍以及fastcgi_cache配置以及upstream模块负载均衡讲解

    ngx_http_proxy_module只能反向代理后端使用HTTP协议的主机.而ngx_http_fastcgi_module只能反向代理后端使用FPM或者使用FastCGI协议的客户端. 一.部 ...

  4. nginx fastcgi配置

    1.1 nginx概述nginx简介Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/P ...

  5. 转:nginx+CGI/FASTCGI

    简介版: 1.fastcgi与cgi区别:fastcgi通过线程来响应请求,而cgi对每个请求生成一个进程. 2.典型nginx数据传输过程:user->nginx->本地socket(请 ...

  6. 【转】Nginx + CGI/FastCGI + C/Cpp

    接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...

  7. CentOS下搭建nginx+php环境

    一.下载安装nginx 参见 http://www.cnblogs.com/kreo/p/4378086.html 不再赘述 二.下载php #下载 wget http://bg2.php.net/d ...

  8. LNMP(linux+nginx+mysql+php)服务器环境配置

    一.简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为 “engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服 ...

  9. Nginx/Apache图片缩略图技术

    1,目的 2,使用方式 3,Nginx + Linux 缩略图实现 3.1,原理 3.2,nginx配置实现 3.3,例子 4,Apache + Windows缩略图实现 4.1,环境 4.2,原理 ...

随机推荐

  1. MUI 支付案例(支付宝/微信)

    首先说明一下,本文借鉴了多位博主的文章,所以会看到很多一样的代码. 写这篇博客主要目的是为了便于后期查看(不好之处,敬请留言吐槽),案例经本人测试,是可以使用的. 先上效果图 前端HTML代码: &l ...

  2. 6.SpringMVC 配置式开发-处理器

    处理器除了实现Controller 接口外,还可以继承自一些其他的类,来完成一些特殊的功能 1.继承自AbstractController类 若处理器继承自AbstractController类,那么 ...

  3. paypal支付 NVP支付 paypal 手续费 GetTransactionDetails

    主要内容: 本文章主要讲解的是NVP的对接,以最简单的接口案例,讲解一下对接NVP的方案. 先提供下paypal 官方文档的主要功能对接说明,如下 1.请求API 服务器端点 描述 https://a ...

  4. chrome上一些好用的插件

    1. Super Auto Refresh Plus - 这个插件可以自动刷新网页 2. 屏蔽百度推广 - 这个插件可以屏蔽百度搜索的推广广告

  5. 关于Java的Object.clone()方法与对象的深浅拷贝

    文章同步更新在个人博客:关于Java的Object.clone()方法与对象的深浅拷贝 引言 在某些场景中,我们需要获取到一个对象的拷贝用于某些处理.这时候就可以用到Java中的Object.clon ...

  6. ECMAScript 6 入门——ES6 声明变量的六种方法

    ES6 声明变量的六种方法 ES5 只有两种声明变量的方法:var命令和function命令.ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和cla ...

  7. Python 列表和元组 (2) 持续更新

    数据结构就是数据的集合.Python最基本的数据结构就是序列,每个元素都会被分配一个元素的位置,也可以称为索引.注意索引都是从0开始的. Python包含6种内建的序列,分别是列表.元组.字符串.Un ...

  8. Idea中Module is not specified解决办法

    打开idea,想跑一个类,但是,给我报了一个红叉: 当我点击run的时候,弹出来一个框: “Error:Module not specified”  Module 未指定 “这个原因是项目文件夹有修改 ...

  9. 智能指针unique_ptr记录

    unique_ptr 对对象独有管理,无法复制,共享,值传递,可以使用move语义来转移控制权. std::default_delete<int> d; std::unique_ptr&l ...

  10. PHP mysqli_get_host_info() 函数

    定义和用法 mysqli_get_host_info() 函数返回 MySQL 服务器主机名和连接类型. 语法 mysqli_get_host_info(connection); 返回 MySQL 服 ...