一、短网址介绍

短网址(Short URL) ,顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。

短网址通常使用“比较少字符的网址”+“/”+“代码”,打开短网址网页通常会直接跳转到你要缩短的网址(常见),或者几秒广告后在跳转。比如向百度短网址可以自定义后缀,有些短网址还可以进行泛域名解析,十分方便大家使用。

YOURLS是一款使用PHP + Mysql开发的短链接程序,相比公共短网址好处是数据掌握在自己手中,可控性更高。

  • 至少PHP 5.6 如果要使用api 还需要有curl拓展
  • 至少MYSQL 5

二、搭建LNMP环境

这里直接yum装的mysql和php,如果要源码安装可以看之前装zabbix的博客php和mysql源码安装
1、安装mysql并创建数据库和密码

yum install mariadb-server   #安装mysql
systemctl enable mariadb     #开启启动
systemctl start mariadb     #启动mysqlmysqladmin -u root password 123456  #设置root密码
mysql -u root -p     #进入mysql查看
SHOW DATABASES;
create database yourls; #创建yourls数据库
quit;


2、安装php及其所需模块
因为centos7默认yum装的php版本是5.4的,而yourls最低要求5.6的,所以这里需要先设置yum源

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum list | list php


新的yum源中php最新为7.1的,yum安装php及相关模块,然后启动

yum install php71w php71w-mysql php71w-fpm php71w-cli php71w-common php71w-curl -y
systemctl start php-fpm
systemctl enable php-fpm

3、安装nginx

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel prce pcre-devel
wget http://nginx.org/download/nginx-1.18.2.tar.gz
tar -zvxf nginx-1.18.2.tar.gz
cd nginx-1.18.2
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
make && make install

三、yourls安装

git地址为https://github.com/YOURLS/YOURLS/releases,可以直接用git命令获取文件夹,或者下载压缩包后再解压,我这里直接用git获取了。

1、安装git然后进入nginx的html文件夹中,用git clone获取yourls,并将config-sample.php更名为config.php

yum install git -y
cd /usr/local/nginx/html/
git clone https://github.com/YOURLS/YOURLS
mv YOURLS/user/config-sample.php  YOURLS/user/config.php

2、前面已经新建了一个MySQL数据库,并设置好账号密码了,这里修改user/config.php配置文件,填写正确的MySQL信息,配置信息如下。

vim YOURLS/user/config.php#数据库用户名
define( 'YOURLS_DB_USER', 'root' );#数据库密码
define( 'YOURLS_DB_PASS', '123456' );#数据库名
define( 'YOURLS_DB_NAME', 'yourls' );#数据库连接地址
define( 'YOURLS_DB_HOST', 'localhost' );#数据库表前缀,一般保持默认
define( 'YOURLS_DB_PREFIX', 'yourls_' );

3、配置用户及密码

