nginx的rewrite,gzip,反向代理学习笔记
rewrite模块名:ngx_http_rewrite_module默认自动被编译
指令:rewrite regex replacement [flag]
regex :正则表达式,用于匹配用户请求的uri
replacement:重写后的结果
flag 可以有四个值分别为last,break,redirect,permanent
last:重写完成之后停止对当前uri的进一步处理,改为对新uri的新一轮处理,在nginx内部完成,客户端不会察觉
break:重写完成后,停止对当前uri的处理,转向其后面的其他处理
补充:last 重写之后还会在nginx内部重新自上而下检查rewrite匹配规则,break则不会重新检查rewrite匹配规则
redirect:重写完成之后会返回给客户端一个临时重定向,客户端浏览器自动对新的uri发起请求(302)
permanent:重写完成后会返回给客户端一个永久重定向,客户端浏览器自动对新的uri发起请求(301)
应用上下文:http,server,location,if
实例:

.*表示任意内容,\.表示对.进行转义 $1对前面的第一个()中的内容$2引用第二个()中的内容以此类推
http://www.b.com/download/a/media/12.php--->/tmp/download/a/mp3/12.html
如果flag没有指定,则默认为last
PCRE正则表达式元字符
字符匹配 . [] [^]
次数匹配 * + ? {m} {m,} {m,n}
位置定位 ^,$
或者 |
分组 () 后向引用 $1 $2…
rewrite_log on|off 是否将重写日志记入error log中,默认为关闭

www.c.com/bbs/index.html---> /tmp/vhost2/forum/index.html

上面的if语句的作用:www.c.com/download ---> www.c.com/index.html return表示把新的uri发送给客户端,由客户端重新
请求

http://www.c.com/hello/ ---> https://www.baidu.com
模块ngx_http_gzip_static_module是nginx会读取预先gzip压缩好的文件,静态压缩只需压缩一次,不需要每次请求都压缩,此模
块编译时需要使用--with-http_gzip_static_module参数才会被编译,模块ngx_http_gzip_module不需指定默认会被编译

gzip on 开启动态压缩功能 gzip_min_length 触发压缩功能的响应报文的最小长度 单位为字节 gzip_http_version 触发压缩功能
的http协议最小版本 gzip_disable msie6 对IE6的浏览器发送响应报文时不进行压缩 gzip_types 对哪些类型的资源做压缩,比如
压缩图片:image/jpeg image/gif image/png
反向代理模块ngx_http_proxy_module 默认会被编译
proxy_pass URL
应用上下文:location,location内部的if中,limit_except

反代www.d.com--->http://192.168.238.150 注意如果location中使用了模式匹配如 ~*,~等proxy_pass最后的斜线不能加,
否者会报错
这里还得说下location 后面匹配的优先级
=:URI的精确匹配;
~:做正则表达式匹配,区分字符大小写;
~*:做正则表达式匹配,不区分字符大小写;
^~:URI的左半部分匹配,不区分字符大小写;
匹配优先级:精确匹配=、^~、~或~*、不带符号的URL



上面三个图都是反代www.d.com/admin --> http://192.168.238.150/admin/ 因此如果http://192.168.238.150/ 则最后
的/会被location后定义的参数覆盖,如果http://192.168.238.150则location后定义的参数会被添加到http://192.168.238.150后
面,
如果location后面跟了正则表达式或者location上下文使用了rewrite则proxy_pass 后的url 必须是http://192.168.238.150这种形
式,后面不能带uri,哪怕只有/也不可以
接下来了解一个参数proxy_set_header field value,用于proxy_server向backend server 发送请求报文时,将某请求首部重新赋
值,或在原有值后面添加一个新值,或者自定义一个新首部,比如proxy_set_header Host value Host是请求报文请求首部的
Host,这里的value有两个值要介绍一下,$proxy_host 假如proxy_pass http://www.a.com 那$proxy_host指的就是
www.a.com, $http_host 这个是客户端请求报文请求首部Host的值

上面的proxy_set_header作用是当nginx作为反代去请求backend server时会在请求首部添加一个x-real-ip的首部,并且指定其值
为$remote_addr
$remote_addr代表上游客户端的ip地址,我们去backend server上修改一下日志记录格式就可以将上游客户端的ip地址记录到日志
中去了(后端是httpd server)
到后端server修改日志格式 vim /var/log/httpd/access.log

将LogFormat 后的%h修改为%{x-real-ip}i 后面的i是指定其值的,但是如果有多层反代怎么解决记录真实ip地址的问题?
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 其中X-Forwarded-For是约定俗成的首部名,
$proxy_add_x_forwarded_for的含义是不管X-Forwarded-For中有没有值都将上游客户端的ip地址添加到X-Forwarded-For首部
中,每台反代都添加这条命令就解决了上面的问题,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串ip
值,究竟哪个才是真正的用户端的真实IP呢?
X-Forwarded-For: client1, proxy1, proxy2
X-Forwarded-For会取得第一个非unknown的有效IP字符串。

上面的设置,当代理服务器向后端请求时,会将请求报文的请求首部Host设置为客户端请求报文的请求首部Host的值

add_header这个参数是当代理服务器返回给客户端是在响应首部添加Via这个首部并赋值为$server_addr $server_addr是nginx的
内置变量其值为代理服务器自己的ip地址

反向代理缓存能把静态页面和动态页面的请求都缓存下来,proxy_cache_path 只能存放于http上下文中,不能放置于server或
location

