目录

 

安装ngnix

nginx与zuul的区别

nginx+zuul模式

简单实践

配置启动nginx

新建zuul_copy

测试


安装ngnix

ngnix一般部署在linux系统中,这里用centos作为ngnix部署服务器。

安装ngnix

成功之后,访问服务器ip,默认端口是80端口。

consul 和nginx 组合使用 nginx zuul 一起使用_nginx

nginx的相关内容详见本博客转载的某位大佬的nginx系列博文。

nginx与zuul的区别

Nginx 是由 IgorSysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,一个高性能的 HTTP 和反向代理服务器。Ngnix 一方面可以做反向代理,另外一方面做可以做静态资源服务器。

  • Nginx 是 C 语言开发,而 Zuul 是 Java 语言开发
  • Nginx 负载均衡实现,采用服务器实现负载均衡,而 Zuul 负载均衡的实现是采用 Ribbon + Eureka 来实现本地负载均衡
  • Nginx 适合于服务器端负载均衡,Zuul 适合微服务中实现网关
  • Nginx 相比 Zuul 功能会更加强大,因为 Nginx 可以整合一些脚本语言(Nginx + Lua)
  • Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP / POP3 /SMIP 服务器。Zuul 是 Spring Cloud Netflix 中的开源的一个 API Gateway 服务器,本质上是一个 Servlet 应用,提供动态路由,监控,弹性,安全等边缘服务的框架。 Zuul 相当于是从设备和网站到应用程序后端的所有请求的前门。
  • Nginx 适合做门户网关,是作为整个全局的网关,对外的处于最外层的那种;而 Zuul 属于业务网关,主要用来对应不同的客户端提供服务,用于聚合业务。各个微服务独立部署,职责单一,对外提供服务的时候需要有一个东西把业务聚合起来。
  • Zuul 可以实现熔断、重试等功能,这是 Nginx 不具备的。

nginx+zuul模式

consul 和nginx 组合使用 nginx zuul 一起使用_网关_02

nginx作为整个系统的网关入口,每一块聚合的业务搭建一个zuul业务网关集群,一个请求过来,首先经过 Nginx 的一层负载,到达网关,然后由网关负载到真实后端,若后端有问题,网关会进行重试访问,多次访问后仍返回失败,可以通过熔断或服务降级立即返回结果。而且,由于是负载均衡,网关重试时不一定会访问到出错的后端。

简单实践

配置启动nginx

以下配置文件中的负载均衡服务列表是我们开启的zuul网关的ip:port。然后开启nginx服务。

#user  www www;
worker_processes  2;
error_log  logs/error.log  crit;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
pid        logs/nginx.pid;
worker_rlimit_nofile 2048;

events {
    use epoll;
    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  65;
	# gzip压缩功能设置
	include	gzip.conf;

	client_max_body_size   10m;
	client_body_buffer_size   128k;
	
	# 设定负载均衡后台服务器列表 
	upstream  backend  { 
	      #ip_hash; 
	      server   10.129.75.22:7001 max_fails=2 fail_timeout=3s ;  
	      server   10.129.75.22:7002 max_fails=2 fail_timeout=3s ;  
	}
 	# 很重要的虚拟主机配置,多个虚拟机可以复制修改此部分
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;

        #对 / 所有做负载均衡+反向代理
	location / {
		#root html;
		#index index.html;
		proxy_pass        http://backend;  
		proxy_redirect off;
		include proxy.conf;
	}
        
        #静态文件,nginx自己处理,不去backend请求后端的服务
	location  ~* /download/ {  
	    root /data/app/nginx/downloads;  
	}
        
	location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {   
	    root /data/app/nginx/images;   
	    expires      7d; 
	}
        
	location /nginx_status {
		stub_status on;
		access_log off;
		allow 10.129.75.22;
		deny all;
	}
        
	location ~ ^/(WEB-INF)/ {   
	    deny all;   
	}
        
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
		root   html;
	}
    }
}

新建zuul_copy

拷贝一份zuul应用,并上传一份相应的配置文件,端口号改为7002。

consul 和nginx 组合使用 nginx zuul 一起使用_consul 和nginx 组合使用_03

启动以下应用

consul 和nginx 组合使用 nginx zuul 一起使用_负载均衡_04

测试

consul 和nginx 组合使用 nginx zuul 一起使用_网关_05

这里我访问的是我centos虚拟机中的ip,刷新几次,发现其对业务网关进行了负载均衡处理。

consul 和nginx 组合使用 nginx zuul 一起使用_负载均衡_06

consul 和nginx 组合使用 nginx zuul 一起使用_Nginx_07

此时查看nginx状态

consul 和nginx 组合使用 nginx zuul 一起使用_负载均衡_08

活跃连接数两个,创建29个连接,29次握手,处理43个请求。

关于nginx动态负载均衡参考:使用upsync模块实现负载均衡