Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存
Nginx地址重写 Nginx rewrite
rewrite语法规则
1).变量名可以使用 "=" 或 "!=" 运算符
~ 区分大小写
~* 不区分大小写
^~ 禁止表达式匹配 找到后就不向下找了
= 精确匹配
!~ 和 !~* 与 ~ !~ 相反
-f 和 !-f 用来判断文件是否存在
-d 和 !-d 用来判断目录是否存在
-e 和 !-e 用来判断文件或目录是否存在
-x 和 !-x 用来判断文件是否可以执行
也支持$1到$9位置化参数
1.if指令
规则语法
if($http_user_agent ~ MSIE){
rewrite ^(.*)$ /msie/$1 break;
}
# 请求的文件不存在,就指定到指定的路径URL下
if(!-f $request_filename){
rewrite ^/img/(.*)$ /site/$host/images/$1 last;
}
2.return 指令
示例:如果访问url以 *.sh 或 *.bash结尾,则返回状态码403
location ~ .*\.(sh|bash)?${
return 403;
}
3.set,rewrite指令
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'){ # 如果这个值为不1就转到下面的地址
rewrite ^/(.*)$ http://www.aaa.com redirect;
}
}
4.rewrite指令
rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种
last 相当于Apache里的[L]标记,表示完成rewrite;
break 本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URI重写,浏览器地址栏URL地址不变
redirect和permanent来用实现URL跳转,浏览器地址栏会显示跳转后的URL地址
例:
location /cms/{
proxy_pass http://test.abc.com;
rewrite "^/cms/(.*)\.html$" /cms/index.html break;
}
注: 一般在跟location中(即location /{...}) 或直接在server标签中编写rewrite规则,推荐使用last标记,在非跟location中(location /cms/{...}),则使用break标记
实例:
1.将原来要访问/data目录重写为/bbs
rewrite ^/data/?$ /bbs/ permanent;
2.根据不同的浏览器将得到不同的结果
if($http_user_agent ~ MSIE){
rewrite ^(.*)$ /msie/$1 break;
}
3.防止盗链
location ~* \.(gif|jpg|png|swf|flv)${
valid_referers none blocked www.test.com *.test.com;
if($invalid_referer){
rewrite ^/(.*) http://www.test.com/block.html;
}
}
4.实现域名跳转
所有对www.abc.com的访问,redirect到www.test.com
server{
listen 80;
server_name www.test.com
index index.html index.php;
root /var/home/www;
if($host="www.abc.com"){
rewrite "^/(.*)$" http://www.test.com/$1 permanent;
}
}
5.URL rewrite和反向代理同时进行
location /news/{
proxy_pass http://www.news.com;
}
location /sports/{
proxy_pass http://www.sports.com;
}
-----------------------------------------------------------------------
全局变量
$args 此变量与请求行中的参数相等
$content_length 等于请求行的“Content_Length”的值。
$content_type 等同与请求头部的”Content_Type”的值
$document_root 等同于当前请求的root指令指定的值
$document_uri 与$uri一样
$host 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate 允许限制的连接速率
$request_method 等同于request的method,通常是“GET”或“POST”
$remote_addr 客户端ip
$remote_port 客户端port
$remote_user 等同于用户名,由ngx_http_auth_basic_module认证
$request_filename 当前请求的文件的路径名,由root或alias和URI request组合而成
$request_body_file
$request_uri 含有参数的完整的初始URI
$query_string 与$args一样
$server_protocol 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1”
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$server_name 请求到达的服务器名
$server_port 请求到达的服务器的端口号
$uri 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
-----------------------------------------------------------------------
Nginx日志管理
log_format
$http_x_forwarded_for和$remote_user用于记录ip地址
$remote_user 用来记录远程客户端用户名称
$time_local 用来记录访问时间及时区
$request 用于记录请求的URL与HTTP协议
$status 用于记录请求的状态,如200 404等
$body_bytes_sent 用于记录发送给客户端的文件主体内容大小
$http_referer 用于记录是从哪个页面链接访问过来的
$http_user_agent 用记记录客户端浏览器的相关信息
定义日志
access_log /data/log/$server_name.log mylogformat buffer=32k
注:从0.7.4之后nginx支持变量
buffer=32k 表示设置内存缓冲区的大小
开启日志打开缓存
为了提高包含变量的日志文件存放路径的性能,可以使用open_log_file_cache指令来设置.
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] |off
该指令默认是禁止的,等同于:
open_log_file_cache off;
max 设置缓存中的最大文件描述符数量
inactive 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符
min_uses 在参数inactive指定的时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符计入缓存,默认为10秒钟
valid 设置多长时间检查 1 次,看日志文件路径与文件名是否仍然存在,默认60秒
例:
最大记录1000个文件缓存
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
Nginx日志分割
vi /data/logs.sh
#! /bin/bash
#Nginx日志存放位置
logs_path="/data/logs/";
#将日志改名
mkdir -p ${logs_path}$(date -d "yesterday"+"%Y")/$(date -d "yesterday"+"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday"+"%Y")/$(date -d "yesterday"+"%m")/access_$(date -d "yesterday"+"%Y%m%d").log
#重启nginx服务
pkill -USR1 nginx
# 创建计划任务
crontab -e
01 00 * * */bin/bash /data/logs.sh
Nginx开启压缩输出
在http{...}中间,启用压缩
#vi /etc/nginx.conf
gzip on;
gzip_min_length 1k;
gzip_buffer 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_type text/plain application/x-javascript text/css application/xml;
gzip_vary on;
Nginx的浏览器本地缓存设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
#设置图片在客户端缓存时间为 30days
location ~ .*\.(js|css)?$
{
expires 1h;
}
Nginx设定限速
location /download{
limit_rate 256k;
proxy_pass http://www.abc.com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /movie{
limit_rate_after 10m;
limit_rate 100k;
}
if($http_user_agent ~ Google|Yahoo|baidu){
limit_rate 20k;
}
Nginx设置反向代理
http{
以下参数说明:中的选项
}
参数说明:
# 允许客户端请求的最大的单个文件字节数
client_max_body_size 300m;
#缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;
#跟后端服务器连接的超时时间 发到握手等候响应超时时间
proxy_connent_timeout 600;
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
proxy_read_timeout 600;
#后端服务器数据回传时间,就是在规定的时间内后端服务器必须传完所有的数据
proxy_send_timeout 600;
#代理请求缓存去,该缓存去间保存用户的头信息,以供nginx进行规则处理一般只要保能保存下头信息即可
proxy_buffer_size 16k;
#告诉nginx保存单个用的几个buffer 最大用多少空间
proxy_buffers 4 64k;
#高负载下缓冲大小(proxy_buffers*2)[如果系统很忙的时候可以申请更的proxy_buffers]
proxy_busy_buffers_size 128k;
#proxy缓存临时文件的大小 设置缓存文件夹大小,如果大于该值,将从upstream 服务器传递请求,而不缓冲到磁盘上
proxy_temp_file_write_size 1024m;
proxy_temp_path /data/proxy_temp_path;
proxy_cache_path /data/proxy_cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;
例
location /sms{
proxy_pass http://192.168.1.2;
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_cache cache_one;
proxy_set_header X-Forwarded-For $remote_addr;
}
#具体代理缓存的内容
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)$
{
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;
#以域名,URI 参数组合成web缓存的key值, Nginx根据key值哈希,存储缓存内容到二级缓存目录内
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://192.168.3.2;
}
----------------------------------------------------------------
location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$ #列出的扩展名文件不缓存。
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://osyunweihost;
}
access_log off;
}
location ~ /purge(/.*) #用于清除缓存
{
allow 127.0.0.1;
allow 192.168.21.0/24; #设置只允许指定的IP或IP段才可以清除URL缓存。
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存的更多相关文章
- BZOJ_4196_[NOI2015]_软件包管理器_(树链剖分)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=4196 给出一棵树,树上点权为0或1.u权值为1的条件是从根节点到u路径上的所有点权值都为1.u ...
- 将商户后台_门店管理后台_平台后台管理v1.0 Axure RP项目上传到svn服务器步骤
- nginx 日志管理配置详解
nginx的日志管理 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...
- Apache rewrite地址重写
Apache-rewrite+13个经典案例Apache 重写规则的常见应用(rewrite)一:目的 如何用Apache重写规则来解决一些常见的URL重写方法的问题,通过常见的 实例给用户一些使用重 ...
- nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍
一.rewrite地址重写 地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址. 在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求. 地址 ...
- IIS:URL Rewrite实现vue的地址重写
vue-router 全局配置 const router = new VueRouter({ mode: 'history', routes: [...] }) URL Rewrite 1.添加规则 ...
- 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语
目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...
- php url地址重写
地址重写: urlRewrite: 就是: 1. 将php的地址index.php不写只写Action模块和function方法, 或者 2. php地址转变成html地址, 就是一种假的html, ...
随机推荐
- 为什么静态成员、静态方法中不能用this和super关键字
1. 在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载 ...
- SQL server 2008 数据库企业版安装教程图解
SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本. 在现今数据的世界里,公司要获得成功和不断发展,他 ...
- kinect在ros上的初步测试---17
摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.在使用本贴前必须先按照我的上一个博文正确在ubuntu上安装kinect驱动:http:// ...
- 【BZOJ1005】【HNOI2008】明明的烦恼
又是看黄学长的代码写的,估计我的整个BZOJ平推计划都要看黄学长的代码写 原题: 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连 ...
- java的nio之:java的nio的原理
转载:http://weixiaolu.iteye.com/blog/1479656 Java NIO原理图文分析及代码实现 前言: 最近在分析hadoop的RPC(Remote Procedure ...
- CSS和JS实现单行、多行文本溢出显示省略号(该js方法有问题不对)
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...
- 【转载】关于Python中的yield
在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何 ...
- CodeFirstMigrations更新数据库结构(EF数据迁移)
背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的 ...
- 什么是Spring的命名空间及使用Spring 的命名空间p 装配属性
这个就要从XML说了,Spring的配置管理可以利用XML方式进行配置,而XML里面就有命名空间这个概念..实际上就和标签的意思有点像 你给一个命名空间以后,这个XML文件里面就可以用那个命名空间上下 ...
- 【转】ie8 不支持 position:fixed 的简单解决办法
今天发现使用 position:fixed 的页面在firefox下没有问题,在IE8下却不能正常显示,在网上找了找,有不少相关文章,但是不是不起作用就是太复杂,后来终于发现一个简单的解决办法,就是在 ...