Nginx模块fastcgi_cache的几个注意点

  categories:nginx资料  tags:  author:

在web项目中,大家都已经非常熟悉其架构流程了。都说Cache是万金油,哪里不舒服抹哪里。这些流程中,几乎每个环节都会进行cache。 从浏览器到webserver,到cgi程序,到DB数据库,会进行浏览器cache,数据cache,SQL查询的cache等等。对于fastcgi 这里的cache,很少被使用。去年年底,我对nginx的fastcgi_cache进行摸索使用。在我的测试过程中,发现一些WIKI以及网络上没被提到的注意点,这里分享一下。

从浏览器到数据库的流程图

这里是我的NGinx配置信息

01
02
03
04
05
06
07
08
09
10
11
12
13
#增加调试信息
add_header X-Cache-CFC "$upstream_cache_status - $upstream_response_time";
fastcgi_temp_path /dev/shm/nginx_tmp;
#cache设置
fastcgi_cache_path   /dev/shm/nginx_cache  levels=1:2 keys_zone=cfcache:10m inactive=50m;
fastcgi_cache_key "$request_method://$host$request_uri";
fastcgi_cache_methods GET HEAD;
fastcgi_cache   cfcache;
阅读全文

两台nginx实现https负载均衡

  categories:资料  tags:, , ,   author:

现在网络完全越来越受到重视, 因此https也是大势所趋, 以往nginx都是工作在http方式下, 其实nginx在https下工作也挺好的。 这里将分步骤的逐步实现一套采用nginx, haproxy, keepalived实现的https系统, 并且系统没有单点故障, 基本适应中小系统的安全需要。

1. Nginx https安装    这个文章主要是安装支持https的nginx, 源代码装过程

2. https安装(2)nginx配置   继承上一个文章, 记录配置过程, 然后实现https服务

本文继承前两个文章, 记录通过nginx实现https的功能, 并且通过haproxy将两台nginx的https进行整合, 统一对外提供服务。

但是本文的方法, 在haproxy上仍然存在单点故障, 下一篇文章, 将修正这个错误

 

本文记录详细的安装过程, 供大家参考。

 一. 准备linux操作系统

本文的nginx和haproxy都是在linux下进行的安装与测试, 因此需要linux计算机。

我们采用vmware作为虚拟机软件, 采用下面的已经安装好的虚拟机镜像做为操作系统。 这样节省了安装时间。

链接:http://pan.baidu.com/s/1nutqTkP 密码:f4bh

  1. 安装好vmware软件, 
阅读全文

srcache_nginx redis 构建缓存系统应用一例

  categories:nginx资料  tags:,   author:

redis是一种高效的key-value存储。srcache_nginx模块相关参数介绍,可以参见《memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存》。

下面举一例应用,看配置:

