一个简单的docker demo 集成openresty+ redis,可以实现基于redis的动态修改反向代理的处理

环境准备

  • docker-compose 文件
version: "3"
services:
nginx-redis:
build: ./
image: dalongrong/appdemorong
tty: true
ports:
- "6379:6379"
- "8099:80"
  • dockerfile
FROM openresty/openresty:alpine
RUN apk add --update \
&& apk add redis
ADD entrypoint.sh /entrypoint.sh
COPY redis.conf /redis.conf
COPY nginx.conf usr/local/openresty/nginx/conf/
ENV PATH=$PATH:/usr/bin
EXPOSE 6379
EXPOSE 80
ENTRYPOINT ["sh", "/entrypoint.sh"]
  • redis.conf 配置文件
    很简单主要是使用后台任务运行,同时禁用保护模式,添加以下内容就可以了
daemonize yes
protected-mode no
  • nginx.conf
    基于redis 的host 查找,实现动态负载(需要手工修改redis key 信息)
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
resolver 114.114.114.114;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
set $subdomain api.yonyou.com;
access_by_lua_block {
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
local host = ngx.var.host;
local res, err = red:get(host)
ngx.var.subdomain = res
}
proxy_pass http://$subdomain/$uri;
proxy_set_header Host $subdomain;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /ip {
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;
}
}
}
  • entrypoint.sh
    很简单就是启动redis以及openresty
#!/bin/bash
redis-server /redis.conf
exec /usr/local/openresty/bin/openresty -g "daemon off;"

运行&&测试

  • 构建&&启动
docker-compose build && docker-compose up -d
  • 添加负载均衡配置
  • 访问效果
    当前是一个jenkins 界面

    重新修改为一个git的界面

说明

demo 很简单,主要是为了运行一个测试环境,但是同时为了方便进行反向代理后端的调整,所以写了一个简单的demo
实际上更好的方式可能是使用supervisor,tini,或者docker 自带的init 功能
tini 参考dockerfile 如下:

FROM openresty/openresty:alpine
ENV TINI_VERSION v0.18.0
RUN apk add --update \
&& apk add redis \
&& apk add --no-cache tini
ADD entrypoint.sh /entrypoint.sh
COPY redis.conf /redis.conf
COPY nginx.conf usr/local/openresty/nginx/conf/
ENV PATH=$PATH:/usr/bin
EXPOSE 6379
EXPOSE 80
ENTRYPOINT ["/sbin/tini","-s", "--", "/entrypoint.sh"]
 
 
 
 

openresty redis all in one docker demo的更多相关文章

  1. <正则吃饺子> :关于redis集群的测试demo

    redis集群的测试demo,来自网络,具体不详. 1.下载地址,如下:http://download.csdn.net/detail/u012543819/9729291 2.项目是java项目,结 ...

  2. Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息

    Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...

  3. Redis分布式缓存 教程以及DEMO

    原文地址:http://blog.csdn.net/qiujialongjjj/article/category/1800171 redis demo源码下载:http://download.csdn ...

  4. Openresty+redis实现灰度发布

    一.架构 环境: 192.168.189.131:tomcat服务 192.168.189.132:tomcat服务 192.168.189.130:OpenResty服务.redis服务 流程: 请 ...

  5. redis StackExchange 主备 实现 demo

    网上关于redis高可用基本都是用redis-sentinel 哨兵 或者 redis cluster 集群来实现, 但是有没有更简单的方式,比如我现在就只有2个redis实例.我试验的结果是我们可用 ...

  6. redis主从配置(docker实现)

    一.docker新建两个redis服务端,并分别设置端口为6379和6380 命令如下: docker run -p : -d --name redis-server docker.io/redis: ...

  7. .net下redis和rabbitmq简单使用demo

    是参考 一下两篇博文整理了下. Redis:   https://www.cnblogs.com/5ishare/p/6492380.html RabbitMq:   https://www.cnbl ...

  8. 使用U盘安装Linux最美桌面发行版Elementary OS 及常用开发环境配置(JDK,Redis,MySQL,Docker,IDEA,STS)

    前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...

  9. .Net Core使用Redis的一个入门简单Demo

    本例子讲述一个在.Net core环境中对Redis数据库进行增删改查操作. 首先,要安装好Redis数据库,至于怎么安装,本文不再赘述,可以自行百度,有很详细的教程. 安装好之后,在CMD中输入 r ...

随机推荐

  1. [Linux]Linux下yaf发送IPV4和IPV6的IPfix

    一.IPFIX与NetFlow 一.IPFIX 全称IP Flow Information Export,即IP流信息输出,是网络流量监测的国际标准.IPFIX是IETF的一个工作组,它的主要工作就是 ...

  2. 升级pip10.0.0后出现ModuleNotFoundError: No module named 'pip'的问题

    pip10升级后各种pip install出错----- Traceback (most recent call last): File "/usr/local/bin/pip", ...

  3. 2.10 C++利用构造函数限制对象的创建

    参考: http://www.weixueyuan.net/view/6342.html 总结: 限制对象的创建.限制创建对象时能够按照我们需要的那样创建,而不能随意的创建对象. 类中显示地声明了任意 ...

  4. linux系统安装mysql详细配置

    参考文章https://baijiahao.baidu.com/s?id=1584072431498789934&wfr=spider&for=pc https://www.5yun. ...

  5. 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...

  6. DevExpress WPF v18.2新版亮点(六)

    买 DevExpress Universal Subscription  免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...

  7. 通过泛型获得继承类的类原型getGenericSuperclass

    首先贴上代码 package com; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; /** * ...

  8. CodeForces - 779D

    Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. But i ...

  9. <Spark><Programming><RDDs>

    Introduction to Core Spark Concepts driver program: 在集群上启动一系列的并行操作 包含应用的main函数,定义集群上的分布式数据集,操作数据集 通过 ...

  10. HDU 1004 Let the Balloon Rise(map应用)

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...