实现url重写一级重定向
使用场景:
1、URL访问跳转,支持开发设计
页面跳转、兼容性支持、展示效果
2、SEO优化
3、维护
后台维护、流量转发等
4、安全
配置语法:
Syntax: rewrite regex replacement Default: - Context: server,location,if
rewrite ^(.*)$ /pages/maintain.html break;
正则表达式
. | 匹配除换行符意外的任意字符 |
? | 重复0次或1次 |
+ | 重复一次或更多次 |
* | 最少链接数,那个机器连接数少就分发 |
\d | 匹配数字 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的介绍 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
[c] | 匹配单个字符c |
[a-z] | 匹配a-z小写字母的任意一个 |
()用于匹配括号之间的内容 通过$1、$2调用
if ($hrrp_user_agent ~ MSIE){ rewite ^(.*)$ /msie/$1 break; }
flag
Rewrite规则优先级
执行server块的rewritr指令
执行location匹配
执行选定的location中的rewrite
yum install nginx-module-geoip
一、区别国内外作HTTP访问规则
二、区别国内城市地域作HTTP访问规则
yum 安装好后找到安装的模块文件
如果nginx是用yun安装的一般是安装到 /etc/nginx/modules/目录下
注意:如果nginx不是yum安装的而是源码编译安装的需要从新安装编译一次nginx加上此模块,然后就不用手动加入此模块了。
在nginx.conf配置文件的头部载入模块和http是同一个级别的
load_module "modules/ngx_http_geoip_module.so"; load_module "modules/ngx_stream_geoip_module.so";
因为GeoIP是基于MaxMind 提供了数据库文件来读取地域信息的所以需要下载ip的地域文件。
这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取。
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz #国家的地域IP
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz #城市的地域IP
然后解压
load_module "modules/ngx_http_geoip_module.so"; load_module "modules/ngx_stream_geoip_module.so"; ....... http{ geoip_country /etc/nginx/geoip/GeoIP.dat; #加载国家IP geoip_city /etc/nginx/geoip/GeoLiteCity.dat; #加载城市IP ......... server { ...... location / { #判断如果不是中国的就返回403; if ($geoip_country_code != CN) { return 403; } } #返回国家城市信息 location /myip { default_type text/plain; return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city"; } .... } }
然后访问 你的IP地址/myip 就可以返回IP所在的国家城市信息了。
实现url重写一级重定向
使用场景:
1、URL访问跳转,支持开发设计
页面跳转、兼容性支持、展示效果
2、SEO优化
3、维护
后台维护、流量转发等
4、安全
配置语法:
Syntax: rewrite regex replacement Default: - Context: server,location,if
rewrite ^(.*)$ /pages/maintain.html break;
正则表达式
. | 匹配除换行符意外的任意字符 |
? | 重复0次或1次 |
+ | 重复一次或更多次 |
* | 最少链接数,那个机器连接数少就分发 |
\d | 匹配数字 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的介绍 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
[c] | 匹配单个字符c |
[a-z] | 匹配a-z小写字母的任意一个 |
()用于匹配括号之间的内容 通过$1、$2调用
if ($hrrp_user_agent ~ MSIE){ rewite ^(.*)$ /msie/$1 break; }
flag
Rewrite规则优先级
执行server块的rewritr指令
执行location匹配
执行选定的location中的rewrite
yum install nginx-module-geoip
一、区别国内外作HTTP访问规则
二、区别国内城市地域作HTTP访问规则
yum 安装好后找到安装的模块文件
如果nginx是用yun安装的一般是安装到 /etc/nginx/modules/目录下
注意:如果nginx不是yum安装的而是源码编译安装的需要从新安装编译一次nginx加上此模块,然后就不用手动加入此模块了。
在nginx.conf配置文件的头部载入模块和http是同一个级别的
load_module "modules/ngx_http_geoip_module.so"; load_module "modules/ngx_stream_geoip_module.so";
因为GeoIP是基于MaxMind 提供了数据库文件来读取地域信息的所以需要下载ip的地域文件。
这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取。
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz #国家的地域IP
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz #城市的地域IP
然后解压
load_module "modules/ngx_http_geoip_module.so"; load_module "modules/ngx_stream_geoip_module.so"; ....... http{ geoip_country /etc/nginx/geoip/GeoIP.dat; #加载国家IP geoip_city /etc/nginx/geoip/GeoLiteCity.dat; #加载城市IP ......... server { ...... location / { #判断如果不是中国的就返回403; if ($geoip_country_code != CN) { return 403; } } #返回国家城市信息 location /myip { default_type text/plain; return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city"; } .... } }
然后访问 你的IP地址/myip 就可以返回IP所在的国家城市信息了。
一、安装nginx并检查是否已安装模块
[root@img_server ~]# nginx -V #输出nginx所有已安装模块,检查是否有ngx_http_secure_link_module
二、配置nginx
[root@img_server ~]# vim /etc/nginx/conf.d/dowm_img_safe.conf server { listen 80; server_name img_server; root /usr/share/nginx/html/; location / { secure_link $arg_md5,$arg_expires; #这里配置了2个参数一个是arg_md5,一个是arg_expires secure_link_md5 "$secure_link_expires$uri secret_key"; #secret_key为自定义的加密串 if ($secure_link = "") { return 403; #资源不存在或哈希比对失败 } if ($secure_link = "0") { return 403; #时间戳过期 } if ($request_filename ~* ^.*?\.(jpg)$){ add_header Content-Disposition attachment; #不浏览,直接下载 } } }
三、使用shell脚本生成下载的链接(生产环境由开发在代码中实现)
[root@img_server html]# cat md5url.sh #!/bin/bash servername="img_server" #服务器的域名 download_file="/test.jpg" #测试下载文件的uri time_num=$(date -d "+300 seconds" +%s) #定义过期时间为300秒 secret_num="secret_key" #自定义的加密串,和nginx的配置文件中加密串相同 res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary|openssl base64|tr +/ -_|tr -d =) #生成MD5值 echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}" #打印下载链接
四、测试
[root@img_server html]# chmod +x md5url.sh #添加权限 [root@img_server html]# systemctl start nginx #启动服务 [root@img_server html]# wget http://pic17.huitu.com/res/20140314/526868_20140314230121822200_1.jpg [root@img_server html]# mv 526868_20140314230121822200_1.jpg test.jpg #下载一个图片,并命名为test.jpg
1.测试直接访问(测试机器需要添加域名解析)
访问结果为403
2.使用生成的下载链接进行访问
过五分钟(即脚本中300秒)再次访问,返回410
1 密钥防止泄露、以及经常更新密钥 2 下载服务器和链接生成的服务器上的时间不能相差太大,否则容易出现文件一直都是过期状态.
原文:https://www.cnblogs.com/suixing123/p/13861610.html