资源的访问控制
1.用户访问验证模块
ngx_http_auth_basic_module模块可以实现让访问者,在访问某些特定资源时,只有输入正确的用户密码才允许访问web内容
web上的一些内容不想被其他人知道,但是又想让部分人看到。nginx的http_auth模块以及Apache http_auth都是很好的解决方案。
语法: auth_basic string | off;
默认值: auth_basic off;
配置段: http, server, location, limit_except
默认不开启认证;后面如果跟上字符,这些字符会在验证弹窗中显示。
语法: auth_basic_user_file file_path;
默认值: —
配置段: http, server, location, limit_except
配置示例:
①使用htpasswd(如果没有请安装httpd-tools软件包)工具创建用户验证文件
[root@localhost /]# htpasswd -c -m /etc/nginx/.passwd ceshi
New password:
Re-type new password:
Adding password for user ceshi
②在需要验证的虚拟主机配置文件中配置location,添加auth_basic验证规则
[root@localhost /]# vim /etc/nginx/conf.d/static.conf
server {
listen 80;
server_name www.aa5.com;
access_log /var/log/nginx/accecc.log proxy;
location / {
root /web/;
}
error_page 404 /notfound/notfound.html;
location =/notfound/notfound.html {
root /web/;
}
location ^~ /admin/ {
root /web/;
auth_basic "please input your password!!!";
auth_basic_user_file /etc/nginx/.passwd;
}
}
[root@localhost /]# nginx -s reload
③客户端访问指定目录提示用户验证才可以访问
2.来源ip访问控制
使用ngx_http_access_module模块来实现基于ip的访问控制功能
可以应用的字段有http、location、server
示例:
location / {
deny 192.168.2.162; ##拒绝指定ip访问
allow all; ##允许所有人访问
deny 192.168.1.0/24; ##拒绝指定网段访问
}
Nginx的URL重写(rewrite)
rewrite的组要功能是实现RUL地址的重定向,URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中,默认参数编译nginx就会支持rewrite的模块
rewrite语法格式及参数语法说明如下:
将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
flag标记说明:
last #重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址;不能以http://或https://开头
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
语法示例:
rewrite ^/(.*) https://www.nnv5.cn/$1 permanent; ##将访问http站点的所有url永久重写到https的站点下
rewrite ^/(.*).png /$1.jpg permanent; ##将访问.png结尾的url重写为.jpg
rewrite ^/ https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1558164084618&di=6bf7732ebfd157b56f786931ccf20df2&imgtype=0&src=http%3A%2F%2Fpic.58pic.com%2F58pic%2F13%2F81%2F71%2F46K58PICXQ9_1024.jpg;
rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是https://www.nnv5.cn/$1 ,$1是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 https://www.nnv5.cn/$1 地址上
配置示例:
①编辑虚拟主机配置文件添加访问本站点所有.jpg文件时都重写为.html
[root@localhost web]# vim /etc/nginx/conf.d/static.conf
server {
listen 80;
server_name www.aa5.com;
access_log /var/log/nginx/accecc.log proxy;
root /web;
rewrite ^/(.*).jpg /$1.html;
location / {
root /web/;
}
}
[root@localhost web]# vim /web/aaa.html
aaa.html
②客户端使用浏览器访问www.aa5.com/aaa.jpg测试验证,会直接访问到网站根目录下的aaa.html文件
Nginx防盗链设置
网站防盗链,就是防止别人通过某些技术手段绕过本站的资源展示页面,盗用本站的资源;设置防盗链,就是让绕开本站资源展示页面的资源链接失效。简单地说就是防止自己网站上的资源(如图片、文档、音频、视频等资源)被其他用户采用其他的技术手段访问或下载。
当自己网站资源被盗链后,即使自己的网站流量并不大,也会加大网站服务器的负担,因为别人不是从你的网站下载资源,但耗费的却是你的服务器带宽等资源。总之,网站被盗链后对自身的影响还是非常大的。
而防盗链技术就是为了很好解决盗链这一问题的。防盗链技术的原理很简单,http标准协议中有专门的字段记录referer,既可以追溯上一个入站地址是什么,同时对于资源文件,可以跟踪到包含显示他的网页地址是什么,所有的防盗链方法都是基于这个Referer字段。