linux下nginx負載均衡例子

一、通過docker安裝nginx,並運行容器

#拉取鏡像
docker pull nginx

#創建並運行容器
docker run -itd --name nginx -p 8080:80 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -d nginx

注意:

需要提前在/etc下創建nginx目錄,並在nginx目錄下創建nginx.conf文件,文件中內容要正確,不然docker容器無法啓動

如:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    upstream demoproject{
	server 127.0.0.1:8000 weight=3;
	server 127.0.0.1:8001;
	server 127.0.0.1:8002;
	server 127.0.0.1:8003;
    }

    server {
	listen 80;
	server_name www.mydemo.com;
	location / {
		proxy_pass http://demoproject;
	 }
     }
}

其中http下的upstream和server的配置是負載均衡的配置。訪問www.mydemo.com會負載均衡到demoproject下的四個server.具體見下文的驗證。

此時通過在瀏覽器中訪問localhost:8080可以看到nginx已經在運行了。

 

二、新建springboot web項目

修改啓動類:

package com.example.demo;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;


@SpringBootApplication
public class DemoApplication {

	public static String port;

	public static void main(String[] args) {
		if(args == null || args.length == 0) {
			System.out.println("please input port");
			System.exit(0);
		}

		port = args[0];
		System.out.println("the port is " + port);
		new SpringApplicationBuilder(DemoApplication.class).properties("server.port=" + port).run(args);

	}

}

這樣在通過命令行啓動時可以指定端口號,這樣就可以同時啓動多個監聽不同端口號的程序。

添加controller:

package com.example.demo.controller;

import com.example.demo.DemoApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("api")
public class HelloController {

    @GetMapping("hello")
    public String hello(){

        System.out.println("hello " + DemoApplication.port);
        return "hello " + DemoApplication.port;
    }
}

然後通過mvn clean package命令打包程序,會生成target目錄,在下面會有jar包。

在不同的命令行中分別運行:

java -jar xxx.jar 8000

java -jar xxx.jar 8001

java -jar xxx.jar 8002

java -jar xxx.jar 8003

啓動四個實例。

三、驗證負載均衡

打開瀏覽器,輸入http://www.mydemo.com/api/hello,查看效果

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章