坚持#第265天~nginx2(nginx的反向代理、nginx负载均衡、nginx缓存、动静分离、平滑升级)

nginx的反向代理:

代理机location /{里面注释全部东西,然后写 proxy_pass http://必须要写http://10.12;}代理到10.12,就是curl 代理机的时候会curl到10.12
图片分离:在location下面再写一个匹配的location ~\.(jpg|png|gif|jpeg)${proxy_pass http://10.14;}现在在10.14的网站目录html复制图片进去,然后在浏览器里面输入代理机的ip/图片名称就能访问到10.14html目录里的图片。
真实服务器记录的是代理机的ip,如何真实服务器记录的是客户端的ip?在代理机上自定义日志$remote_addr传到后端给真实服务器(怎么传过去啊?抓包看http请求报文就行了),然后记录下来就行了,使用的代码是:proxy_set_header首部 X-real-IP起的名字 $remote_addr;这个是写在proxy_pass 真实服务器ip 下面的
因为$remote_addr这个值是变化的,所以需要使用proxy_set_header(请求报文的首部)来声名一个变量X-real_IP来接收$remote_addr的值
写到真实服务器里面:tcpdump -nv -i ens33port 80 -w aaa.dump回车,然后使用
在真实服务器里面vim/etc/httpd/conf/httpd.conf里面LogFormat那行%{X-real-IP}i ,注意:声名了获取X-real_IP的方法之后还要记得调用方法呀!重启服务,tail -0f/etc/httpd/logs/access_log,若果是apache的网页,就在vim /etc/httpd/httpd.conf
关键点:nginx就是代理机啊
代理机就和真实服务器连到一起去了,可以传递proxy_set_headerX-real-IP $remote_addr的变量了
yum安装的apache可以,但编译安装的apache不行,需要重新安装都在apche里面(使用熊老师的安装方法,然后声名了获取X-real_IP的方法之后还要记得调用方法呀!)

安装realip模块的目的是让真实服务器上面可以写set_real_ip_from代理机ip;real_ip_headerX-real-IP;来接收客户端的IP写到日志里面去
如果真实服务器使用的是nginx做网站,则要在真是服务器里面写vim/usr/local/nginx/conf/nginx.conf里面location里面index下面添加set_real_ip_from 代理机ip;real_ip_headerX-real-IP;重启服务,报错unknowdirective说明没有装real ip模块:
nginx -V查看
cd /nginx-1.10.3
./configure --user=nginx --group=nginx --with-http后面是什么
./configure --help | grep real查找编译的帮助
./configure --user=nginx --group=nginx --with-http_stub_status_module--with-http_realip_module 加上上面的选项和之前的选项
make不要make install了,此时当前目录下有个objs目录里面有nginx命令,将这个nginx命令覆盖到/usr/local/nginx/sbin目录里面的nginx命令
nginx -V就有了--with-http_realip_module
nginx -s stop停不掉需要kill `pidofnginx`
nginx -V
nginx -t就变成ok了
重启服务

启示:/usr/local/apache/bin/httpd -V可以查看编译安装的配置文件位置、查看配置文件位置

 

nginx负载均衡:

nginx做负载均衡需要调度器

                         nginx

 

有很多台web服务器,web1   web2  web3

 

在http里面server的外面来定义:

upstreamwebservers起名字{在代理服务器上设置,因为下面有这么多的server嘛

    #ip_hash;调度算法,破坏了负载均衡,仅第1次随机连服务器

    server 服务器1的ip:端口号(80可以省略)   weight=2;

    server 服务器2的ip  weight=1 fail_timeout=30s;

    server 服务器3的ip  max_fails=2连接失败2次服务器就挂了;

    server 服务器4的ip  backup;后背,替补,如果其他的都挂了,就用这个

}

server里面的location写proxy_pass http://webservers;

还可以加权重轮循,weight=2是出现两次再下一个,weight=1就是依次循环

 

yum装的apache反向代理

vim/etc/httpd/conf.d/proxy.conf

proxypass /http://真实服务器ip 之后访问代理机就能访问到10.12真实服务器上去了

systemctlrestart httpd

思考:真实的服务器如何获取客户端的ip

在服务器里面写抓包:

tcpdump -n-vv -i ens33 port 80 -w  tcpdumpname.dump

双击文件,左边ip是代理,右边是真实服务器ip

查看X-Forwarded-For简称为XFF这是客户端的ip

 

 

nginx缓存:

start:
代理机:
http里面server外面写
proxy_cache_path 缓存的路径在/usr/local/nginx/cachelevels=使用多少层子目录1:2:2采用3级目录,第一级采用一个字符做名称,第二级采用2个字符 keys_zone=缓存名称test:缓存有效时间10m max_size=最多缓存内容的大小1g;
在server里面写:
proxy_cache test;调用缓(之前用kes_zone定义的缓存名称)
proxy_cache_valid 200 2m;设置200状态码的缓存时间为2分钟
重启服务
cd /usr/local/nginx
ls
cd cache
ls

将/conf.d/proxy.conf改为.bak
然后在用浏览器访问即可

你会发现一直都是一个网页的内容,因为缓存生效了,并且在/usr/local/nginx/cache里面有缓存生成,有3层目录

 

 

动静分离:

本身要处理就使用fastcgi:高速接口85行附近有现成的代码
start:
真实服务器:
yum install php
vim /var/www/html/index.php
<?php
phpinfo();
?>
systemctl restart httpd
在浏览器里输入真实服务器ip

代理机:
在upstream下面再写一个upstream
upstream dongtai{
server ...
}

location ~ \.php${85行附近有现成的代码

}
重启服务

 

 

平滑升级:

你想升级版本或添加模块(就是编译的时候忘了加某个模块,现在想起来要加上去)之前要关闭进程,会中断业务,如何不中断升级或添加模块呢?

start:
nginx -V
复制
cd /root/nginx-1.10.3
make clean
./configure --help | grep real
./configure 粘贴 --with想要的模块
make不要install,之后会产生一个新的目录objs里面有一个新的nginx命令
ls /usr/local/nginx/logs/
cat nginx.pid
cd ../../sbin
ls
mv nginx nginx.bak
cp /objs/nginx /sbin
cd logs
cat nginx.pid
覆盖完毕(旧的作备份.bak)
kill -l 查看信号
kill -12 1014
ls
cat nginx.pid
nginx -V
netstat -luantp | grep nginx
ls
kill -12 8967(将旧的8967放入新生成的nginx.pid.obdbin)
kill -USR2 1014还是没有产生新的nginx.pid
ll /usr/local/logs老的进程nginx.pid.oldbin进程pid号存放点
新的cat nginx.pid的进程号就变了
cat nginx.pid*
kill -28 8967(新的排队到旧的后面去)
netstat -luantp | grep nginx老的还在,哈哈,没有挂掉
kill -3从容退出 8967
!net老的不在,新的立马来(之前需要-12),这样就不需要重启nginx服务了,不会中断业务了

 

多级代理:

X-Forwarded-For

proxy_add_x_forwarded_for

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值