访问控制
限制user-agent
user-agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
限制uri
可以根据request_uri变量来限制访问。
if ($request_uri ~ (abc|123))
{
return 404;
}
补充:
curl命令用法:
curl -v -A ‘aaaaaspider/3.0’ -e “1111” -x127.0.0.1:80 bbs.aminglinux.cc -I
-A 指定user-agent -e 指定referer -x指定访问目标服务器的ip和port -I只显示 header信息,不显示具体的网页内容
-v 显示详细的通信过程
Nginx反向代理
什么叫反向代理?
A(用户)–> B(在和C同一个机房,并且有公网)–> C(不带公网的机器)
什么场景会使用反向代理?
1)访问不带公网的内网机器
2)解决两台机器之间通信有障碍的问题
ctrl+a直接跳到命令行最左端,ctrl+e直接跳到命令行最右端。
主机获取动态IP地址,会自动生成ens37文件,但是在/etc/sysconfig/network-scripts/ifcfg-目录下没有ifcfg-ens37文件,如果想把获取的动态IP地址变为静态IP地址,可以在该目录下复制一个ens37文件,并将里面
IP地址设置为获取到的动态IP地址,保存ens37文件,重启网络服务(systemctl restart network),该动态IP地址就可以设置为静态IP地址。
场景设置:
1)A B 两台机器,其中A只有内网,B有内网和外网
2)A的内网ip是 192.168.222.128
3)B的内网ip是 192.168.222.129 B的外网IP是 192.168.149.128
4)C为客户端,C只能访问B的外网IP,不能访问A或者B的内网IP
需求目的:
C要访问到A的内网上的网站
配置模板:
location /
{
proxy_pass http://ip;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Nginx的负载均衡
另一种反向代理。
什么是负载均衡?
负载均衡就是,把请求均衡地分发到后端的各个机器上面。
比如,A B C D 四台WEB服务器,现在E要访问这4台服务器,F为Nginx反向代理服务器,可以让F把E的请求均衡地发送到
A B C D 4台服务器上。
配置:
upstream qq_com
{
ip_hash;
server 61.135.157.156:80;
server 125.39.240.113:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
####################
upstream apelearn
{
ip_hash;
server 115.159.51.96:80 weight=100;
server 47.104.7.242:80;
}
server
{
listen 80;
server_name www.apelearn.com;
location /
{
proxy_pass http://apelearn;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}