安装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
相关推荐
阿巴~阿巴~42 分钟前
Linux基本命令篇 —— alias命令
linux·服务器·bash
IvanCodes2 小时前
一、Docker:一场颠覆应用部署与运维的容器革命
docker·容器
好名字更能让你们记住我2 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
栗子~~2 小时前
Milvus docker-compose 部署
docker·容器·milvus
学习编程的gas2 小时前
Linux开发工具——gcc/g++
linux·运维·服务器
嵌入式成长家2 小时前
ubuntu rules 使用规则
linux·ubuntu·rules 使用规则
_可乐无糖2 小时前
AWS WebRTC: 判断viewer端拉流是否稳定的算法
linux·服务器·webrtc·aws
数据智能老司机2 小时前
Linux内核编程——Linux设备模型
linux·架构·操作系统
椰汁菠萝3 小时前
ubuntu下免sudo执行docker
ubuntu·docker·免sudo
BD_Marathon3 小时前
ubuntu防火墙使用
linux·ubuntu