yourls短链接项目部署及API使用

一、短网址介绍

短网址(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     #启动mysql

mysqladmin -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, json

url = "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, json

url = "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, json

url = "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;

在这里插入图片描述

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值