短网址方案

一 lua写的短网址方案:lua+redis

simple-url-shorten

基于Openresty的lua模块开发的简单网址缩短系统,特点是使用Nginx+lua+redis,性能非常高;具有域名黑名单、白名单,支持简单认证;支持自定义短网址;支持自定义短URL长度;支持自定义短网址字符前缀后缀等等

simple-url-shorten具有如下特点:

1. 使用Nginx+lua+redis,性能非常高;
2. 具有域名黑名单、白名单,支持简单认证;
3. 支持自定义短URL长度;
4. 支持自定义短网址字符前缀、后缀
5. 使用302方式跳转,302模板可以通过修改Nginx302模板修改
6. 使用json方式返回数据

既然是简单的URL网址缩短服务,当然也会有不足之处:


1. 没有计数及分析功能:前期考虑添加计数及分析功能,但是考虑跳转的高效性,省略了计数及统计分析功能,该功能可能在以后的更新中添加;
2. 需要手工编译安装Openresty,对于不熟悉Linux软件编译安装的用户有一定的难度;
安装方法
1. 编译安装openresty,要启用lua模块。[http://openresty.org/](http://openresty.org/ "Openresty")
2. 安装并配置redis软件
3. 下载simple-url-shorten文件,lualib(默认/usr/local/openresty/lualib)目录中新建short目录,将lua代码文件放置于目录中
	[root@localhost ~]# ll /usr/local/openresty/lualib/short
	-rw-r--r--. 1 root root 2434 Dec 22 16:44 config.lua
	-rw-r--r--. 1 root root 3491 Dec 22 16:44 functions.lua
	-rw-r--r--. 1 root root  313 Dec 22 16:13 index.lua
	-rw-r--r--. 1 root root  369 Dec 22 16:35 shorten.lua

4. 配置nginx.conf(文件默认位置/usr/local/openresty/nginx/conf/nginx.conf)

	server {

		....

		location / {
    		lua_socket_keepalive_timeout 30s;
    		content_by_lua_file /usr/local/openresty/lualib/short/index.lua;
		}
		location /short {
    		lua_socket_keepalive_timeout 30s;
    		content_by_lua_file /usr/local/openresty/lualib/short/shorten.lua;
		}

		...
	}
5. 配置simple-url-shorten

	...

	-- 配置Redis数据库信息
	local redis = {}
	redis['host'] = '127.0.0.1'
	redis['port'] = 6379
	redis['password'] = 'passwd'


	-- 设置起始的短网址,根据长度可以选择需要多少数量的短网址
	-- 1  ->  62
	-- 2  ->  3844
	-- 3  ->  238328
	-- 4  ->  14776336
	-- 5  ->  916132832
	-- 6  ->  56800235584
	-- 7  ->  3521614606208
	-- 8  ->  218340105584896
	-- 9  ->  13537086546263552
	-- 10 ->  839299365868340224
	-- 11 ->  52036560683837093888
	-- 12 ->  3226266762397899821056
	-- 13 ->  200028539268669788905472
	-- 14 ->  12401769434657526912139264
	-- 15 ->  768909704948766668552634368
	-- 16 ->  47672401706823533450263330816
	local start_url = {'0','0','0','0'}
	
	-- 短网址前缀
	local prefix = ''
	
	-- 短网址后缀
	local suffix = ''

	-- 短网址的域名
	local domain = 'http://192.168.56.201/'

	-- 接受网址缩短的白名单和黑名单,白名单优先级高于黑名单;
	-- 黑名单中默认包含短网址的域名
	local white_host = {}
	local black_host = {domain}

	......


5. 启动nginx服务
使用方法
想要对网址

https://www.google.com/search?newwindow=1&biw=1600&bih=753&q=simple+url+shorten&oq=simple+url+shorten&gs_l=serp.3..0i19l5j0i30i19j0i5i30i19l4.17382489.17389081.0.17389560.18.18.0.0.0.0.418.2756.0j5j3j2j1.11.0.msedr...0...1c.1.60.serp..7.11.2753.th4LFd5J5uU
进行网址缩短,只需进行GET方式请求即可:

Request:
http://XXX.com/short?url=https%3A%2f%2fwww.google.com%2fsearch%3Fnewwindow%3D1%26biw%3D1600%26bih%3D753%26q%3Dsimple%2burl%2bshorten%26oq%3Dsimple%2burl%2bshorten%26gs_l%3Dserp.3..0i19l5j0i30i19j0i5i30i19l4.17382489.17389081.0.17389560.18.18.0.0.0.0.418.2756.0j5j3j2j1.11.0.msedr...0...1c.1.60.serp..7.11.2753.th4LFd5J5uU

Response:
{"status":1,"shorturl":"http://XXX.com/Rqo3F"}
访问过程: Request: http://XXX.com/Rqo3F

Response:

HTTP/1.1 302 Moved Temporarily
Server: openresty
Date: Tue, 23 Dec 2014 06:57:47 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://www.baidu.com/index.php?xxx=234

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
注意事项
host白名单优先级高于黑名单,设置了白名单将只能对白名单的host网址进行网址缩短

二 Ourls 短网址方案

Ourls会根据sha1值来判断原url在数据库中是否已存在,若不存在则新增记录后对记录id进行hash,产生短网址。

Ourls会对输入的url进行标准化处理,若为缺少scheme的url,会默认自动加上http://, 并且会对url的query参数进行排序和urlencode等。

安装/Install
下载源码后运行composer install安装依赖包,或者运行composer create-project takashiki/ourls。

然后将urls.sql导入数据库中,将app目录下config.sample.php重命名为config.php并按自己实际情况修改相关配置项。

git clone and composer install or composer create-project takashiki/ourls

import urls.sql to your database

rename app/config.sample.php to app/config.php

modify the config file according to your situation
赞(1) 打赏
特别声明:除特殊标注,本站文章均为原创,遵循CC BY-NC 3.0,转载请注明出处。三伏磨 » 短网址方案

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