安装OpenResty(Linux-Docker)

文章目录

直接在linux中安装请参考博客 https://blog.csdn.net/shall_zhao/article/details/142070389
这篇博客讲解如何在docker中安装

创建挂载目录的配置文件和日志

这个主要是为了我们后面对配置文件进行一定的修改方便,最好配置一下:

sh 复制代码
mkdir -p /home/docker/openresty/nginx
mkdir -p /home/docker/openresty/nginx/lua
mkdir -p /home/docker/openresty/nginx/logs

拉镜像

sh 复制代码
docker pull openresty/openresty

先运行一下OpenResty容器,把他的配置文件先拷贝出来,用于宿主机挂载

sh 复制代码
# 运行openresty容器
docker run -it --name openresty -p 7000:80 openresty/openresty

这时候我们使用的是-it参数,所以这个指令运行以后不会关闭,你也可以修改-it-d,让他在后台运行,如果使用的是-it参数的话,需要再开一个远程窗口进行文件拷贝的操作。

sh 复制代码
# 拷贝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

拷贝完成后就可以停下这个容器,并且删除

sh 复制代码
docker stop openresty
docker rm openresty

然后我们正式启动这个容器,指定挂载路径

sh 复制代码
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添加一个内容

sh 复制代码
vi /home/docker/openresty/nginx/html/index.html

重启openresty查看效果

java 复制代码
docker exec openresty /usr/local/openresty/nginx/sbin/nginx -s reload

通过lua脚本实现通过请求头动态路由

新增一个index2.html页面用于演示效果

sh 复制代码
# 进入宿主机页面文件挂载地址
cd /home/docker/openresty/nginx/html
# 复制一份index.html文件为index2.html
cp index.html index2.html

修改index2.html的内容

sh 复制代码
vi index2.html

编写Lua脚本

在/home/docker/openresty/nginx/lua目录创建一个router.lua文件,将下面内容写入到文件中

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

sh 复制代码
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 模块,而不仅仅是加载指定的用户自定义目录。当你需要指定自定义的搜索路径时,只需在 ;; 前添加你自己的路径即可

sh 复制代码
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 目录添加自己的配置就能加载到。

sh 复制代码
vi /home/docker/openresty/nginx/conf.d/my.conf
sh 复制代码
    server {
        listen 8000;

        set $target_server '';

        location / {
            access_by_lua_file /usr/local/openresty/nginx/lua/router.lua;
            proxy_pass $target_server;
        }
    }

重新加载配置

sh 复制代码
docker exec openresty /usr/local/openresty/nginx/sbin/nginx -s reload

测试动态路由功能

调用V1版本

sh 复制代码
curl -H "Api-Version: V1" http://127.0.0.1:8000

调用V2版本

sh 复制代码
curl -H "Api-Version: V2" http://127.0.0.1:8000
相关推荐
papaofdoudou1 小时前
QEMU和KVMTOOL在GPA(IOVA)和HVA映射方面的异同
linux·运维·服务器
艾莉丝努力练剑1 小时前
文件描述符fd:跨进程共享机制
java·linux·运维·服务器·开发语言·c++
原来是猿2 小时前
Linux-【文件系统下】
linux·运维·数据库
勇闯逆流河2 小时前
【Linux】linux进程概念(冯洛伊曼体系、操作系统、进程详解)
linux·运维·服务器
姓刘的哦2 小时前
RK3568之热插拔
linux
Penguido2 小时前
解决 VS Code 中 Git 推送报错:ECONNREFUSED vscode-git.sock 与鉴权失败
linux·git·vscode
Han.miracle2 小时前
Lombok 构造相关核心注解全解析
java·linux·算法
爱丽_2 小时前
Linux 安装 MySQL 与远程连接排障(yum 方案)
linux·运维·mysql
Hi202402172 小时前
AI编程助手Claude Code、Codex、OpenCode一站式Docker环境
docker·容器·ai编程
Felven2 小时前
麒麟信安系统忘记root密码解决说明
linux·运维·服务器