nginx负载均衡配置

Posted python真好用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx负载均衡配置相关的知识,希望对你有一定的参考价值。

nginx负载均衡配置

最近工作中涉及到了nginx,今天浅谈一下nginx负载均衡。
以一个项目实例来讨论一下什么是负载均衡。

负载均衡顾名思义是将过量的负载进行分配使得各项服务不至于发生卡顿。而nginx在这其中就扮演了一个分配者的角色。
可以是多个端口做负载或者多个服务器+多个端口负载。

这次的项目有两种服务:
一个是python起的服务,已指定了ip跟端口;
还有一种是在tomcat中起的java服务,同样也指定好了ip跟端口。
nginx的需要将这两个服务分别做负载均衡,话不多说先上nginx.conf


#user  nobody;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events 
    worker_connections  1024;



http 
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    client_max_body_size 20m;
    #gzip  on;
	
	upstream myserver 
    server ip1:8011;
    server ip1:8012;
    server ip1:8013;
    server ip1:8014;
	server ip1:8015;
    server ip1:8016;
    server ip1:8017;
    server ip1:8018;
	server ip1:8019;
    server ip1:8020;
    server ip1:8021;
    server ip1:8022;
    server ip1:8023;
    server ip1:8024;
    server ip1:8025;
    server ip2:8011;
    server ip2:8012;
    server ip2:8013;
    server ip2:8014;
	server ip2:8015;
    server ip2:8016;
    server ip2:8017;
    server ip2:8018;
	server ip2:8019;
    server ip2:8020;
    server ip2:8021;
    server ip2:8022;
    server ip2:8023;
    server ip2:8024;
    server ip2:8025;

	
	upstream javaidphoto 
    server ip1:8111;
    server ip1:8112;
    server ip1:8113;
    server ip1:8110;
    server ip2:8110;
    server ip2:8111;
    server ip2:8112;
    server ip2:8113;
    
	server 
		listen 8000;
		server_name ip1;         # 服务器公网ip

		location / 
			proxy_pass http://myserver; 			#这个是Gunicorn与Ningx通信的端口。和Gunicorn的配置相同
			proxy_connect_timeout 10;
		
		
		error_page   500 502 503 504  /50x.html;
        location = /50x.html 
            root   html;
        
	
	server 
		listen 8001;
		server_name ip1;         # 服务器公网ip

		location / 
			proxy_pass http://javaidphoto; 			#这个是Gunicorn与Ningx通信的端口。和Gunicorn的配置相同
			proxy_connect_timeout 10;
		
		
		error_page   500 502 503 504  /50x.html;
        location = /50x.html 
            root   html;
        
	



ip1,ip2都是起服务的服务器ip,一共两台,如果要做两台机器负载均衡需要在两台机器上都配置nginx.conf。

讲一下代码块:
负载均衡最关键的配置是

upstream javaidphoto 
    server ip1:8111;
    server ip1:8112;
    server ip1:8113;
    server ip1:8110;
    server ip2:8110;
    server ip2:8111;
    server ip2:8112;
    server ip2:8113;
    

我自己选择的是轮询方式的负载,其实还有一些其他的负载方式,比如:
权重方式:
权重越高分配到需要处理的请求越多。

    upstream test_server 
        server localhost:8080   weight=2;
        server localhost:8081   weight=1;
        server localhost:8082   weight=3;
        server localhost:8083   weight=4;  
    

ip_hash方式:
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

    upstream test_server
        ip_hash; 
        server localhost:8080;
        server localhost:8081; 
        server localhost:8082;
        server localhost:8083;
    

server块里配置的是nginx的监听端口,我这里配置的是8000和8001,分别对应python服务跟java服务。

改完后到sbin目录下执行:

./nginx.sh

如果已经起了nginx服务可以执行:

./nginx.sh -s reload

以上就是我对nginx负载均衡的浅薄地理解欢迎批评指正。

以上是关于nginx负载均衡配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置实现负载均衡

Nginx负载均衡,ssl原理,生成ssl密钥对,Nginx配置ssl

rancher负载均衡配置

配置Nginx实现负载均衡(转载)

nginx+keepalived实现高可用负载均衡

使用Nginx配置TCP负载均衡