upstream redis {
server 127.0.0.1:6380;
keepalive 512;
}server {
listen       80 backlog=1024 default;
server_name  www.ttlsa.com;
index index.html index.htm index.php;
root  /data/wwwroot/www.ttlsa.com/webroot;

location / {
set $flag 0;
if ($uri ~ /thumb/[0-9]+_160.jpg$){
set $flag “${flag}1″;
}
if ($arg_unitid =

阅读全文

nginx后端验证模块ngx_http_auth_request_module

  categories:nginx  tags:  author:

nginx验证模块ngx_http_auth_request_module
AuthRequestNginxModule(ngx_http_auth_request_module)
这个是nginx的一个验证模块

Here is auth request module, it allows authorization based on
subrequest result.  It works at access phase and therefore may be
nicely combined with other access modules (access, auth_basic) via
satisfy directive.
这个模块, 允许您的nginx通过发送请求到后端服务器(一般是应用服务器,例如tomcat,或者php等)进行请求, 并且根据请求决定是验证通过或者不通过。

使用方法如下:

Example … 阅读全文

使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

  categories:nginx资料  tags:  author:

Nginx的Memc和SR Cache模块

缓存策略的改进

为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcache是使用非常广泛的一个分布式缓存系统。众所周知,LAMP是非常经典的Web架构方式,但是随着Nginx的成熟,越来越多的系统开始转型为LNMP(Linux+Nginx+MySQL+PHP with fpm),这是因为Nginx采用基于事件机制的I/O多路复用思想设计,在高并发情况下其性能远远优于默认采用prefork模式的Apache,另外,相对于Apache,Nginx更轻量,同时拥有大量优秀的扩展模块,使得在Nginx上可以实现一些美妙的功能。

传统上,PHP中使用memcache的方法是使用php-memcache或php-memached扩展操作Memcache,然而在Nginx上有构建更高效缓存机制的方法,本文将首先介绍这种机制,然后介绍具体的操作步骤方法,最后将对这种机制和传统的PHP操作memcache的性能进行一个benchmark。

我们知道,Nginx的核心设计思想是事件驱动的非阻塞I/O。

Nginx被设计为可以配置I/O多路复用策略,在Unix系统中传统的多路复用是采用select或poll,但是这两个方法的问题是随着监听 socket的增加,性能会下降,因为在linux内核中是采用轮询的方式判断是否可以触发事件,换句话说算法的复杂度为O(N),而在较新的linux 内核中引入了复杂度为O(1)的epoll,因此Nginx在Linux下默认采用epoll,而在FreeBSD下默认采用kqueue作为I/O策 略。

即便是这样,传统的缓存策略仍可能造成效率低下,因为传统上是通过PHP操作memcache的,要执行PHP代码,Nginx就必然要和FastCGI 通信,同时也要进入PHP的生命周期,因此SAPI、PHP Core和Zend Engine的一系列逻辑会被执行。更糟糕的是,fpm和PHP可能会阻塞,因此破坏了Nginx的非阻塞性。(原文中此处表述有误,fastcgi与 nginx进行同步通信,但并不会破坏nginx i/o的非阻塞性,多谢agentzh给予指正)下图展示了在memcache命中时整个处理过程。

可以看到,即使Memcache命中,还是要进入PHP的生命周期。我们知道,目前很多互联网应用都使用RESTful规范进行设计,在RESTful应 用下,普遍使用uri和查询参数作为缓存的key,因此一种更高效的缓存策略是Nginx直接访问Memcache,并用$uri和$args等 Nginx内置变量设定缓存key规则,这样,当缓存命中时,Nginx可以跳过通过fastcgi和PHP通信的过程,直接从memcache中获取数 据并返回。memc-nginx和srcache-nginx正是利用这种策略提高了缓存的效率。下图是这种高效缓存策略的示意图(当memcache命 中时)。

模块介绍

memc-nginxsrcache-nginx模 块均为前淘宝工程师agentzh(章亦春)开发。其中memc模块扩展了Nginx标准的memcache模块,增加了set、add、delete等 memcache命令,而srcache则是为location增加了透明的基于subrequest的缓存层。两者配合使用,可以实现上一节提到的高效 缓存机制。关于两个模块的详细信息可以参考它们Nginx官网的wiki(memc wikisrcache wiki)页。

安装及配置

下面以LNMP环境介绍如何使用这两个模块构建缓存层。

因为Nginx并不支持模块动态加载,所以要安装新的模块,必须重新编译Nginx。首先下载两个模块(memc下载地址,srcache下载地址),另外,为了发挥出缓存的最大性能,建议将memcache的upstream配置为keep-alive,为了支持upstream的keep-alive需要同时安装http-upstream-keepalive-module。… 阅读全文

web内容缓存 nginx高性能缓存详解

  categories:nginx  tags:  author:

内容缓存是显著提高web站点的性能最有效的方法之一。下面来说说nginx高性能缓存。

内容缓存的基本原则

nginx

对GET请求进行缓存。

使用:浏览器缓存,内容分发网络和/或反向代理缓存。

nginx

HTTP缓存机制:

1. 源服务器宣称的内容缓存能力。 主要是对http头信息来控制的。

2. 请求的客户端缓存能力,如GET请求。

nginx

nginx对哪些进行缓存?

1. 缓存没有 Set-Cookie 的GET和HEAD的响应。

2. 通过定义独特的原始URL,如proxy_cache_key。

3. 通过定义缓存时间,如X-Accel-Expires、Cache-Control、Expires。

nginx 操作

nginx

nginx配置

nginx

缓存的过程

nginx的可在下列情况下使用陈旧的内容,通过proxy_cache_use_stale指令定义。

nginx

不仅仅对HTTP缓存,还有其他的,如:

1. FastCGI  功能很像HTTP

2. Memcache 检索memcached服务器的内容(必须预先填充)

3. uwsgi and SCGI

如何理解这些

nginx

缓存仪表

$upstrem_cache_status 变量值有:MISS、BYPASS、EXPIRED、STALE、UPDATING、REVALDATED、HIT。

nginx

nginx

扩展状态监控… 阅读全文

使用 Riak 和 Nginx 搭建的静态文件服务器

  categories:资料  tags:  author:

在搭建网站时,如果更新不多会用静态文件服务器,但如果要扩容,处理巨大的流量是件比较复杂的事情。负载均衡、磁盘冗余、容量规划、横向扩展、缩 减,工程师需要考虑的问题非常多。在这里,我们将使用基于 GitHub pages 中表现出色的 Riak,在不编程的情况下,搭建既可以维持稳定延迟,又可快速扩展的静态文件服务器网站。

概要

大家一定都还记得初次搭建 Web 服务器的时候,先安装 Apache httpd,将写入了 hello 的 index.html 放到指定文件夹,然后在浏览器里打开它。或者也有不少读者可能记得另一种方法,即用 FTP 客户端将 HTML 文件上传到 Geocities。

静态文件服务器是创建 Web 网站的基础。看上去非常简单,但其实相当深奥。比如说,很多人可能有过这种经历,等 HTTP 下载 Linux 的 ISO 镜像等了一个晚上,最终通过 tarball 1 下载的时候却发生硬盘故障,或因为超负荷服务 器宕机了。实际上,Web 网站的服务器需要使用到负载均衡、磁盘冗余、容量规划、横向扩展、网络消耗等众多技术。

1 使用 tar 命令打包的文件。工程师俚语。

其实这些问题,除去节省网络消耗外,只要使用两个软件就可以解决了。那就是

阅读全文

nginx的HeadersMoreNginxModule模块功能

  categories:nginx  tags:  author:

模块地址:

https://github.com/openresty/headers-more-nginx-module

ngx_headers_more – Set and clear input and output headers…more than “add”!
设置和清除 http的输入和输出头

This module is not distributed with the Nginx source. See the installation instructions.
本模块不是标准模块, 安装需要参照最后的安装指令

Version

This document describes headers-more-nginx-module v0.25 released on 10 January … 阅读全文

安装OpenResty

  categories:nginx资料  tags:  author:

OpenResty,也被称为“ngx_openresty”,是一个基于Nginx的核心Web应用程序服务器,它包含了大量的第三方的Nginx模块和大部分系统依赖包。 OpenResty不是Nginx的分支,它只是一个软件包。主要有章亦春维护。
为什么是OpenResty?

OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。

通过众多进行良好设计的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。

OpenResty 致力于将你的服务器端应用完全运行于 Nginx 服务器中,充分利用 Nginx 的事件模型来进行非阻塞 I/O 通信。不仅仅是和 HTTP 客户端间的网络通信是非阻塞的,与MySQL、PostgreSQL、Memcached、以及 Redis 等众多远方后端之间的网络通信也是非阻塞的。

因为 … 阅读全文

https安装(2)nginx配置

  categories:nginx资料  tags:  author:

原创文章,转载请指明出处并保留原文url地址

现在网络完全越来越受到重视, 因此https也是大势所趋, 以往nginx都是工作在http方式下, 其实nginx在https下工作也挺好的。 这里将分步骤的逐步实现一套采用nginx, haproxy, keepalived实现的https系统, 并且系统没有单点故障, 基本适应中小系统的安全需要。

1. Nginx https安装    这个文章主要是安装支持https的nginx, 源代码装过程

2. https安装(2)nginx配置   (本文)继承上一个文章, 记录配置过程, 然后实现https服务

3. 两台nginx实现https负载均衡  介绍通过haproxy实现两个nginx的负载均衡, 解决nginx的单点故障

 

前一篇文章   Nginx https安装

1. 配置nginx服务器

进入nginx的安装目录

nginx-config

[root@iig conf]# cat nginx.conf

worker_processes  1;
events {
    worker_connections  
阅读全文


快乐成长 每天进步一点点