在nginx中实现短链跳转

在这里插入图片描述
副标题
openresty 一个支持lua的nginx

介绍

OpenResty 是一个强大的 Web 应用服务器,是一个基于NGINX的可伸缩的WEB平台。

  • OpenResty借助于Nginx的事件驱动模型和非堵塞IO,以实现高性能的Web应用程序。
  • OpenResty使我们可以借助于Nginx的异步非阻塞达到使用Lua异步并发访问后端DB等服务。

安装

官网
使用预编译包进行安装,安装教程点击这里跳转

新手教程

安装完毕后,点击这里查看新手教程。
教程中提到:
假设您已经将OpenResty安装到/usr/local/openresty(这是默认设置),我们让我们的OpenRestynginx安装的可执行文件在我们的环境中可用。

::: highlight yellow 💡
注意 这种设置方式临时有效。更多的环境变量配置方法可以查看 配置环境变量
:::

PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH

配置环境变量

这时nginx命令不在环境变量中,需要启动nginx比较麻烦。下面设置环境变量的几种方法:

修改方法一:

export PATH=/usr/bin:$PATH
//配置完后可以通过echo $PATH查看配置结果。
生效方法:立即生效
有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置
用户局限:仅对当前用户

修改方法二:

通过修改.bashrc文件:
vim ~/.bashrc
//在最后一行添上:
export PATH=/usr/bin:$PATH
生效方法:(有以下两种)
1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
2、输入“source ~/.bashrc”命令,立即生效
有效期限:永久有效
用户局限:仅对当前用户

修改方法三:

通过修改profile文件:
vim /etc/profile
/export PATH //找到设置PATH的行,添加
export PATH=/usr/bin:$PATH
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户

修改方法四:

通过修改environment文件:
vim /etc/environment
在PATH=“***”(自己系统的环境变量)中加入“:/usr/bin”
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户

配置

配置环境变量后,就可以在终端中输入nginx来启动nginx。这时没有使用nginx -c path/nginx.con则采用默认的配置。可以使用find 命令找到nginx.conf。进行修改。
加入include ./sites/*.conf;

vim /usr/local/openresty/nginx/conf/./nginx.conf
...
http {
    ...
    include ./sites/*.conf;
    ...
...

使用

启动 、停止、重新加载配置 可以查阅文章

lua脚本

经过设置后我们就可以在/sites/文件夹下添加站点配置。

server {
        listen 8080;
        location / {
            default_type text/html;
            #使用content_by_lua_file 加载lua脚本
            content_by_lua_file /usr/local/openresty/nginx/conf/sites/test.lua;
            # 或者使用content_by_lua_block
            content_by_lua_block{
		ngx.say("hello world");
            }
        }
        
     error_log /var/log/nginx/zmkj_client_error.log;
     access_log /var/log/nginx/zmkj_client_access.log;
}

教程中使用加载lua脚本的方式,下面是我用lua脚本实现的短链接映射

--获取请求路径
local path = ngx.var.uri
local new_path = string.gsub(path, "/", "")

local mysql = require "resty.mysql"

-- 创建MySQL连接池
local db, err = mysql:new()
if not db then
    ngx.log(ngx.ERR, "failed to create mysql object: ", err)
    return ngx.exit(500)
end

db:set_timeout(1000)  -- 设置超时时间

-- 连接MySQL数据库
local ok, err, errno, sqlstate = db:connect{
    host = "127.0.0.1",
    port = 3306,
    database = "tkzc_release_cud",
    user = "root",
    password = "root"
}
if not ok then
    ngx.log(ngx.ERR, "failed to connect to mysql: ", err, ": ", errno, " ", sqlstate)
    return ngx.exit(500)
end

-- 查询数据库中的URL连接数据
local res, err, errno, sqlstate = db:query("SELECT url FROM yun_short_urls WHERE tag = '".. new_path .."'")
if not res then
    ngx.log(ngx.ERR, "failed to query mysql: ", err, ": ", errno, " ", sqlstate)
    return ngx.exit(500)
end

-- 获取查询结果中的URL连接字符串
local url = res[1].url

-- 对URL进行编码(例如需要将空格替换为%20)
--url = ngx.escape_uri('https://activity-oss.zmaxfilm.com/bank/abc-zz-xyk/index.html#/index?activityId=363')

-- 执行重定向操作
ngx.redirect(url)

-- 关闭MySQL连接
local ok, err = db:set_keepalive(10000, 100)
if not ok then
    ngx.log(ngx.ERR, "failed to set mysql keepalive: ", err)
    return ngx.exit(500)
end

参考csdn教程

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值