Nginx小记-阿里云开发者社区

开发者社区> ccku> 正文

Nginx小记

简介:
+关注继续查看

nginx负载均衡:

http {

upstream web_pools(自定义) {
    ip_hash; hash算法(不能与backup同用)
    
    server 10.0.0.1:80 weight=5(权重);
    server 10.0.0.2:80 weight=5;
    server 10..0.3:80 backup(); 热备
}
    server {
        listen 80;
        server_name www.xxx.com;
        location / {
            root html;
            index index.php;
            proxy_pass http://web_pools;
        }
    }
}

LVS类似负载均衡相当于转发,反向代理相当于中介

2、upstream模块
支持proxy_pass,fastcgi_pass,memcached_pass

默认算法wrr权重轮询
weight 权重,越大接受的请求越多
max_fails=2 最大尝试是失败的次数,默认1,0表示禁止失败尝试;企业场景:建议2-3次;
backup:热备配置;
fail_timeout=20 失败超时时间,默认10s
down 标志着服务器永远不可用

3、调度算法
1)rr轮询
1:1
2)wrr权重轮询
rr+weight
3)ip_hash
同一个客户端ip将会分配到同一台服务器,该调度算法可以解决动态网页session共享问题;
4)fair
安装后端服务器RS的响应时间来分配请求,响应时间短的优先分配

5)url_hash
根据访问的url的hash结果来分配请求,让每个url定向到同一个后端服务器

proxy_pass:
指向upstream标签

模块:
1)proxy_set_header Host $Host;
携带用户的header,例如主机名;
当后端web服务器上也配置有多个虚拟主机时,需要使用该header来区分反向代理到哪个主机名;

location / {
    proxy_pass http://xxx;
    proxy_set_header Host $Host;
}

2)proxy_set_header X-Forwarded-For $remote_addr;
如果后端web服务器上的程序需要获取客户端IP,从该header头获取;

#后端如果是httpd需要修改日志格式logformat开头%h为
\"%{X-Forwarded-For}i\"
# 虚拟主机标签中修改默认的log日志
<VirtualHost *:80>
CustomLog logs/access.log 
#后端如果是nginx不用修改,只需在代理上添加proxy_set_header X-Forwarded-For $remote_addr;

3)proxy_connect_timeout;
后端服务器连接的超时时间

4)proxy_send_timeout;
后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,nginx将断开这个连接;

5)proxy_read_timeout;
设置nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的相应时间;

6)proxy_buffer_size;
设置缓冲区大小;

7)proxy_buffers;
设置缓冲区的数量和大小;

8)proxy_busy_buffers_size;
设置系统繁忙时的proxy_buffers大小;

9)proxy_temp_file_write_size;
设置proxy缓存临时文件的大小;

2、nginx实现动静分离

1)根据扩展名

location ~.*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
    proxy_pass http://static_pool;
    include proxy.conf;
}

2)根据目录

一个图片库
一个动态库
负载均衡器服务器上修改配置文件:

upstream static_pool {
    server 172.16.0.9:80 weight=5;
}

location /image/ {
    proxy_pass http://static_pool;
    include proxy.conf;
}

3)根据浏览器分离访问后端服务器
应用场景:某些页面不支持IE访问

upstream static_pool {
    server 172.16.0.9:80 weight=5;
}
upstream dynamic_pool {
    server 172.16.0.10:80 weight=5;
}

server {
    listen 80;
    server_name www.xxx.com;
    location / {
        if ($http_user_agent ~* "MSIE")
          {
            proxy_pass http://dynamic_pool;
          }
        if ($http_user_agent ~* "Firefox")
          {
            proxy_pass http://dynamic_pool;
          }
        proxy_pass http://dynamic_pool;
        include proxy.conf;
    }
}

3)根据安卓和苹果分离

location / {
    if ($http_user_agent ~* "android")
      {
        proxy_pass http://static_pool;
      }
    if ($http_user_agent ~* "iphone")
      {
        proxy_pass http://dynamic_pool;
      }
    proxy_pass http://dynamic_pool;    # 当安卓和苹果都不是访问谁
    include proxy.conf;
}

Keepalived高可用

1)失败接管,宕机接管
2)lvs cluster nodes healthchecks功能
Keepalived.conf里配置就可以实现LVS功能
Keepalived可以对LVS下面的集群节点做健康检查

故障转移原理:
通过VRRP协议来实现的;
在director正常工作时,主director节点会不断的向备节点广播心跳消息,

keepalived 实现服务器级别的接管
不会接管nginx服务

# 利用脚本监控nginx,当nginx服务停止,自动停止keepalived服务
[root@mfs /server/scripts/monitoring]# cat mon-keepalived.sh 
#!/bin/bash
#name: monitoring keepalived status.
#
nginx_pid_file_path="/usr/local/nginx/logs/nginx.pid"
nginxd="/usr/local/nginx/sbin/nginx"
keep_pid_file_path="/var/run/keepalived.pid"
keep(){
if [ -f $nginx_pid_file_path -a -s $nginx_pid_file_path ]
  then
    :
else
    nginx=`/usr/sbin/lsof -i :80|wc -l`
    if [ $nginx -le 0 ];then
        systemctl stop keepalived &>/dev/null
    fi
fi
}
nginx(){
    nginx1=`/usr/sbin/lsof -i :80|wc -l`
    if [ $nginx1 -gt 0 ];then
        systemctl start keepalived &>/dev/null
    fi
}
main(){
    keep
    nginx
}
main

keepalived裂脑问题
1)添加心跳线
2)fence、stonith自动管理电源
自动切断电源
3)做好监控

裂脑监控脚本:
可以ping通主节点,但从节点也有vip;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6404 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3975 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7623 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
4998 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9325 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2032 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
16310 0
+关注
62
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载