文章目录
- 创建挂载目录的配置文件和日志
- 通过lua脚本实现通过请求头动态路由
直接在linux中安装请参考博客 https://blog.csdn.net/shall_zhao/article/details/142070389
这篇博客讲解如何在docker中安装
创建挂载目录的配置文件和日志
这个主要是为了我们后面对配置文件进行一定的修改方便,最好配置一下:
mkdir -p /home/docker/openresty/nginx
mkdir -p /home/docker/openresty/nginx/lua
mkdir -p /home/docker/openresty/nginx/logs
拉镜像
docker pull openresty/openresty
先运行一下OpenResty容器,把他的配置文件先拷贝出来,用于宿主机挂载
# 运行openresty容器
docker run -it --name openresty -p 7000:80 openresty/openresty
这时候我们使用的是-it参数,所以这个指令运行以后不会关闭,你也可以修改-it
为-d
,让他在后台运行,如果使用的是-it
参数的话,需要再开一个远程窗口进行文件拷贝的操作。
# 拷贝conf文件夹和html文件夹内容到宿主机
docker cp openresty:/usr/local/openresty/nginx/conf /home/docker/openresty/nginx/conf
docker cp openresty:/usr/local/openresty/nginx/html /home/docker/openresty/nginx/html
docker cp openresty:/etc/nginx/conf.d /home/docker/openresty/nginx/conf.d
拷贝完成后就可以停下这个容器,并且删除
docker stop openresty
docker rm openresty
然后我们正式启动这个容器,指定挂载路径
docker run -itd \
--privileged=true \
--restart=always \
--name openresty \
-p 7000:80 \
-p 8000:8000 \
-v /home/docker/openresty/nginx/conf:/usr/local/openresty/nginx/conf/:rw \
-v /home/docker/openresty/nginx/conf.d:/etc/nginx/conf.d/:rw \
-v /home/docker/openresty/nginx/html:/usr/local/openresty/nginx/html/:rw \
-v /home/docker/openresty/nginx/logs:/usr/local/openresty/nginx/logs/:rw \
-v /home/docker/openresty/nginx/lua:/usr/local/openresty/nginx/lua/:rw \
openresty/openresty
访问一下欢迎页面: http://192.168.10.88:7000/
我这是自己的路由,根据你的虚拟机地址修改自己的域名
打开html目录下的index.html添加一个内容
vi /home/docker/openresty/nginx/html/index.html
重启openresty查看效果
docker exec openresty /usr/local/openresty/nginx/sbin/nginx -s reload
通过lua脚本实现通过请求头动态路由
新增一个index2.html页面用于演示效果
# 进入宿主机页面文件挂载地址
cd /home/docker/openresty/nginx/html
# 复制一份index.html文件为index2.html
cp index.html index2.html
修改index2.html的内容
vi index2.html
编写Lua脚本
在/home/docker/openresty/nginx/lua目录创建一个router.lua文件,将下面内容写入到文件中
-- router.lua
local upstreams = {
V1 = "https://192.168.10.88:7000/index.html",
V2 = "https://192.168.10.88:7000/index2.html",
}
local target_server = "V1"
local specific_header = ngx.req.get_headers()["Api-Version"]
if specific_header then
target_server = specific_header
end
ngx.var.target_server = upstreams[target_server]
配置nginx.conf
vi /home/docker/openresty/nginx/conf/nginx.conf
在http块的default_type application/octet-stream;下添加lua_package_path,lua_package_path是我们存放lua脚本的地址?.lua代表.lua结尾的文件,;; 是为了确保 OpenResty 可以加载系统默认的 Lua 模块,而不仅仅是加载指定的用户自定义目录。当你需要指定自定义的搜索路径时,只需在 ;; 前添加你自己的路径即可
lua_package_path "/usr/local/openresty/nginx/lua/?.lua;;";
配置my.conf
在/home/docker/openresty/nginx/conf.d目录创建一个my.conf文件,将下面内容写入到文件中,在nginx.conf默认配置了include /etc/nginx/conf.d/*.conf;,我们将宿主机的/home/docker/openresty/nginx/conf.d 目录和容器内目录进行了挂载,只要在宿主机/home/docker/openresty/nginx/conf.d 目录添加自己的配置就能加载到。
vi /home/docker/openresty/nginx/conf.d/my.conf
server {
listen 8000;
set $target_server '';
location / {
access_by_lua_file /usr/local/openresty/nginx/lua/router.lua;
proxy_pass $target_server;
}
}
重新加载配置
docker exec openresty /usr/local/openresty/nginx/sbin/nginx -s reload
测试动态路由功能
调用V1版本
curl -H "Api-Version: V1" http://127.0.0.1:8000
调用V2版本
curl -H "Api-Version: V2" http://127.0.0.1:8000