nginx1

Nginx用反向代理做的负载均衡。 Nginx运用算法进行负载均衡。

2台nginx后面2台web服务器。

Nginx负载均衡就是nginx的upstream模块。
负载均衡:一台nginx后面2台tomcat。还没用到keepliaved。upstream就是一组服务器的集合,
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


	upstream web_pools {  //web_pools是名称
		//ip_hash;  //hash算法,用ip_hash的时候backup不能用,
		server 10.0.0.9:80 weight=5 max_fails=10 fail_timeout=10s least_conns=10;   //默认是80,可以是ip也可以是域名,max_fails检测到失败的次数,最小连接数,
		server 10.0.0.10:80 weight=5 max_conns=100;  //最大100个连接
		#server 10.0.0.10:80 weight=5  backup;   //web服务器的热备,上面活着就不服务都死了就服务,
	}
	
    server {  //请求www.etiantian.org的80端口,会加载虚礼主机server,location是默认情况下,只要访问域名www.etiantian.org都会经过这个location,会去找html首页文件,把请求全部抛给了proxy_pass指令,实际上抛给upstream web_pools配置的2台机器了,
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://web_pools;
//proxy_set_header Host  $host;  //携带主机名,就是域名。
	        include proxy.conf;
        }

    }
}

proxy.conf

proxy_redirect off; 
        proxy_set_header Host  $host;  //把用户请求的主机名带到后面去,把$host给Host传到后面去。
        proxy_set_header X-Forwarded-For $remote_addr; //把用户的ip通过代理转给后面
        proxy_connect_timeout 90; //代理和后端超时的时间
        proxy_send_timeout 90; //后端服务器必须在这个时间内回传数据,否则nginx断开这个连接
        proxy_read_timeout 90; //后端等待后端的时间
        proxy_buffer_size 4k; //nginx从服务端收到数据后的缓冲区大小,内存缓存
        proxy_buffers 4 32k;//缓冲区的大小
        proxy_busy_buffers_size 64k;   //繁忙时间的buffer
        proxy_temp_file_write_size 64k; //buffer不够的时候写磁盘,磁盘文件可以写多大,磁盘缓存

缓冲是只用一次,后面用户不会在从这里面请求到。缓存是用户可以多次使用的。Nginx的缓存也有第三方插件。

Nginx还有诊断功能,节点好了就可以自动加进来。健康监测是根据端口检查的(探测几次死了移除,探测几次活了就加进来,建议2-3次)。

负载均衡和反向代理的区别:
Lvs软件的负载均衡是一个转发的功能,其余的就不管了。
Nginx是反向代理,反向代理是你请求我,我转交给别人。会fork出一个请求交给别人,所以叫代理。代理是要帮你做事的,不仅仅要你直接去找别人。

Nginx的负载均衡依赖ngx_http_upstream_module模块,这个模块支持的代理方式有proxy_pass(默认wrr权重轮训算法),fastcgi_pass,memcached_pass。
算法:
Rr轮询:一个一个的转发。
Weight:根据权重(机器性能有关)
ip_hash:同一个客户端请求代理服务器,第一次发到哪个服务器后面就发到哪个服务器,知道会话超时。
Fair:动态算法,第三方算法,根据节点的响应时间分配请求。探测哪个节点时间快。必须下载upstream_fair模块。
Url_hash:根据地址来hash,hash(url)==1-10就跑到第一个服务器,hash(url)=10-20就跑到第二个服务器上。同一个地址只定向到一台服务器。跟ip_hash很像。

proxy_pass指令:nginx方向代理模块。

用户请求nginx时候,nginx不会全部转发,nginx要重新发起请求,所以有些内容丢失了。

for n in {1..100};do curl www.etiantian.org; sleep 1;done

Nginx实现动静分离:

后面的2webServer的代码层没有动静分离。根据扩展名和路径实现动静分离。

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


upstream web_pools {
       server 10.0.0.9:80 weight=5 max_fails=10 fail_timeout=10s;
       server 10.0.0.10:80 weight=5;
       #server 10.0.0.10:80 weight=5  backup;
}
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {   //默认走这里
            root   html;
            index  index.html index.htm;
            proxy_pass  http://web_pools;
	    include proxy.conf;
        }
        location /static/image/ { //根据路径进行转发,静态资源分离
	        proxy_pass  http://static_pools;
	        include proxy.conf;
        }
        location /dynamic/image/ { //根据路径进行转发
	        proxy_pass  http://dynamic_pools;
	        include proxy.conf;
        }
    }
}
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

	upstream static_pools {
		server 10.0.0.9:80 weight=5 max_fails=10 fail_timeout=10s;
	}

	upstream dynamic_pools {
		server 10.0.0.10:80 weight=5;
	}
	
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {    //根据user_agent转发,user_agent是客户端的标识
        if ($http_user_agent ~* "MSIE")//IE浏览器
			{
				proxy_pass http://dynamic_pools;
			}
        if ($http_user_agent ~* "Firefox")//火狐浏览器
			{
				proxy_pass http://static_pools;
			}
        proxy_pass http://dynamic_pools;  //默认
        include proxy.conf;
    }
}
}

移动端的应用:

移动服务器和pc服务器是不一样的。

worker_processes  1;
	events {
		worker_connections  1024;
	}
	http {
		include       mime.types;
		default_type  application/octet-stream;
		sendfile        on;
		keepalive_timeout  65;

	upstream static_pools {
		server 10.0.0.9:80 weight=5 max_fails=10 fail_timeout=10s;
	}

	upstream dynamic_pools {
		server 10.0.0.10:80 weight=5;
	}
	
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
			if ($http_user_agent ~* "android")
				{
					proxy_pass http://static_pools;
				}
			if ($http_user_agent ~* "iphone")
				{
					proxy_pass http://dynamic_pools;
				}
			proxy_pass http://dynamic_pools;
			include proxy.conf;
		}
}
}
原文地址:https://www.cnblogs.com/yaowen/p/9046331.html