skipper 具有强大的http 路由功能,fabio 是一个方便的基于consul 的负载均衡软件,
我们可以方便的使用skipper 路由功能进行fabio的扩展,使用registrator 进行服务注册

环境准备

  • docker-compose
version: "3"
services:
fabio:
image: fabiolb/fabio
ports:
- "9999:9999"
- "9998:9998"
volumes:
- "./fabio.properties:/etc/fabio/fabio.properties"
consul:
image: consul
command: agent -config-file=/usr/local/etc/consul/server_agent.json
volumes:
- "./consul.json://usr/local/etc/consul/server_agent.json"
ports:
- "8500:8500"
web:
image: nginx
ports:
- "80:80"
environment:
- SERVICE_TAGS=urlprefix-/
- SERVICE_80_CHECK_HTTP=/
- SERVICE_80_NAME=web-app
- SERVICE_CHECK_INTERVAL=10s
- SERVICE_CHECK_TIMEOUT=5s
ip:
build:
context: ./
dockerfile: Dockerfile-ip
image: dalongrong/openresty-ip
skipper2:
image: dalongrong/skipper
environment:
- SERVICE_TAGS=urlprefix-/ip
- SERVICE_9090_NAME=skipper
- SERVICE_9090_CHECK_HTTP=/
- SERVICE_CHECK_INTERVAL=10s
- SERVICE_CHECK_TIMEOUT=5s
ports:
- "9090:9090"
volumes:
- "./router.eskip:/router.eskip"
command: skipper -enable-ratelimits -enable-prometheus-metrics -routes-file /router.eskip
registor:
image: gliderlabs/registrator:latest
command: consul://consul:8500
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
  • 说明
    对于skipper 的扩展使用的是nginx 重写,同时注册skipper到fabio中
    ip 服务的dockerfile && nginx 配置
    Dockerfile-ip
FROM openresty/openresty:alpine
COPY nginx.conf usr/local/openresty/nginx/conf/
EXPOSE 80

nginx.conf

worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
rewrite ^/ip(.*) $1 break;
proxy_ignore_client_abort on;
client_body_buffer_size 10M;
client_max_body_size 10G;
proxy_buffers 1024 4k;
proxy_read_timeout 300;
proxy_pass http://localhost:88;
}
location /alert {
default_type text/html;
content_by_lua_block{
ngx.say([[<script>alert("error")</script>]])
}
} location /ip2 {
default_type text/html;
content_by_lua_block{
ngx.say(ngx.var.remote_addr)
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 88;
server_name localhost;
charset utf-8;
location / {
index index.html index.htm;
}
location /alert {
default_type text/html;
content_by_lua_block{
ngx.say([[<script>alert("error")</script>]])
}
} location /ip2 {
default_type text/html;
content_by_lua_block{
ngx.say(ngx.var.remote_addr.."from upstream")
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
  • fabio 配置文件
    fabio.properties
registry.consul.addr = consul:8500
  • skipper router 配置
hello: Path("/ip/*")->compress("text/html")-> corsOrigin()->setResponseHeader("TOKEN","dalongdemo")->responseCookie("test-session", "abc", 31536000)->
setRequestHeader("TOKEN","dalongdemo")-> "http://ip";
root: Path("/") -> status(200) -> <shunt>;

启动&&测试

  • 启动
docker-compose up -d

参考资料

https://github.com/rongfengliang/fabio-with-skipper
https://gliderlabs.github.io/registrator/latest/
https://github.com/fabiolb/fabio
https://github.com/zalando/skipper

 
 
 
 

使用skipper 扩展fabio 的路由&&http proxy 功能的更多相关文章

  1. Sails 关闭自动路由 Automatic Routes 功能。

    Sails 关闭自动路由 Automatic Routes 功能. Sails 中的路由两种:Custom Routes 和 Automatic Routes,自定义路由和自动路由.详见文档: Sai ...

  2. MVC小系列(二十一)【带扩展名的路由可能失效】

    mvc3之后:如果路由带上扩展名,比如这样: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRout ...

  3. SpringCloud:扩展zuul配置路由访问

    继续上次整合SpringCloud的demo进行扩展zuul:https://www.cnblogs.com/nhdlb/p/12555968.html  这里我把zuul划分出一个模块单独启动 创建 ...

  4. 爱上MVC系列~带扩展名的路由失效问题

    回到目录 对MVC中,对URL进行重写变得非常方便,你只要设置相应的路由规则即可完成,但进行MVC3后,发现设置了以下路由,系统具体不认 routes.MapRoute( name: "De ...

  5. MVC 带扩展名的路由无法访问

    在MVC中,路由是必不可少的,而且MVC对Url的重写非常方便,只需要在路由中配置相应的规则即可.假如我们需要给信息详情页配置路由,代码如下: routes.MapRoute( name: " ...

  6. 扩展XAF模型信息实现自定义功能

    如何隐藏 web listview 的 编辑控制列如下图: 这列怎么让它隐藏? 感谢[少侠]XAF_杨东 提供解答!感谢XAF_小学生整理.   A: 注册自定义接口IModelListViewExt ...

  7. MVC采用HtmlHelper扩展和Filter封装验证码的功能

    最近因为有个项目除了登录还有其他很多地方需要用到验证码的功能,所以想到了采用HtmlHelper和ActionFilter封装一个验证码的功能,以便能够重复调用.封装好以后调用很方便,只需在View中 ...

  8. [原创] 扩展jquery-treegrid插件, 实现勾选功能和全删按钮.

    新上手一个项目, 因而正好想学习下bootstrap, 所以就采用asp.net mvc + bootstrap来做.  因为需要TreeGrid的控件, 本来想用easyUI.LingerUi.DW ...

  9. WiFidog 广告路由可修改功能更加智能化的几点看法

    海蜘蛛Tomato出了mini版,这个对很多做WiFi营销的朋友来说,是一个福音,因为可以直接从FIR302B,一台30多块钱的路由直接刷成Hi-WiFi,而且界面这么漂亮 相信很多人已经对此界面OE ...

随机推荐

  1. 四:(之五)Dockerfile语法梳理和实践

    *5.Dockerfile语法梳理和实践 5.1 尽量使用官方的image作为base image 5.2 metadata:指明作者 版本 描述 5.3 每一条run都能形成一个分层,避免无用分层应 ...

  2. VBA续嘘嘘——宏技巧集绵

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  3. Android : iperf-2.0.4 网络测试工具

    一.源码下载及交叉编译: 下载:https://pan.baidu.com/s/1i6NYDF3   //包含linux和windows上的可执行文件 1. 解压后获得perf-2.0.4源码.2. ...

  4. SharePoint REST API - 基本操作(二)

    博客地址:http://blog.csdn.net/FoxDave 上一节讲了SharePoint REST API的一些基本操作,本节将继续介绍一些关于SharePoint REST API的内容. ...

  5. mysql 数据库关于增加用户权限的问题

    一新建用户 ----------- 二首先修改权限必须在电脑cmd 中运行 开设的权限  主要就是 1 所有库的  *.*      2  所有的表   db.*      3所有的字段db.t1   ...

  6. Tomcat jdk 项目搭建问题

    Tomcat 出现log4j未找到  是因为缺少servlet包 出现版本1.5及更高错误 是Java Compiler的版本错误 需重新导包Installed JRES.

  7. python day02作业

  8. 重启uwsgi脚本备份

    NAME="identifyImg_uwsgi.init" if [ ! -n "$NAME" ];then echo "no arguments&q ...

  9. FZU 2273 Triangles 第八届福建省赛 (三角形面积交 有重边算相交)

    Problem Description This is a simple problem. Given two triangles A and B, you should determine they ...

  10. Android驱动中的remap_pfn_range()校验漏洞(CVE-2013-2596)

    简单介绍 当然类似函数还有io_remap_pfn_range(). remap_pfn_range() 为用户态提供了一种手段访问内核地址空间.它通过新页表,将一块内核物理内存映射到用户态进程空间. ...