nginx模块解释及rewrite规则实例

nginx
-c:指定配置文件
-p:指定nginx安装目录
-t:测试配置文件是否有错误
-s stop:强制停止Nginx服务 -s是告诉Nginx程序向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到master进程的ID,再向运行的master进程发送TERM信号来快速地关闭Nginx服务
-s quit:“优雅”地停止服务,首先Nginx会关闭监听端口,停止接收新的连接,然后把目前正在处理的连接全部处理完,最后再退出进程 =kill -s SIGQUIT PID
kill -s SIGWINCH PID:“优雅”的停止某个work进程
-s reload:重新加载配置文件,实际上nginx会先检查新的配置文件是否有误,如果全部正确就以优雅的方式关闭,再重新启动Nginx来实现这个目的=kill -s SIGHUP PID
-s reopen:重新打开日志文件,可以把当前的日志文件改名或转移到其他目录备份,再重新打开就会有新的日志文件产生=kill -s SIGUSER1 PID
kill -s SIGUSER2 PID:平滑升级nginx,Nginx会将pid文件重命名,通过kill命令向旧版本的master进程发送SIGQUIT信号,优雅关闭旧版本进程,随后只有新版本的Nginx服务运行

配置
1.Nginx支持单进程(master)提供服务,生产都为master-worker提供服务,好处:a) master进程不会对用户提供服务,只用于管理真正提供服务的worker进程(为管理员提供命令服务,启动、停止、重载配置文件平滑升级等),master通常拥有较大权限,一般会以
root启动,worker权限要小于或等于master权限,这样master才会完全管理worker进程,当任何一个woreker进程出现错误导致coredump时,master会启动立刻启动新的worker进程继续服务 b) 可以充分利用SMP多核架构,从而实现微观上真正的多核并发能力。一个
worker进程可以同时处理请求数只受限于内存大小,不同worker进程之间处理并发请求时几乎没有同步锁限制,worker进程通常不会进入sleep状态,当Nginx进程数与CPU核心数相等(最好每个进程绑定在一个CPU上)时,进程间切换的代价是最小的。
2.ssl_session_cache shared:SSL:10m;1m可以缓存大约4000个会话
ssl_session_timeout 10m;ssl会话缓存时间 (由于ssl操作需要消耗CPU资源,所以在多处理的系统下需启动多个工作进程,而且数量不少于可用CPU的个数。最消耗CPU资源的SSL操作是SSL握手,两种方法可用降低握手操作数:第一是保持客户端长连接,
第二是在并发的连接或者后续连接中重用SSL会话参数,也可以避免SSL握手操作)
3.如果后端服务器返回502、504、执行超时等错误,可以定义一组upstream模块将其转发到另一台服务器上:proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_pass http://upstream_name;
4.使用alias时,用到rewrite规则必须使用last标记。使用proxy_pass时必须使用break标记

