Open zhaobinglong opened 4 years ago
反向代理隐藏了服务器的信息,它代理的是服务器端,代其接收请求。换句话说,反向代理的过程中,客户端并不知道具体是哪台服务器处理了自己的请求。如此一来,既提高了访问速度,又为安全性提供了保证
worker_processes 1; server { listen 80; location / { // 关键就是proxy_pass,它才是真实要访问的地址 proxy_pass http://10.10.10.10:20186; } }
一台服务器上可以开启多个服务,但是大部分的网络http的服务都是走的80端口,一台服务器上的所有服务如何争抢唯一的一个80端呢,这个时候反向代理就发挥作用了,每个服务使用一个唯一的特殊端口,ng根据用户请求的url,把请求转发到最终的端口。最终实现了一台服务器部署多个应用
在正向代理中,隐藏了客户端信息; 在反向代理中,隐藏了服务端信息;
负载均衡实际上就是将大量请求进行分布式处理的策略。
worker_processes 1; // 工作进程数,和CPU核数相同
events {
worker_connections 1024; // 每个进程允许的最大连接数
}
http {
// 负载均衡就靠它
// 语法格式:upstream name {}
// 里面写的两个server分别对应着不同的服务器
upstream firstdemo {
// ip_hash它的作用是如果第一次访问该服务器后就记录,之后再访问都是该服务器了,
// 这样比如第一次访问是33服务器,那之后再访问也会分配为33服务器访问了
ip_hash;
server 39.106.145.33; // 第一台服务器
server 47.93.6.93; // 第二台服务器
}
server {
listen 8080;
location / {
proxy_pass http://firstdemo; // 实现反向代理,代理到firstdemo里两个服务器上
}
}
}
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
}
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备, 注意这里的关键词backup
}
cd /usr/local/nginx/conf/vhost
,进入nginx的vhost文件夹,新建xxx.conf文件,
server {
listen 80;
server_name sub.examlab.cn;
index index.html index.php;
root /home/wwwroot/default/haircut/admin/public; // Tips: 子站点的根目录配置在这里
error_log logs/test.cos.com.error_log;
access_log logs/test.cos.com.access_log;
// Tips:如果是静态的站点,location就不用配置了
// 如果是php动态站点,要注意这里的 fastcgi_pass,
// fastcgi_pass有两种配置值,要根据当前服务器上php的listen方式来配置
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
// 直接在命令行运行
nginx -t -c xxx.conf
server {
listen 80;
listen 443 ssl;
ssl_certificate /usr/local/nginx/conf/3690180__examlab.cn.pem; // Tips:证书的pem文件,一般申请https证书时候得到
ssl_certificate_key /usr/local/nginx/conf/3690180__examlab.cn.key; // Tips:证书的key文件,
server_name webpic.examlab.cn;
···
http{
...
limit_req_zone$binary_remote_addr zone=allips:10m rate=20r/s;
解释:#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr为key,限制平均每秒的请求为20个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
...
server{
...
location {
...
limit_reqzone=allips burst=5 nodelay;
解释: #限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。
...
}
...
}
...
}
CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。
cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。
HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误。
HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令
这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制
$ wget https://tar.goaccess.io/goaccess-1.4.tar.gz
$ tar -xzvf goaccess-1.4.tar.gz
$ cd goaccess-1.4/
$ ./configure --enable-utf8 --enable-geoip=legacy
$ make
# make install
// 在serer中添加下面的代码,go.html是名字,可以随意取
location /go.html {
alias /homw/wwwroot/default/report/go.html;
}
// 在nginx/logs目录下,执行:
goaccess access.log -o /home/wwwroot/default/report/go.html --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED
第一次安装,发现90%的流量都来自数据库主页的访问,黑客无时无刻不再扫描这互联网上的漏洞
https://www.chenleilei.net/article/50.html https://goaccess.io/ https://www.cnblogs.com/zkfopen/p/10126959.html
1、查看有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l
2、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l
3、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file > log.txt
// 在serer中添加下面的代码,go.html是名字,可以随意取
// url中访问go.html,实际返回的是指定的html文件
location /go.html {
alias /homw/wwwroot/default/report/go.html;
}
rewrite url
alias 目录
// 将请求全部代理到新地址
location / {
proxy_pass http://http_server_pool;
}
// 将指定url中的请求代理到新地址
// 注意:如果proxy_pass后面的新地址最后没有/,则只是替换旧地址的域名,匹配到的规则会一起应用到新地址
location ^~ /army/ {
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000; // 这里代理一个在3000端口的上的nodejs应用
proxy_redirect off;
}
proxy_pass url
LNMP环境一键配置
参考
https://juejin.im/post/6864085814571335694