nginx config文件配置

$remode_addr 获取访问者的ID

$request_method 判断提交方式 GET POST

$http_user_agent 获取浏览器软件

if (条件) {} #if之后要有空格

条件3种写法:

1: '=' 来判断相等,用于字符串比较

2: '~' 用正则来匹配(此处的正则区分大小写)

~* 不区分大小写的正则

3: -f -d -e 来判断是否为文件,目录,是否存在

rewrite ^.*$ /web/index.php;

break; #跳出rewrite

rewrite #重写

重写中用到的指令

if (条件) {} 设定条件,在进行重写

set #设置变量,用来达到多条件判断时做标记,达到Apache下的rewrite_condition效果

return #返回状态码

break #跳出rewrite

rewrite #重写 rewrite ^.*$ /www/web/dfh/index.php;

服务器内部的rewrite和302跳转不一样,跳转的话是url都变了,变成重新http请求404.html,而内部rewrite,上下文没有变

反向引用:

rewrite goods-([\d]+)\.html$ /goods.php?id=$1; #$1 等于正则括号里的内容

rewrite goods-(\d+)-b(\d+)-min(\d+)-attr([\d\.]+)-(\d+)\.html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5;

注意:用url重写时,正则里如果有"{}",正则要用爽引号包起来

解析.php文件

#location ~\.php/?.*$ {

#或者

location ~\.php{

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi.conf;

}

gzip #配置的常用参数

gzip on | off

gzip_buffers 32 4K | 16 8K #缓冲(压缩在内存中缓冲几块?每块多大?)

gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压得越小,越浪费CPU计算资源)

gzip_disable #正则匹配 UA 什么样的uri 不进行gzip

gzip_min_lenght 200 #开始压缩的最小长度(再小就不要压缩了,意义不在)

gzip_http_version 1.0 | 1.1 #要是压缩的http协议版本(可以不设置,目前几乎全是1.1协议)

gzip_proxied #设置请求者代理服务器,该如何缓存内容

gzip_types text /plain application/xml #对那些类型的文件用压缩, 如 txt xml html css

gzip_vary on | off #是否传输gzip压缩标志

expires #缓存

对于网站的图片,尤其是新闻站,图片一旦发布,改动的可能是非常小的,用户访问后就把图片缓存在用户浏览器端

在location 或 if段里

格式:

expires 30s;

expires 30m;

expires 2h;

expires 30d;

#lication ~* image {

lication ~* () {

root /www/web;

expires 1d;

}

(注意:服务器的日期要准确,如果服务器如期落后于实际日期,可能导致缓存失效!)

另:304 也是一种很好的缓存手段

原理是:服务器相应文件内容是,勇士相应etag标签(内容的签名,内容一变,他也变),和 last_modified_since 两个标签值,浏览器下次发去请求时,头信息发送这两个标签,服务器检测文件没有发生变法,如无,直接发送头信息返回 etag , last_modified_since 浏览器知道内容用无变化,于是直接调用本地缓存,这个过程也请求了服务器,但是传值的内容极少,对于变化周期比较短的,html,css,js等

反向代理服务器 + 负载均衡

用nginx做反向代理支持两个用法

1 proxy_pass

2 upstream

例:

location ~ \.php$ {

proxy_pass http://192.168.1.200:8080; #访问的文件.php文件是代理服务器端的

}

反向代理如果有多台服务器,自认可形成负载均衡

但proxy_pass如何指向多台服务器:

把多台服务器用 upstream 指定绑定在一起并起个组名;

逐个请求,也有其他负载均衡算法,如一致性哈希,需要安装第三方模块

(第三方算法地址 : ngx_http_upstream_consistent_hash)

例:

upstream testserver {

#第一个服务器

server 127.0.0.1:81 weight=1 max_fails=2 fail_timeout=3;

#第二个服务器

server 174.16.10.110:80 weight=1 max_fails=2 fail_timeout=3;

}

server{

listen 81;

server_name localhost;

root /www/web;

index index.php index.html;

location ~ \.php {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

#加载Nginx默认"服务器环境变量"配置

include fastcgi.conf;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

}

location ~ \.php/?.*$ {

proxy_set_header X_Forwarded_For $remote_addr; #将客户端ip传给负载服务器

proxy_pass http://testserver;

}