#修改配置文件
vi user/config.php
#设置用户名和密码,可设置多个用户    #web界面登录用户名和密码
$yourls_user_passwords = array('wangxiaoyu' => '123456',// 'username2' => 'password2',// You can have one or more 'login'=>'password' lines);

4、其他设置

#设置站点域名,这里需要设置成你的域名,访问admin时会自动跳转到这个域名,我这里还没使用域名所以用的是ip地址
define( 'YOURLS_SITE', 'http://10.0.0.101' );
#GMT时间偏移
define( 'YOURLS_HOURS_OFFSET', '+8' );
#是否私有
define( 'YOURLS_PRIVATE', 'true' );
#设置cookie,可访问https://api.yourls.org/services/cookiekey/1.0/生成
define( 'YOURLS_COOKIEKEY', 'qQ4KhL_pu|s@Zm7n#%:b^{A[vhm' );
#mysql连接方式
define('YOURLS_DB_DRIVER','mysqli');

5、安装之前,请一定要确认你的yourls所在的目录里有一个.htaccess的文件,没有的话,安装会报错,会让你手动创建一个

[root@localhost html]# vim /usr/local/nginx/html/YOURLS/.htacess
# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /yourls-loader.php [L]
</IfModule>
# END YOURLS

6、nginx配置

    server {listen       80;server_name  10.1.1.101;root         /usr/local/nginx/html/YOURLS/;index        index.html index.htm index.php;location / {try_files  $uri $uri/ /yourls-loader.php;}location ~ ^/.+\.php {fastcgi_index            index.php;fastcgi_split_path_info  ^(.+\.php)(.*)$;fastcgi_param            SCRIPT_FILENAME $request_filename;fastcgi_param            PATH_INFO $fastcgi_path_info;fastcgi_param            PATH_TRANSLATED $document_root$fastcgi_path_info;include                  fastcgi_params;fastcgi_pass             127.0.0.1:9000;}}
/usr/local/nginx/sbin/nginx -s reload

7、yourls汉化
汉化包的git地址为https://github.com/guox/yourls-zh_CN,下载中文包然后解压后放在放在languages目录下

wget https://github.com/guox/yourls-zh_CN/archive/master.zip
unzip master.zip

git clone https://github.com/guox/yourls-zh_CN.git


8、访问10.0.0.101/admin,然后输入前面配置文件里设置的账号密码登陆


输入管理员账号密码登录后如果出现“Could not auto-encrypt passwords. Error was: “cannot write file”.”报错,请将user/config.php文件的权限改为666,然后刷新网页,再把权限改回644,因为你刚才填写密码时用的是明文,这样很危险,所以程序需要对其加密。

9、短地址默认是是按照顺序生成,从1开始,入下图

有可能我们想不按照这样顺序,可以推荐用时间戳来生成
只需要修改 includes/functions.php 272行左右,将 $id = yourls_get_next_decimal();注释,改为 $id = time();

vim /usr/local/nginx/html/YOURLS/includes/functions.php


然后再查看生成的短链接,已经不是按照顺序的了

四、yourls API

请求地址:http://域名//yourls-api.php
参数:username(用户名)、password(密码)、format(格式 json)、url(长地址)、action(功能,shorturl)

1、GET请求,构建下get请求,可以直接访问也可以用python构建请求

http://10.0.0.101/yourls-api.php?username=wangxiaoyu&password=123456&url=http://www.baidu.com&format=json&action=shorturl

python构建get请求

import requests, jsonurl = "http://10.0.0.101/yourls-api.php?"
data = {"username":"wangxiaoyu","password":"123456","url":"http://www.baidu.com","format":"json","action":"shorturl"}
response = requests.get(url, data)
print(json.loads(response.text))

访问返回的http://10.0.0.101/q94n1k这个短链接可以跳转到百度
返回信息为

{'url': {'keyword': 'q94o0a','url': 'http://www.baidu.com','title': '百度一下,你就知道','date': '2020-04-21 07:40:58','ip': '10.0.0.1'},'status': 'success','message': 'http://www.baidu.com 已保存为','title': '百度一下,你就知道','shorturl': 'http://10.0.0.101/q94o0a','statusCode': 200
}

如果不指定format为json的话,默认是XML格式

2、POST请求
用python来发送POST请求测试
这里以form表单形式提交数据,所以不需要将POST的data转为json格式
POST请求的几种编码方式可以参考:https://www.cnblogs.com/android-it/p/9558751.html

import requests, jsonurl = "http://10.0.0.101/yourls-api.php?"
data = {"username":"wangxiaoyu","password":"123456","url":"http://www.baidu.com","format":"json","action":"shorturl"}
response = requests.post(url, data)
print(json.loads(response.text))

返回的信息为

{'url': {'keyword': 'q94nkx','url': 'http://www.baidu.com','title': '百度一下,你就知道','date': '2020-04-21 07:31:45','ip': '10.0.0.1'},'status': 'success','message': 'http://www.baidu.com 已保存为','title': '百度一下,你就知道','shorturl': 'http://10.0.0.101/q94nkx','statusCode': 200
}

3、使用token而不使用账号密码

YOURLS允许使用username和password参数(如果您的设置是私有的话)以老式的方式调用API 。如果您担心将自己的凭证发送出去,还可以使用秘密签名令牌进行API调用。
signature在API请求中使用参数。例:

http://yoursite/yourls-api.php?signature=1002a612b4&action=...

python示例

import requests, jsonurl = "http://10.0.0.101/yourls-api.php?"
data = {"signature":"6962355501","url":"http://www.baidu.com","format":"json","action":"shorturl"}
response = requests.post(url, data)
print(json.loads(response.text))

如果提示504 url过长的话,则在nginx增加

    client_max_body_size 5m;client_header_buffer_size 512k;large_client_header_buffers 4 512k;

如果遇到 Faithfully yours, nginx.错误,可能是cookies过长,可以看https://blog.csdn.net/wang_quan_li/article/details/41802643

http字段中添加

    proxy_buffer_size  128k;proxy_buffers   32 32k;proxy_busy_buffers_size 128k;

php配置中添加

        fastcgi_buffer_size 128k;fastcgi_buffers 4 256k;fastcgi_busy_buffers_size 256k;

如果还是不行就在location转发中也添加

    proxy_buffer_size  128k;proxy_buffers   32 32k;proxy_busy_buffers_size 128k;

参考

  • 运维搞定短网址–YOURLS

  • https://www.shileiye.com/615

yourls短链接项目部署及API使用相关推荐

  1. 国外短链接项目。一万次点击220美刀

    大家好,我是四点 一个混迹在互联网上赚钱的人 未来十年一路同行 "国外短链接项目" 今天四点给大家分享一个国外短网址赚钱项目,这是一个点击短链接就可以挣美刀的网站,宣称万次播放最高 ...

  2. java 生成短链接_java调用百度API生成短链接(一)

    短链接,顾名思义,用一个短的链接代替长而繁琐的真实链接 import net.sf.json.JSONObject; import org.apache.http.impl.client.Defaul ...

  3. 如何使用ASP.NET Core Web API实现短链接服务

    前言 在前面的文章中,我们介绍了hashids.net,可以将数值型Id加密成无意义的字符串. 今天,我们来利用这一特点,实现短链接服务. 原理 短链接,顾名思义就是在形式上比较短的链接网址.借助短链 ...

  4. Docker部署自己的短链接服务

    Docker部署自己的短链接服务 Jump Jump 开箱即用,Go 语言开发的一个功能完善的短链接系统. 快速体验 功能与使用 短链接管理 本地启动 如何访问短链接? 设置短链接域名 获取完整短链接 ...

  5. PHP实现百度、新浪的API接口调用生成短链接网址

    在实际过程中我们会有这样的场景,就是发送短信的时候,里面需要嵌入我们的网址,可是网址都是很长的. 如果你一般都是在手机上操作的话,可以在微信小程序中搜索:短链接的生成 或者在文章底部扫描小程序二维码进 ...

  6. php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程

    php调用新浪短链接API的方法,php调用新浪api 本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: //Sina App_Key def ...

  7. 新浪短链api java_php调用新浪短链接API的方法

    本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: //Sina App_Key define('SINA_APPKEY', '31641035'); functio ...

  8. PHP调用新浪API 生成短链接

    我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...

  9. java 新浪短网址生成器,新浪短链接接口被限制?最新新浪短网址api接口

    背景 新浪短网址api是sina平台官对外公开的短网址生成接口,可以将长链接通过接口生成t.cn样式的短链接,可以说是非常好用的.但近期新浪官方开始对已经公布的接口做出了多重限制,很多之前能用的功能现 ...

最新文章

  1. onmouseout事件与onchange事件分析
  2. boost::exception_detail::refcount_ptr的测试程序
  3. linux 怎么设置静态ip,如何在Linux中设置静态IP地址和配置网络
  4. 单例模式引发的内存泄漏:_资源泄漏:救援的命令模式
  5. 需求分析阶段各种图的功能
  6. C语言 · 龟兔赛跑预测
  7. html5的video怎么把里面的控制器移出来_6个月宝宝米粉怎么冲,一次吃多少?一天吃几次?关于宝宝米粉的难题,答案都在这了!...
  8. Java中HashMap原理
  9. PyTorch:Embedding初始化及自定义
  10. 高通QCA9377 WiFi蓝牙模块芯片介绍
  11. 山东理工大学ACM平台题答案关于C语言 1231 绝对值排序
  12. C语言程序设计 基础知识点
  13. 数学建模线性规划之Lingo教程
  14. 干货流出|腾讯内部几近满分的项目管理课程PPT
  15. excel转置怎么操作_EXCEL的矩阵运算
  16. 收款码在线生成系统源码 无限制 (web微信、QQ、支付宝三合一收款码)
  17. 1、串口(UART/COM/TTL/RS232/RS485)
  18. python中temp是什么意思_.temp(temp是什么意思?)
  19. 脚踩智能汽车春风,百度踏上千亿美元市值征程
  20. 智能网联变革下的“新赢家”:德赛西威荣登2021全球零部件供应商百强榜

热门文章

  1. 【游戏引擎开发必问】 渲染管线的剖析
  2. 亚利桑那州接受加密货币纳税的计划受挫
  3. flask url_for用法
  4. Python之洗牌游戏
  5. 实习日志 - 第二天
  6. 服务级别协议(SLA)与运行水平协议(OLA)
  7. 买手机看性能看处理器还是内存?
  8. oracle rac 火星舱_火星高科数据保护技术使火星舱助用户完全解决相关需求
  9. QML 自适应布局 关键
  10. Mac下python+selenium【2】获取表格所有元素