Rewrite:
当文件和目录不存在时,重定向到某个php页面:if (!-e $request_filename) {rewrite ^/(.*)$ /index.php}
多目录转成参数:abc.domian.com/sort/2 => abc.domain.com/index.php?act=sort&name=abc&id=2
if ($host ~* (.*)\.domain\.com) {set $sub_name $1;rewrite ^/sort\//(\d+)\//?$ /index.php?act=sort&act=$sub_name&id=$1 last}
目录对换:/123456/xxxx -> /xxxx?id=123456
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last; ($2下的目录才是真实的目录,也就是说如果:www.domain.com/123456/test/目录会重定向到访问/test目录)
如果客户端使用IE浏览器,则重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /nginx-ie/$1 break;}
禁止访问多个目录:
location ^/(cron|templates)/ {deny all;break;}
禁止访问以data开头的目录:
location ~ ^/data {deny all;}
设置某些类型文件的浏览器缓存时间:
location ~ .*\.(gif|jpg|png|swf) {expires 30d;} location ~ .*\.(js|css)?$ {expires 1h;}
将多级目录下的文件转换成一个文件/job-123-456-789.html 指向/job/123/456/789.html
rewrite ^/job-({[0-9]+)-([0-9]+)-([0-9])\.html$ /job/$1/$2/$3.html last;
禁止访问以.sh .flv .mp4为文件名后缀的URL地址:
location ~ .*\.(sh|flv|mp4)?$ {return 403;}
根据Referer信息防盗链:
location ~* \.(gif|jpg|png|swf)$ {valid_referers none blocked www.yourdomain.com *.domain.com;if ($invalid_refere) {rewrite ^/(.*) http://www.yourdomain.com/blocked.html;}
允许指定的域名访问,其余的一律跳转:
if ($host ~* ^(.*?)\.aaa\.com$) {set $var_tz '1';} if ($host ~* 192\.168\.1\.(.*?)$) {set $var_tz '1';} if ($host ~* ^localhost) {set $var_tz '1';} if ($var_tz !~ '1') {rewrite ^/(.*)$ http:www.aaa.com/ redirect;}
nginx伪静态:rewrite ^(.*)/archiver/((fid|tid)-[w-]+.html)$ $1/archiver/index.php?$2 last;
rewrite ^(.*)/forum-([0-9]+)-([0-9]+).html$ $1/forumdisplay.php?fid=$2&page=$3 last;
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last;
rewrite ^(.*)/profile-(username|uid)-(.+).html$ $1/viewpro.php?$2=$3 last;
rewrite ^(.*)/space-(username|uid)-(.+).html$ $1/space.php?$2=$3 last;
rewrite ^(.*)/tag-(.+).html$ $1/tag.php?name=$2 last;
目录自动加“/”:if (-d $request_filename){rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;}
Apache和Nginx的rewrite规则比较:
nginx和apache的rewrite规则不同点:apache用RewriteRule替代了rewrite指令 结尾用[L]替代了last 在apache中:RewriteRule ^/([0-9]{5}).html$ /x.jsp?id=$1 [L] 在nginx中不能写成rewrite ^/([0-9]{5}).html$ /x.jsp?id=$1 last;而要写成:
rewrite "^/([0-9]{5}).html$" /x.jsp?id=$1 last; apache中的RewriteCond对应nginx的if指令 [R]对应Nginx的redirect标记
允许指定域名访问本站,apache规则:RewriteCond %{HTTP_HOST} !^(.*)\.aaa\.com$ [NC] RewriteCond %{HTTP_HOST} !^192\.168\.1\.(.*)?$ RewriteCond !^localhost$ RewriteRule ^/(.*)$ http://www.aaa.com [R,L]
URL重写与反向代理同时进行
Apache Rewrite规则:ProxyRequest off RewriteRule ^/news/(.*)$ http://server.domain.com/$1 [P,L] Nginx:location /news/ {proxy_pass http://server.domain.com/;}
指定URL之外的URL进行Rewrite跳转
Apache Rewrite规则:RewriteCond %{REQUEST_URI} !^/xiaoqu/admin/.* RewriteCond %{REQUEST_URI} !^/xiaoqu/map/.* RewriteCond %{REQUEST_URI} !^/xiaoqu/accounts/.* RewriteCond %{REQUEST_URI} !^/xiaoqu/ajax/.*
RewriteRule ^/xiaoqu/(.*?)/(.*?)/ /xiaoqu/$2.php?name=$1 [L] Nginx规则:if ($request_uri ~* "^/xiaoqu/admin/.*") {set $var_xiaoqu_admin '1';} if ($request_uri "^/xiaoqu/map/.*") {set $var_xiaoqu_admin '1';}
if ($request_uri ~* "^/xiaoqu/accounts/.*") {set $var_xiaoqu_admin '1';} if ($request_uri ~* "^/xiaoqu/ajax/.*") {set $var_xiaoqu_admin '1';} if ($var_xiaoqu_admin !~ '1') {rewrite ^/xiaoqu/(.*?)/(.*?)/$ /xiaoqu/$2.php?name=$1 last;}


Nginx缓存
原理:缓存是把URL及相关组合当作Key,用MD5算法对Key进行哈希,得到硬盘上对应的哈希目录路径,从而缓存内容保存在该目录内,清楚缓存需要第三方模块:ngx_cache_purge,可以清楚指定URL缓存
proxy_cache 语法:proxy_cache zone_name 默认值:None 使用环境:http、server、location zone_name的值为proxy_cache_path指令创建的缓存区名称
proxy_cache_path path keys_zone=zone_name:zone_size [inactive_time] [max_size=size] 使用环境:http 该指令用于设置缓存文件存放的路径 示例:proxy_cache_path /data/ levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
proxy_cache_methods 语法:proxy_cache_methods [GET HEAD POST] 默认:GET HEAD 使用环境:http、server、location 该指令用户缓存哪些http方法
proxy_cache_min_users:默认值1,使用环境:http、server、location 该指令用于设置缓存的最小使用次数
proxy_cache_valid proxy_cache_valid 200 302 10m 使用环境:http、server、location 该指令设置 proxy_cache_valid any 1m:其余的状态码缓存都为1分钟
proxy_cache_key proxy_cache_key "$host:$server_port$uri$is_args$args" 使用环境:http、server、location 该指令用来设置Web缓存的Key值,Nginx根据Key值MD5哈希存储缓存
proxy_temp_path和proxy_cache_path必须在同一分区
清除url缓存设置:location /purge(/.*) {allow 127.0.0.1; deny all;proxy_cache_purge cache_one $host$1$is_args$args} 然后通过web页面删除key:http://www.yourdomain.com/purge/test.gif

fastcgi_cache
同上,fastcgi_cache_key 127.0.0.1:9000$request_uri

金山逍遥网中nginx配置
user www www;
worker_processes 8;
error_log /data1/logs/nginx_errlog crit;
pid /usr/local/webserver/nginx/nginx.pid;
work_rlimit_nofile 51200;

events
{
use epoll;
worker_connections 51200;
}

http
{
include mime.type;
default_type application/octet-stream;

#charset utf-8;

server_name_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
sendfile on;
#tcp_nopush on;
keeplive_timeout 30;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_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/plain application/x-javascript text/css application/xml;
gzip_vary on;

limit_zone anti_attack $binary_remote_addr 10m;

#允许客户端请求的最大单个字节数
client_max_body_size 300m;

#缓存区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;

#跟后端服务器连接超时时间_已经完成两次握手等待相应时间
proxy_connect_timeout 600;

#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
proxy_read_timeout 600;

#后端服务器回传时间_就是在规定时间之内后端服务器必须传完所有数据
proxy_send_timeout 600;

#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size 16k;

#同上 告诉Nginx保存单个用的几个Buffer及最大用多大空间
proxy_buffers 4 32k;

#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 64k;

#proxy临时缓存文件的大小
proxy_temp_file_write_size 64k;

#缓存
proxy_cache test;
proxy_cache_path /data2/proxy_cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=5m;
proxy_cache_methods PUT,GET;

upstream my_server_pool {
server xx.xx.xx.1:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.2:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.3:80 weight=1 max_fails=2 fail_timeout=30s;
}

upstream php_server_pool {
server xx.xx.xx.4:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.5:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.6:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.7:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.8:80 weight=1 max_fails=2 fail_timeout=30s;
}

upstream bbs_server_pool {
ip_hash;
server xx.xx.xx.9:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.10:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.11:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.12:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.13:80 weight=1 max_fails=2 fail_timeout=30s;
}

upstream bbs_server_pool {
server xx.xx.xx.9:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.10:80 weight=1 max_fails=2 fail_timeout=30s;
}

upstream cms_server_pool {
server xx.xx.xx.9:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.10:80 weight=1 max_fails=2 fail_timeout=30s;
}

upstream pic_server_pool {
server xx.xx.xx.9:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.10:80 weight=1 max_fails=2 fail_timeout=30s;
}

upstream xoyohimsg_server_pool {
server xx.xx.xx.9:80 weight=1 max_fails=2 fail_timeout=30s;
server xx.xx.xx.10:80 weight=1 max_fails=2 fail_timeout=30s down;
}

server {
listen 80;
server_name xoyo.com
rewrite ^/(.*) http://www.xoyo.com/ permanent;

access_log /data/logs/xoyo.com_access.log;
}

#用户中心HTTPS/SSL加密
server {
listen 443;
server_name my.xo.com;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;

#1m差不多能缓存4000个用户会话
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://php_server_pool;
proxy_set_header Host my.xoyo.com;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /data/logs/my.xoyo.com_access.log;
}

#图片服务器,不同的路径访问后端不同的服务器
server {
listen 80;
server_name pic.xoyo.com;

location /cms/ {
proxy_pass http://cms_server_pool;
proxy_set_header Host pic.xoyo.com;
proxy_set_header X-Forwarded-For $remote_addr;
}

location / {
proxy_pass http://pic_server_pool;
proxy_set_header Host pic.xoyo.com;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /data/local/pic.xoyo.com_access.log;
}

server {
listen 80;
server_name media.xoyo.com;

location / {
proxy_pass http://cms_server_pool;
proxy_set_header Host cms.xoyo.com;
proxy_set_header X-Forwarded-For $remote_addr;
}
valid_referers none blocked www.xoyo.com *.xoyo.com www.kingsoft.com;
if ($invalid_refere) {rewrite ^/ http://www.xoyo.com;}
access_log /data/log/media.xoyo.com_access.log;
}

#逍遥有聊 WEBIM产品的负载均衡,反向代理两种HTTP服务器
server {
listen 80;
server_name hi.xoyo.com;

#反向代理一款定制开发的高性能消息队列HTTP服务器
location /recmessage.xoyo
{
proxy_pass http://xoyoimsg_server_pool;
proxy_set_header Host $host;
}

location /
{
proxy_pass http://php_server_pool;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /data/hi.xoyo.com_access.log;
}

#论坛负载均衡,并对图片、flush、javascript、css、静态HTML进行web缓存
server {
listen 80;
server_name bbs.xoyo.com *.bbs.xoyo.com

location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://bbs_server_pool;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|shtml)$
{
proxy_cache cache_one;
proxy_cache_valid 200 10m;
proxy_cache_valid 304 1m;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://bbs_server_pool;
}

log_format bbs '$remote_addr $host $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /data/log/bbs.xoyo.com_access.log bbs;
}

#论坛反向代理,限制下载速度
server {
listen 80;
server_name att03.bbs.xoyo.com att02.bbs.xoyo.com att01.bbs.xoyo.com;

location / {
#限制下载速度为256KB/s
limit_rate 256k;
proxy_pass http://xx.xx.xx.19;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log off;
}

#逍遥江湖SNS社区,管理后台定位到一台服务器,并对图片、flush、javascript、css进行web缓存区
server {
listen 80;
server_name hu.xoyo.com *.ho.xoyo.com;

location / {
proxy_pass http://php_server_pool;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|shtml)$
{
proxy_cache cache_one;
proxy_cache_valid 200 10m;
proxy_cache_valid 304 1m;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://bbs_server_pool;
}

location ~ ^/admincp.php
{
#管理后台定位到一台服务器上
proxy_pass http://xx.xx.xx.4;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /data/log/hu.xoyo.com_access.log;
}
}


采用Nginx的Flv Stream模块搭建HTTP下载方式的Flv视频服务器
Flv Stream模块是Nginx的可选模块,需要在编译安装Nginx服务器时,把Flv Stream模块加上,如:./configure --with-http_flv_module make && make install
....
server {
listen 80;
server_name flv.domain.com;
index index.shtml index.html index.htm;

root /data0/htdocs/flv_files;

limit_rate_after 3m;#用户下载前3m不限速,超过3m时限速为512k
limit_rate 512k;

location ~ \.flv {
flv;
}
access_log off;
}


HTTP核心模块指令:
alias:路径别名 location /i/ {alias /web/test1/;}
client_body_in_file_only 用法:client_body_in_file_only on|off 默认值:off 使用环境:http、server、location 该指令允许将一个客户端请求内容记录到一个文件中,该文件在请求完成后不会被删除
client_body_in_single_bufffer 语法:client_body_in_single_bufffer 默认值:off 使用环境:http、server、location 该指令指定是否保持整个内容在一个单一的客户端请求缓存区中
client_body_buffer_size 语法:client_body_buffer_size 128k;该指令指定客户端请求的缓冲区大小。如果客户端请求内容大于缓存区,将被写入临时文件
client_body_temp_path 语法:client_body_temp_path /path 1 2; 该指令用于指定存放请求内容临时文件的目录。缓存目录最多支持3层目录
client_body_timeout 语法:client_body_timeout 60;默认值:60 使用环境:http、server、location 该指令用于设置客户端请求内容的超时时间。如果超过这个时间,Nginx将返回"Request time out" 错误信息(http状态码408)
client_header_buffer_size 语法:client_header_buffer_size size 默认值:1k 使用环境:http、server 该指令用于设置客户端请求的Header头缓存区大小
client_header_timeout 默认值:60 使用环境http、server 该指令用于设置读取客户端请求Header头信息的超时时间。超过时间同上
client_max_body_size 默认值:1m 使用环境:http、server、location 该指令用于设置允许接受的客户端请求内容的最大值,如果超过该值,返回"Request Entity Too Large"错误信息(HTTP状态码413)
default_type 默认值:default_type text/plain 使用环境:http、server、location MIME-type是用来告诉浏览器请求的文件媒体类型
directio 默认值off 使用环境:http、server、location 该指令用于设置一个文件大小
error_page error_page 404 /404.html error_page 500 501 502 /50.html 如果遇到403,则跳转到url:error_page 403 http://example.com/forbidden.html error_page 400 =200 /empty.gif;如果遇到404,将状态码改为200,并且指定/empty.gif给客户端
autoindex on;如果某个目录下没有指定的默认首页文件,则开启该指令,显示当前目录的文件列表
internal:该指令用于设置某个location路径只能在Nginx内部使用,外部无法访问 例1: error_page 404 /404.html; location /404.html { internal; } 例2:location / {root /var/www/html;error_page 404 @40x;} location @40x {root /var/www/error/40x.html;}
keepalive_requests 默认值:100 使用环境:http、server、location 设置一个keep-alive连接使用的次数。一次请求结束后,如果该请求的次数没有超过该值,则服务器并不立即断开连接,而是直到达到keep_timeout指令设置的时间,才关闭连接
large_client_header_buffers 默认值:4 4k 使用环境http、server 该指令用于设置客户端请求的header头缓冲区大小,客户端请求大小不能超过这个值,否则回报“Request URI too large“(414)
limit_except 语法:limit_except methods 默认值:no 使用环境location 该指令限制HTTP方法访问location内容 示例:limit_except GET {allow xx.xx.xx.xx/24;deny all;}
limit_rate 使用环境:http、server、location,if in location 该指令用来限速 示例:server {if($slow) {set $limit_rate 4k;}}
limit_rate_after 该指令可以设置一个字节数,下载的字节数大于该值时启动限速
location ~ \.php$ {
root /web;
index index.php index.html index.htm;
error_page 404 502 504 @fetch;
}
location @fetch {
internal;
proxy_pass http://backend;
break;
}
log_not_found 默认值:on 使用环境:http、server、location 该指令用来启用或禁用404错误日志,可以用来禁止Nginx记录找不到robots.txt和favicon.ico这类文件的错误信息
log_subrequest 默认值:off 使用环境:http、server、location 该指令用来启动或禁止在access_log中记录类似rewrite rules、SSI requests等子请求
open_file_cache 默认值:off 使用环境:http、server、location open_file_cache_max = 1000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_user 2;open_file_cache_errors on;(inactive缓存过期时间)
open_file_cache_errors:该指令用于是否开启搜索文件的缓存错误
open_file_cache_min_user:用于指定在open_file_size指令设置的时间内文件的最小使用数,如果打开的文件超过该数量,则文件描述符会保持缓存中的打开状态
resolver_timeout 默认值:30 使用环境:http、server、location 该指令用于解析超时时间
auth_busic "authon" auth_busic_user_file /path 认证文件路径
send_timeout 默认值:60 使用
server_tokens 默认值:on 使用环境:http、server、location 是否在错误页面或服务器Header头中输出Nginx版本号给客户端浏览器
tcp_nodelay 默认值:on 使用环境:http、server、location 允许或使用套接字选项TCP_NODELAY,适用于keep-alive连接

FCGI模块
location / {fastcgi_pass localhost:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME scripts/php$fastcgi_script_name;...}
fastcgi_hide_header 语法:fastcgi_hide_header name 使用环境:http、server、location 默认情况下Nginx不会将FastCGI进程返回的"status"、"X-Accel.."Header头信息返回给客户端。该指令用来隐藏其他的header头信息
fastcgi_redirect_errors 默认off,用于开启或关闭FastCGI错误重定向

Gzip模块
gzip on;
gzip_comp_level 4;(压缩等级)
gzip_min_length 1k;(压缩最小字节)
gzip_buffers 4 16k;(设置几个单位的缓存用于压缩结果数据流)
gzip_http_version:识别http协议版本,可能早期的http协议或浏览器不支持gzip,压缩会乱码
gzip_proxied any;(默认值:off Nginx作为反向代理的时候启用,开启或关闭后端服务器返回的结果,匹配的前提是后端服务器必须返回包含"Via"的header头。off——关闭所有代理结果数据的压缩,
expired——启用压缩,如果header头中包含"Expires"头信息,no-cache——启用压缩,如果header中有"Cache-Control:no-cache"头信息,no-store如果header中有"Cache-Control:no-store"头信息,private——启用压缩,
如果header中有"Cache-Control:private"头信息,no_last_modified——启用压缩,如果header中不包含"Last-Modified"头信息,auth——启用压缩,如果header中包含"Authorization"头信息,any——无条件压缩)
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
server_tokens off;

HTTP Header模块:
用来设置Nginx返回网页内容给用户时,附加的Header头信息
add_header:默认值:none 使用环境:http、server、location 当HTTP应答状态码为200、204、301、302、304的时候,增加指定的header头,其中header头可以是变量

HTTP Limit Zone模块
改模块用于针对条件,进行会话的并发连接数控制,例如限制每个IP的并发连接数等。 http {limit_zone one $binary_remote_addr 10m; server {locatiion /download/ {limit_conn one 1;}}}
limit_zone 使用环境http limit_zone zone_name $variable_memory_max_size 定义了一个数据区,其中记录会话状态信息。$variable定义判断会话的变量,mem_max_size定义内存记录区的总容量
limit_zone one $binary_remote_addr 10m;定义一个叫"one"的记录区,总容量10MB,以变量$binary_remote_addr作为会话的判断基准(即一个地址一个会话) $binary_remote_addr和$remote_addr比较:$remote_addr的长度为7到15bytes,会话信息
的长度为32或64bytes。而$binary_remote_addr的长度为4bytes,会话信息的长度为32bytes,记录区为1MB时,大约可以记录32000个会话信息
limit_conn:使用环境http、server、location 用于指定一个会话最大并发数。当超过指定的最大并发数时,服务器返回"Service unavailable"503
limit_zone one $binary_remote_addr 10m; server {location /download/ {limit_conn one 1;}}

HTTP Limit Req模块
该模块允许你对Session会话、单个客户端IP地址,限制指定单位时间内的并发数,可以在一定程度减少DOS攻击
http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;... server {... location /search/ {limit_req zone=one burst=5;} }
注释:为Session会话分配了一个名为one的10MB内存存储区,限制了每秒只接受一个IP的一次请求。这里使用变量$binary_remote_addr代替了$remote_addr,可以为每个会话减少64字节的内存空间,从而使1MB内存可以大概存储16000个会话状态(r/s:读请求/秒,r/m:读请求/分)

PV:页面一天点击量(用户每刷新一次就统计) UV:每个客户端一天计为1次 VV:访问次数,是指统计时段内所有访客的PV总和
根据访问IP统计UV:awk '{print $1}' access.log|sort |uniq -c |wc -l
统计访问URL统计PV:awk '{print $7}' access.log|wc-l
查询访问最频繁的URL:awk '{print $7}' access.log |sort |uniq -c |sort -n -k1 -r

posted @ 2017-12-28 11:08  一米八大高个儿  阅读(763)  评论(0编辑  收藏  举报