一、通過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,查看效果