proxy_cache_path 指定缓存目录,prxoy的上一级目录必须存在否则会报错, levels指定该缓存空间有两层hash目录,第一层目录
为1个字符,第二层为2个字符,keys_zone=pcache 参数用来为这个缓存区起名(proxy_cache 指令需要用到 其后对应缓存区名
称)后面的10m指内存缓存空间大小为10MB(这个10MB指的是对文件元数据的缓存), inactive=3h 指如果缓存数据在3小时
(天:d、秒:s、分:m)内没有被访问,将自动被删除 max_size=10g 指硬盘缓存大小为10GB,proxy_cache调用缓存区如果后
面跟的值为off表示禁用 proxy_cache_key $request_uri 以$request_uri的值为缓存键值,这样做即使有多个主机名也一样能缓
存命中了 ,在这里proxy_cache_key参数可以省略不指
请求
http://www.ooxx.com/book/1232.html
$request_uri代表的是/book/1232.html
proxy_cache_valid指令,可以在http、server、location中使用,如果proxy_cache_valid 不指定状态码,直接指定缓存时间,将
只缓存默认的状态码(200、301、302),而如果需要对304也指定,则需要写完整的状态码,如上面写的200 304
proxy_connect_timeout 定义与后端服务器的超时时长;默认为60s 建议不超过75s
proxy_send_timeout 请求报文发送给后端服务器的超时时长,默认为60s
proxy_read_timeout 等待后端服务器发送响应报文的超时时长,默认为60s
上面三个指令可以定义在http server location中
nginx的rewrite,gzip,反向代理学习笔记的更多相关文章
- nginx之rewrite重写,反向代理,负载均衡
rewrite重写(伪静态): 在地址栏输入xx.com/user-xxx.html, 实际上访问的就是xxx.com/user.php?id=xxx rewrite就这么简单 附上ecshop re ...
- nginx 反向代理学习
目录 nginx 反向代理学习 一.正向代理和反向代理的区别 1.1正向代理 1.2 反向代理 二.nginx反向代理的使用 nginx 反向代理学习 一.正向代理和反向代理的区别 正向代理代理客户端 ...
- 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》
本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...
- Nginx应用-Location路由反向代理及重写策略 请求转发-URL匹配规则 NGINX Reverse Proxy
NGINX Docs | NGINX Reverse Proxy https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ ...
- 通过Nginx+tomcat+redis实现反向代理 、负载均衡及session同步
一直对于负载均衡比较陌生,今天尝试着去了解了一下,并做了一个小的实验,对于这个概念有一些认识,在此做一个简单的总结 什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称 ...
- nginx和tomcat实现反向代理、负载均衡和session共享
这类的文章很多,nginx和tomcat实现反向代理.负载均衡实现很容易,可以参照http://blog.csdn.net/liuzhigang1237/article/details/8880752 ...
- Nginx的安装及反向代理设置
因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5. ...
- nginx与apache配合反向代理技术1
序:最近在看Dimitri Aivaliotis的<Mastering Nginx>,刚好跆拳道课下班在路上看了反向代理服务器,准备在自己的博客VPS尝试一下 web代理服务器可以实现分布 ...
- Nginx插件之openresty反向代理和日志滚动配置案例
Nginx插件之openresty反向代理和日志滚动配置案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.openresty介绍 1>.Nginx介绍 Nginx是一款 ...
随机推荐
- [SQL]SQL语言入门级教材_SQL语法参考手册(三)
SQL 语法参考手册 DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化.既易学又易懂的语法. 此语言几乎是每个资料库系统都必须提供 ...
- maven skip tests
DskipTests=true is short form of -Dmaven.test.skip=true
- IIS安全工具UrlScan介绍 ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS,使用免费工具) 批改或隐藏IIS7.5的Server头信息 移除X-Powered-By,MVC,ASP.NET_SessionId 的 HTTP头或者cookie名称
微软给了我们一个很好的工具用来使IIS安全的运行-------UrlScan,下面是它的配置文件介绍 [options]UseAllowVerbs=1 ; 若为1,则使用 ...
- 聚类结果的评估指标及其JAVA实现
一. 前言 又GET了一项技能.在做聚类算法的时候,由于要评估所提出的聚类算法的好坏,于是需要与一些已知的算法对比,或者用一些人工标注的标签来比较,于是用到了聚类结果的评估指标.我了解了以下几项. 首 ...
- Jmeter如何设置关联
1.打开飞机网站的第三个设置:2.录制一个登陆和退出脚本,导出为jmx文件:3.Jmeter导入第二步中的文件:4.添加察看结果树,运行一次,会发现一个错误(没有输入正确的usersession)5. ...
- SmartWiki开发日志之环境配置和系统安装
SmartWiki是基于laravel5.2开发的在线文档管理系统. 最低需要PHP5.6+MySql5.7.同时PHP需要开启一下扩展: MCrypt GD PDO PDO_mysql mbstri ...
- "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法
HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题"详细错误信息模块 IIS Web Core通知 Begin ...
- 【练习】手工生成awr报告
①首先进入$ORACLE_HOME/rdbms/admin目录 [oracle@host02 ~]$ cd $ORACLE_HOME/rdbms/admin 该目录下 [oracle@host02 a ...
- iis 站点部署后 Microsof .Net Framework异常
最近在部署站点到 iis 中时,遇到 iis 崩溃的问题,一打开部署好 的站点后,就出现 Microsoft .Net Framework 异常的消息提示,具体的 异常情况如下: 于是在网上查找了很多 ...
- 洛谷P2722 总分 Score Inflation
P2722 总分 Score Inflation 184通过 295提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 关于算法 题目背景 学生在我们USACO的 ...