设为首页 收藏本站
查看: 664|回复: 0

[经验分享] nginx负载均衡,redis,虚拟主机,动静分离,rewrite,读写分离

[复制链接]

尚未签到

发表于 2018-11-4 07:15:23 | 显示全部楼层 |阅读模式
  虚拟主机
  安装nginx,看脚本
  配置conf文件
  设置虚拟主机
  redis
  nginx lua脚本连接redis
  负载均衡
  在keepalive后面/server(虚拟主机)前面加上upstream
  upstream jf1 {
  server 192.168.1.25:80;
  server 192.168.1.26:80;
  server 192.168.1.27:80;
  server 192.168.1.28:80;
  server 192.168.1.29:80;
  server 192.168.1.30:80;
  server 192.168.1.31:80;
  server 192.168.1.32:80;
  }
  然后location后面加上
  location / {
  proxy_pass http://yinxingyouyou;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  proxy_pass http://jf1;
  可以在后端均衡的apache上把index.html分别写成自己的ip,方便测试时验证
  ·作业 nginx均衡lamp,搭建两个lamp环境,分别是discuz和wordpress,用nginx均衡
  注意,php环境会把负载均衡模块proxy_pass http://当成主机,必须在proxy_pass前面加
  proxy_set_header Host $host;          ($host把上面的server_name www.jf.com加到请求头里面)
  (防止请求的头网址变成模块jfedu_web)
  proxy_set_header X-Real-IP $remote_addr;                                     (这一行是带上用户IP)
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; (这一行是防止模块变成主机)
  动静分离
  多location
  location / {
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://jf1;
  }
  location ~.*\.(php|jsp|cg|asp|do)$
  {
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://jf1;
  }
  location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
  {
  root /usr/local/nginx/html/discuz;
  expires  30d;
  #expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,可以节省带宽和环节服务器压力,缓存到本地的文件状态码是304,可以ctrl+F5强制刷新清除缓存
  }
  .* 代表一个或多个字符   | 或的意思  $结尾
  静态文件走本地,动态文件走后端apache
  location里的正则匹配
  '=' > '完整路径' > '^~' > ~* > '/'         = /还是/,优先级最低  =加绝对路径,优先级最高
  有的网站是把图片文件专门放在一个发布目录,音乐文件放在一个发布目录,视频文件放在一个发布目录。也有的综合性网站是把文件全部放在一个目录,比如discuz
  304是缓存 报错:404:找不到页面 403:拒绝访问 502:bad gateway后端Apache停了
  
  Rewrite
  server_name  www.yinxing.com www.yinxingyouyou.com ;
  if ( $host = www.yinxing.com ) {
  rewrite ^/baidu$ http://www.yinxing.com/search permanent;
  }
  if ( $host = www.yinxingyouyou.com ) {
  rewrite ^/(.*)$ http://www.yinxing.com/ permanent;
  }
  伪静态需要学习
  日志切割
  #!/bin/bash
  #auto mv nginx log shell
  #by author wugk
  S_LOG=/usr/local/nginx/logs/access.log
  D_LOG=/data/backup/`date +%Y%m%d`
  echo -e "\033[32mPlease wait start cut shell scripts...\033[1m"
  sleep 2
  if [ ! -d $D_LOG ];then
  mkdir -p  $D_LOG
  fi
  mv  $S_LOG  $D_LOG
  kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
  echo "-------------------------------------------"
  echo "The Nginx log Cutting Successfully!"
  echo "You can access backup nginx log $D_LOG/access.log files."
  最后在crontab中添加如下代码即可,每天晚上自动去切割日志:
  0 0  * * *
  /bin/sh /data/sh/auto_nginx_log.sh  >>/tmp/nginx_cut.log 2>&1
  
  也可以用cronlog切割,自行百度
  nginx防盗链
  防止自己服务器的资源被别人引用
  防盗链测试:在目标机器上新建页面
  www.jf1.com/test.png
  然后本机设置如下
  
  TEST Nginx PNG
  
  
  就可以盗取
  禁止方法:在location后加一行
  if ($host !='*.jf1.com') {
  return 403;          也可以写200,就是虚假成功了
  }
  F12再看已经forbidden
  NGINX
  可以作为反向代理服务器,还可以按照调度规则实现动静分离,可以按照轮询、ip_hash、URL——hash、权重等多种方式对后端服务器做负载均衡,还支持后端服务器的健康检查。
  用upstream均衡,均衡的时候有很多算法
  upstream yinxingyouyou_web {
  ip_hash
  server 192.168.1.100 weight=1 max_fails=2 fail_timeout=10s;
  server 192.168.1.101 weight=1 max_fails=2 fail_timeout=10s;
  }
  ip_hash是保持会话登录不变,但是不能保证平均均衡,所以一般这里都是rr轮询,然后在redis里设置回话保持,加在数据库前面的一层缓存
  nginx+tomcat+redis+mysql-AB tomcat连redis,redis连tomcat有驱动,开发会写好
  ·upstream的 fail_timeout和max_fails,用来判断负载均衡upstream中的某个server是否失效。在fail_timeout的时间内,nignx与upstream中某个server的连接尝试失败了max_fails次,则nginx会认为该server已经失效。在接下来的 fail_timeout时间内(不宜太短,网络有延迟),nginx不再将请求分发给失效的server。
  ·如果max_fails=0,即关闭后端服务器健康检查,如果权重一样,那么每次请求都会有机会发到后端不可用的服务器。
  ·proxy_connect_timeout nginx与后端连接的超时时间,单位为秒,默认为60秒。我们在nginx错误日志里面看到的(110: Connection timed out),就是指nginx与后端连接已经超时。报502错误。
  ·proxy_read_timeout 建立连接后,nginx等候读取后端服务器响应的时间,默认为60秒。在一些比较繁忙的后端,比如线程数经常达到峰值了的tomcat,这个值注意不要设得太低,虽然线程数已经用光,但请求已经进入待队列之中。
  ·proxy_send_timeout nginx转发请求到后端的超时时间,默认为60秒,在这段时间内nginx没将请求数据发到后端将关闭连接。这个在网站有比较多像提交表单(post)上传内容之类的需要留意一下.
  ·keepalive_timout 时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要等待keepalive_timeout秒后,才开始关闭这个连接。就是会话保持。
  ·关闭atimevim /etc/fstab里
  在根后面的defaults,后面加noatime,再后面1 1,是开始的时候检查磁盘,写成0就是不质检磁盘
  关闭系统日志,系统日志warm,debug,info,error,2万台机器,ELK日志搜集平台


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-630404-1-1.html 上篇帖子: redis集群时,出现的几个异常问题 下篇帖子: 安装开源redis-flayber
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表