目录
安装ngnix
nginx与zuul的区别
nginx+zuul模式
简单实践
配置启动nginx
新建zuul_copy
测试
安装ngnix
ngnix一般部署在linux系统中,这里用centos作为ngnix部署服务器。
成功之后,访问服务器ip,默认端口是80端口。
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模式
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。
启动以下应用
测试
这里我访问的是我centos虚拟机中的ip,刷新几次,发现其对业务网关进行了负载均衡处理。
此时查看nginx状态
活跃连接数两个,创建29个连接,29次握手,处理43个请求。
关于nginx动态负载均衡参考:使用upsync模块实现负载均衡