分类目录归档:nginx

Nginx map指令使用方法

map指令由ngx_http_map_module模块提供,并且默认加载。

map指令用来创建变量,仅在变量被接受的时候执行视图映射操作。

map指令配置段位于http段内。

map指令有三个参数:

default:默认值,当没有设置 default,将会用一个空的字符串作为默认的结果。

hostnames:允许用前缀或者后缀掩码指定域名作为源变量值。(这个参数必须写在值映射列表的最前面)

include:包含一个或多个含有映射值的文件。

可以使用正则表达式:

以 ~ 开头,表示这个正则表达式对大小写敏感。

以 ~*开头,表示这个正则表达式对大小写不敏感。

使用示例

http {
    map $http_user_agent $agent {
        ~curl curl;
        ~*chrome chrome;
    }
    server {
        listen       8080;
        server_name  www.test.com;
 
        location /hello {
            default_type text/plain;
            echo http_user_agent: $http_user_agent;
            echo agent: agent:$agent;
        }
    }
}

执行curl 127.0.0.1:8080/hello得到如下信息

http_user_agent: curl/7.15.5 (x86_64-RedHat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5

agent: curl

使用实例

维护一个ip.conf的配置文件,实现根据ip自动切换目录并且不用频繁重启nginx

ip.conf实例内容如下

192.168.1.1 dir1;

192.168.1.2 dir2;

nginx配置如下

http {
    map $ip $dir {
        default test;
        include ip.conf;
    }
    server {
        listen       8080;
        server_name  www.test.com;
        root /data/$dir/www;
        rewrite ^/(js|images|css)/(.*) http://static.test.com/$1/$2 permanent;
        location / {
             try_files $uri $uri/ /index.php?$query_string;
        }
    }
}

如何在windows中安装nginx

1.配置nginx

a:http://nginx.org/en/download.html下载nginx解压,dos进入到目录start nginx.exe进行启动(或双击nginx.exe).

其他的命令:

nginx –s stop   #停止nginx

nginx –s reload #重载nginx

nginx –s quit  #退出nginx

 

b:打开nginx.conf配置文件,把下面注释去掉,/scripts修改为$document_root

  

2.下载php解压(非线程安全使用fastcgi方式连接)

a:修改extension_dir路径“c:\php\5.6\ext\”

b:打开常用库扩展如:

php_bz2.dll

php_gd2.dll

php_mbstring.dll

php_mysql.dll

php_mysqli.dll

php_openssl.dll

c:时间修改为date.timezone = Asia/Shanghai

3.启动php-cgi进程:php-cgi.exe –b 127.0.0.1:9000 –c php.ini

(注意dos窗口不关闭)

 

4.html目录新建文件index.php测试


301-nginx

新建立站点:
server {
    listen 80;
    server_name site.com;
    return 301 httpd://www.site.com$request_uri;
    …….
}

或者
server {
    listen       80 ;
    server_name  site4.com;
    rewrite      ^ http://www.site4.com$request_uri?;
}

源码安装nginx

1.首先安装编译用到的包

yum -y install gcc gcc-c++

yum -y install zlib zlib-devel openssl
openssl-devel pcre-devel

2.建立用户和组

groupadd -r nginx

useradd -s /sbin/nologin -g nginx -r nginx

id nginx

3.下载解压nginx.org

4.设置参数

./configure –prefix=/usr/local/nginx
–sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf
–error-log-path=/var/log/nginx/error.log –pid-path=/var/run/nginx/nginx.pid –user=nginx
–group=nginx –with-http_ssl_module –with-http_flv_module
–with-http_gzip_static_module –http-log-path=/var/log/nginx/access.log –http-client-body-temp-path=/var/tmp/nginx/client
–http-proxy-temp-path=/var/tmp/nginx/proxy –http-fastcgi-temp-path=/var/tmp/nginx/fcgi
–with-http_stub_status_module –with-pcre

5.编译和安装:make &&
make install

多线程编译安装:make -j `cat /proc/cpuinfo | grep processor| wc -l` && make
install

nginx如何缓存静态资源

静态资源是指不变的文件,像 CSSJavaScript 和图片。这些文件往往在网页的数据中占半数以上。页面的其余部分是动态生成的,像在论坛中评论,性能仪表盘,或个性化的内容。

缓存静态资源有两大好处:

(1)更快的交付给用户用户可以从它们浏览器的缓存或者从互联网上离它们最近的缓存服务器获取静态文件。有时候文件较大,因此减少等待时间对它们来说帮助很大。

(2)减少应用服务器的负载从缓存中检索到的每个文件会让 web 服务器少处理一个请求。你的缓存越多,用户等待的时间越短。

要让浏览器缓存文件,需要在静态文件中设置正确的 HTTP 首部。看看 HTTP Cache-Control 首部,特别是设置了 max-age 参数,Expires 首部,以及 Entity 标记。

当启用本地缓存,然后用户请求以前访问过的文件时,浏览器首先检查该文件是否在缓存中。如果在,它会询问 Web 服务器该文件是否改变过。如果该文件没有改变,Web 服务器将立即响应一个304状态码(未改变),这意味着该文件没有改变,而不是返回状态码200 OK 并检索和发送已改变的文件。

要在浏览器之外支持缓存,可以考虑下面讲到的技巧,以及考虑使用内容分发网络(CDN)。CDN 是一种流行且强大的缓存工具,但我们在这里不详细描述它。在你实现了这里讲到的其它技术之后可以考虑 CDN。根据需要调查和测试,找到你网站需要的正确方法。

可以在站点配置文件server元素中添加下面代码:

location ~*
.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$
{

       
expires max;

       
log_not_found off;

       
access_log off;

    }


expires语法: expires
[time|epoch|max|off]

默认值: expires off

作用域: http, server, location

使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标,(起到控制页面缓存的作用)。

可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的 time 值来获得。

nginx配置$document_root变量

1.用nginx建立的站点,可以cp default.conf yanshi.conf这样快速,我们只要修改文件中的域名端口就可以使用了,但是我们还要注意一点,如果您没有修改/scripts这个地方是访问不了的

 

2.$document_root这个参数是有root参数来设定的,所有我们要修改下把/scripts修改为$document_root既指向站点根目录.

如何快速安装nginx

1.首先要安装pcre

(1)yum install pcre

(2)或者下载源安装:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre2-10.10.tar.gz

#tar zxvf pcre2-10.10.tar.gz

#cd pcre2-10.10

#./configure

#make

#make install

2.再次安装zlib用于数据压缩

(1)yum install zlib

(2)或者下载源安装:wget http://zlib.net/zlib-1.2.8.tar.gz

#tar -zxvf zlib-1.2.8.tar.gz

#cd zlib-1.2.8

#./configure –prefix=/usr/local/share/zlib  制定安装路径

#make  编译

#make install 安装

3.最后安装nginx,首先要下载更新nginx源

(1)安装nginx源:

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

yum install nginx

(2)或者手动输入:

touch /etc/yum.repos.d/nginx.repo

vi /etc/yum.repos.d/nginx.repo输入下面内容:

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

保存后使之立即生效:yum makecache

安装:yum install nginx

默认安装路径:/etc/nginx

4.还没完,接下来安装php

(1)yum install php php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt

(2)如果要让nginx认识php那么要有中间人php-fpm的介绍:

yum install php-fpm

service php-fpm start

chkconfig php-fpm on

5.重启下nginx现在可以建立php站点了,注意在站点的配置文件中需要把

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;修改为:

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

nginx缓存服务器指令介绍

此篇文章摘抄自网络:

1.Web缓存的定义.

Web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL,Web缓存服务器会去

后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL

Web缓存服务器直接输出内容给客户端,而不是向源服务器再次发送请求.Web缓存降低

了内容源Web服务器,数据库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了

用户体验.

2.Squid介绍

Web缓存服务器中,最著名的要数Squid Cache(简称为Squid)Squid是一个流浪的自由软件的代理服务器和Web缓存服务器。

Squid可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,

Squid可以为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,

Squid可以通过过滤流量帮助网络安全,到局域网通过代理上网.

3.NginxWeb缓存服务及和Squid的比较

NginxWeb缓存服务主要由proxy_cache相关指令集和fastcgi相关指令集构成

(1)proxy_cache相关指令集用于反向代理时,对后端内容源服务器进行缓存.Nginxproxy_cache缓存功能,十分稳定,速度不逊于Squid.

(2)fastcgi相关指令集主要用于对FastCGI的动态程序进行缓存.两者功能基本一样.

在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能,清除指定URL缓存功能.而在性能上,Nginx对多核CPU的利用,胜过Squid不少.另外,在反向代理,负载均衡,健康检查,后端服务器故障转移,重写,易用性上,Nginx也比Squid强大很多.这使得一台Nginx可以同时作为负载均衡服务器“Web缓存服务器来使用.

4.proxy_cache相关指令集

(1)proxy_cache指令
语法: proxy_cache zone_name ;

该指令用于设置哪个缓存区将被使用,zone_name的值为proxy_cache_path指令创建的缓存区的名称.

(2)proxy_cache_path指令, 语法 proxy_cache_path path
[levels=number]

keys_zone=zone_name:zone_size[inactive=time]
[max_size=size];
该指令用于设置缓存文件的存放路径.:

proxy_cache_path /data0/proxy_cache_dir
levels=1:2 keys_zone=cache_one:500m

inactive=1d max_size=30g ;

path 存放目录

levels 指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层目录为2个字母,保存的文件名会类似/data0/proxy_cache_dir/c/29/XXXXXX ;

keys_zone参数用来为这个缓存区起名.

500m 指内存缓存空间大小为500MB

inactive1d指如果缓存数据在1天内没有被访问,将被删除

max_size30g是指硬盘缓存空间为30G

(3)proxy_cache_methods 指令
语法:proxy_cache_methods[GET HEAD POST];

该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD方法,不缓存HTTP POST 方法

(4)proxy_cache_min_uses指令
语法:proxy_cache_min_uses the_number

该指令用于设置缓存的最小使用次数,默认值为1

(5)proxy_cache_valid指令
语法: proxy_cache_valid reply_code
[reply_code…]time ;
该指令用于对不同返回状态码的URL设置不同的缓存时间.:

proxy_cache_valid 200 302 10m ;

proxy_cache_valid 404 1m ;

设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.

(6)proxy_cache_key指令
语法: proxy_cache_key line ;

该指令用来设置Web缓存的Key,Nginx根据Keymd5哈希存储缓存.一般根据$host(域名),$request_uri(请求的路径)等变量组合成proxy_cache_key .

5.proxy_cache完整示例

(1)首先,把第三方的ngx_cache_purge模块编译安装到Nginx,用来清除指定URL的缓存

wget
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz

tar zxvf pcre-8.00.tar.gz

cd pcre-8.00/

./configure

make && make install

cd ../

 

wget
http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz

tar zxvf ngx_cache_purge-1.0.tar.gz

 

wget
http://nginx.org/download/nginx-0.8.32.tar.gz

tar zxvf nginx-0.8.32.tar.gz

cd nginx-0.8.32/

./configure –user=www –group=www
–add-module=../ngx_cache_purge-1.0

–prefix=/usr/local/webserver/nginx
–with-http_stub_status_module

–with-http_ssl_module

make && make install

cd ../

(2)然后,在同一分区下创建两个缓存目录,分别供proxy_temp_path , proxy_cache_path

 

指令设置缓存路径.:两个指定设置的缓存路径必须为同一磁盘分区,不能跨分区.

mkdir -p /data0/proxy_temp_path

mkdir -p /data0/proxy_cache_path

(3)Nginx配置文件(nginx.conf)对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图片,flashjavascript , css文件开启Web缓存,其他文件不缓存.

示例代码如下:

http{

 
proxy_temp_path /data0/proxy_temp_path ;

  #设置Web缓存区名称为cache_one,内存缓存空间大小为500M,自动清除超过1天没有被 

 

#访问的缓存数据,硬盘缓存空间大小为30G

 
proxy_cache_path /data0/proxy_cache_path levels=1:2

 

keys_zone=cache_one:200m inactive=1d
max_size=30g ;

   

 
server{

   
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$

    {

     
#
使用Web缓存区cache_one

     
proxy_cache cache_one ;

     
#
对不同HTTP状态码缓存设置不同的缓存时间

     
proxy_cache_valid 200 304 12h ;

     
proxy_cache_valid 301 302 1m ;

     
proxy_cache_valid any 1m ;

     
#
设置Web缓存的Key,Nginx根据Keymd5哈希存储缓存,这里根据域名,URI,

     
#
参数组合成Key

     
proxy_cache_key $host$uri$is_args$args;

    }

 

    #用于清除缓存,假设一个URLhttp://my.domain.com/test.gif,通过访问

   
#http://my.domain.com/purge/test.gif
可以清除该URL的缓存

   
location ~ /purge(/.*)

    {

     
#
设置只允许指定的IPIP段才可以清除URL缓存

     
allow 127.0.0.1 ;

     
allow 192.168.0.0/16 ;

     
deny all ;

     
proxy_cache_purge cache_one $host$1$is_args$args ;

    }

  }

}

 

6.fastcgi_cache相关指令集

(1)fastcgi_cache指令

语法:fastcgi_cache
zone_name;

该指令用于设置哪个缓存区将被使用,zone_name的值为fastcgi_cache_path指令创建的

缓存区名称.

(2)fastcgi_cache_path指令

语法:fastcgi_cache_path
path [levels=number] keys_zone=zone_name:zone_size

[inactive=time] [max_size=size];

该指令用于设置缓存文件的存放路径,

:

fastcgi_cache_path /data0/fastcgi_cache_dir
levels=1:2

keys_zone=cache_one:500m inactive=1d
max_size=30g ;

注意这个指令只能在http标签内配置,

levels指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母,保存的

文件名会类似/data0/fastcgi_cache_dir/c/29/XXXX;

keys_zone参数用来为这个缓存区起名,

500m指内存缓存空间大小为500MB;

inactive1d指如果缓存数据在1天内没有被访问,将被删除;

max_size30g是指硬盘缓存空间为30GB

(3)fastcgi_cache_methods指令

语法:fastcgi_cache_methods
[GET HEAD POST] ;

该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD 方法,不缓存HTTP POST方法

(4)fastcgi_cache_min_uses指令

语法:fastcgi_cache_min_uses
the_number;

该指令用于设置缓存的最小使用次数,默认值为1.

(5)fastcgi_cache_valid指令

fastcgi_cache_valid reply_code
[reply_code…] time;

该‎指令用于对不同返回状态码的URL设置不同的缓存时间.

fastcgi_cache_valid 200 302 10m ;

fastcgi_cache_valid 404 1m ;

设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.

如果不指定状态码,直接指定缓存时间,则只有200,301,302状态的URL缓存5分钟.

(6)fastcgi_cache_key指令

语法:fastcgi_cache_key
line ;

该指令用来设置Web缓存的Key,Nginx根据Keymd5哈希存储缓存.一般根据FastCGI

务器的地址和端口,$request_uri(请求的路径)等变量组合成fastcgi_cache_key

7.fastcgi_cache完整示例

(1)首先,在同一分区下创建两个缓存目录,分别供

fastcgi_temp_path,fastcgi_cache_path指令设置缓存路径.:两个指定设置的缓存路径必须为同一磁盘分区,不能跨分区.

mkdir -p /data0/fastcgi_temp_path

mkdir -p /data0/fastcgi_cache_path

(2)Nginx配置文件(nginx.conf)对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图片,Flash,JavaScript,CSS文件开启Web缓存,其他文件不缓存.

http{

 
#fastcgi_temp_path
fastcgi_cache_path指定的路径必须在同一分区

 
fastcgi_temp_path /data0/fastcgi_temp_path ;

  #设置Web缓存区名称为cache_one,内存缓存空间大小为500MB,自动清除超过1天没有被

  #访问的缓存数据,硬盘缓存空间大小为30G

 
fastcgi_cache_path /data0/fastcgi_cache_path levels=1:2

 
keys_zone=cache_one:200m inactive=1d max_size=30g ;

 

 
server{

   
location ~ .*\.(php|php5)$

    {

     
#
使用Web缓存区cache_one

     
fastcgi_cache cache_one ;

     
#
对不同的HTTP状态码缓存设置不同的缓存时间

     
fastcgi_cache_valid 200 10m ;

     
fastcgi_cache_valid 301 302 1h ;

     
fastcgi_cache_valid an 1m ;

     
#
设置Web缓存的key,Nginx根据keymd5哈希存储缓存,这里根据“FastCGI服务 

 

    #器的IP,端口,请求的URI”组合成Key

     
fastcgi_cache_key 127.0.0.1:9000$requet_uri ;

     
#FastCGI
服务器

     
fastcgi_pass 127.0.0.1:9000 ;

     
fastcgi_index index.php ;

     
include fcgi.conf ;

    }

  }

}

nginx配置缓存服务器(CDN)

nginx.conf配置文件中修改或添加如下内容:

http

{

      include mime.types;

      default_type application/octet-stream;

      charset utf-8;

      server_names_hash_bucket_size 128;

      client_header_buffer_size 32k;

      large_client_header_buffers 4 32k;

      client_max_body_size 300m;

 

      sendfile on;

      tcp_nopush on;

      keepalive_timeout 60;

      tcp_nodelay on;

      client_body_buffer_size 512k;

 

      proxy_connect_timeout 5;

      proxy_read_timeout 60;

      proxy_send_timeout 5;

      proxy_buffer_size 16k;

      proxy_buffers 4 64k;

      proxy_busy_buffers_size 128k;

      proxy_temp_file_write_size 128k;

 

      gzip on;

      gzip_min_length 1k;

      gzip_buffers 4 16k;

      gzip_http_version 1.1;

      gzip_comp_level 2;

      gzip_types text/plainapplication/x-javascript text/css application/xml;

      gzip_vary on;

 

      proxy_temp_path  /data/proxy_temp_dir;

      proxy_cache_path /data/proxy_cache_dirlevels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

 

upstreambackend_server {

 

      server 127.0.0.1:8800 weight=1 max_fails=2 fail_timeout=30s;

 

      server 127.0.0.1:8801 weight=1 max_fails=2 fail_timeout=30s;

 

}

server

{

      listen 80;

      server_name localhost;

      index index.html index.htm;

      root /data/webapps/www;

      location /

      {

          proxy_next_upstream http_502 http_504 error timeout invalid_header;

          proxy_cache cache_one;

          proxy_cache_valid 200 304 12h;

          proxy_cache_key $host$uri$is_args$args;

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-For $remote_addr;

          proxy_pass http://backend_server;

          expires 1d;

      }

      location ~ /purge(/.*){

          auth_basic “TDT  Center  CACHE  Center”;

          auth_basic_user_file /tmp/htpasswd;

          allow 127.0.0.1;

          allow 192.168.1.0/24;

          deny all;

          proxy_cache_purge cache_one $host$1$is_args$args;

      }

 

      location ~ .*\.(php|jsp|cgi)?$

      {

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-For $remote_addr;

          proxy_pass http://backend_server;

      }

  }

}