return
可以写在location server if 里面
return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置
重写功能
格式
flag:301:表示永久重定向
302:临时重定向
break:只匹配一次
last:多次匹配 先匹配1 再匹配2
flag的格式 301 302 需要些英文
正则表达式格式
举例说明:
然后保存 重置
在data里面建立beijing这个文件夹
第二个终端,要经历两次跳转 其实是两次请求
而输入beijing 直接跳转
因为是301,永久重定向 所以下次访问的时候,直接跳转 不需要请求两次
如果是302 则需要每次都请求两次
案例二 http转换成https
正对全站跳转
然后通过网页去访问 一开始输入的是http://192.168.68.3/
反馈的是
争对特意的url 进行跳转到https上 就是说主页面是http 但是访问某个固定的url,则访问的是https
last与break对比
break 就匹配一次 就匹配到test上 而last匹配多次 最后要访问到403上
在不建立页面的情况下,测试一下
打开第二个终端
可以看出,当是break的情况时,curl的时候是404 (因为没建立文件)
当时last的情况时,curl的时候是403(原本都没建立文件,应该是404,但是last这边是403,它要多次匹配 匹配到最后一个,因此是403)
总结:break 一次匹配
last:多次匹配
防盗链
当A网站有个图片a.jpg 但是A想节约资源,就在B网站上面,建立一个连接 ,这个连接可以连接a.jpg
举例说明:
弄两台机器 一台nginx 一台apache
第一台nginx子配置内容
第一步 在nginx(centos71)上面添加一张图片
第二步 在安装 apache 并修改网页的配置文件
apache网页默认位置在/var/www/html里面
配置文件的内容:
随后在重启
如果想在真机上面去做,还要写一个host的文件
在里面加入 192.168.68.3 www.lucky.com
先修改hosts上一目录的权限,将etc下的只读取消
加入此行
随后在谷歌浏览器里面访问 192.168.68.4
为了防止别人盗我的图片,因此做一个防盗链
防盗链配置:
在子配置文件里面修改
再次访问192.168.68.4
反向代理
proxy_pass
客户端去访问192.168.68.3代理服务器 ,然后代理服务器再传给真实服务器 其实客户端访问的是192.168.68.4的页面
centos 7 1 代理 centos 真实的服务端
代理服务器配置
真实服务器
然后在真实服务端 curl一下自己 访问的是自己 代理服务器访问的是真实服务器的页面
如果使用端口号去访问
则在IP地址后面加入端口号 然后在真实服务器主配置文件添加监听端口号
代理服务器配置文件
真实服务器(centos)
最后直接跳转
补充一点
例如
然后访问网页
总结:504:代理到真实的服务器这段通讯是有问题的,而DORP表示已读不回,所以,客户端会一直发,然后代理服务器转发给真实服务器,时间长,便超时
502:reject:表示已读就回,出现502表示网关不可达,真实的服务器挂了
争对某个url进行访问
在代理服务器上配置子配置文件
api 在真实服务器里面没有,所以要在真是服务器里面建立一个api
真实服务器:
随后在真实服务器上访问代理服务器(就等于访真实服务器的9527端口)
注意!!!!在代理服务器上 地址后面加/ 表示替换 不加/ 表示追加!
举例说明:
追加:192.168.68.3/api/ ------->192.168.68.4/api/ 访问192.168.68.3的api就等于访问192.168.68.4的api
替换:192.168.68.3/api/ --------> 192.168.68.4 访问192.168.68.3的api 就等于访问192.168.68.4
追加
注意 不允许正则表达式后面跟替换,就是正则表达式的的语句不能,这个会报错
指定location 反向代理 动静分离
代理服务器访问静态资源给真实服务器1
代理服务器访问动态资源给真实服务器2
7-1代理服务器配置:
7-2服务器配置:
关闭防火墙 关闭防护
下载httpd软件
7-3 服务器
检测:直接在7-1上就能检测
同时可以放入一张图片来检验一下
反向代理:缓存功能
proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http 必须放在http语句中
proxy_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=zone_name:size [inactive=time] [max_size=size] [manager_files=number]
[manager_sleep=time] [manager_threshold=time] [loader_files=number]
[loader_sleep=time] [loader_threshold=time] [purger=on|off]
[purger_files=number] [purger_sleep=time] [purger_threshold=time];
#示例:在http配置定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建
levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录
keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的key
inactive=120s #缓存有效时间
max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值
#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端#示例
proxy_cache_use_stale error http_502 http_503;
proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存
扩展知识:清理缓存
操作步骤如下:
在主配置文件里面修改
在http配置里面增加
proxy_cache_path /data/nginx/proyxcache levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
再去子配置文件里面修改内容
proxy_cache proxycache;
proxy_cache_key $request_uri;
#proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 302 301 10m;
proxy_cache_valid any 5m;
在7-3 真实服务器上添加一张图片 a.jpg
随后去网页上访问192.168.68.3/a.jpg (就会有缓存了)
然后再取7-1代理服务器上看一下缓存
如果把7-3 关闭
然后再去网页访问,依然可以加载图片 是因为换存的作用
自定义头部信息
在子配置文件里面添加配置内容
随后,在另外一台终端去curl
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;
miss:超时 hit:命中 表示从代理服务器而来