主要内容参考这篇文即可,有两点需要特别注意:
1、config.php中,
define( ‘YOURLS_SITE’, ‘http://yu.xxx.com’ ); 这个地方一定要使用域名,如果用IP地址,我安装后总是会不停的跳转,无法使用。
nginx.conf配置文件中,server_name yu.xxx.com; 这个地方一定要使用域名,和config.php配置内容要一致
2、PHP版本升级要注意是否成功,尤其要启动php-fpm服务,如果不启动这个服务,无法进行短链接解析
systemctl start php-fpm
systemctl enable php-fpm

使用httpd服务部署最终没有测试成功,可以生成短链接但是无法解析短链接,最终采用Nginx就可以了

一、短网址介绍
短网址(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;
 1
 2
 3
 4
 5
 6
 7
 8
 9
 在这里插入图片描述
 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
 1
 2
 在这里插入图片描述
 新的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
 1
 2
 3
 3、安装nginxyum -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
 1
 2
 3
 4
 5
 6
 三、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
 1
 2
 3
 4
 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_’ );
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 3、配置用户及密码#修改配置文件
 vi user/config.php
 #设置用户名和密码,可设置多个用户 #web界面登录用户名和密码
 $yourls_user_passwords = array(
 ‘wangxiaoyu’ => ‘123456’,
 // ‘username2’ => ‘password2’,
 // You can have one or more ‘login’=>‘password’ lines
 );
 1
 2
 3
 4
 5
 6
 7
 8
 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’);
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 5、安装之前,请一定要确认你的yourls所在的目录里有一个.htaccess的文件,没有的话,安装会报错,会让你手动创建一个[root@localhost html]# vim /usr/local/nginx/html/YOURLS/.htacess
BEGIN YOURLS
1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 /usr/local/nginx/sbin/nginx -s reload
 1
 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
 1
 2
 或git clone https://github.com/guox/yourls-zh_CN.git
 1
 在这里插入图片描述
 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
 1
 在这里插入图片描述
 然后再查看生成的短链接,已经不是按照顺序的了
 在这里插入图片描述四、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 1
 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))
 1
 2
 3
 4
 5
 6
 访问返回的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
 }
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 如果不指定format为json的话,默认是XML格式
 在这里插入图片描述2、POST请求
 用python来发送POST请求测试
 这里以form表单形式提交数据,所以不需要将POST的data转为json格式
 POST请求的几种编码方式可以参考: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))
 1
 2
 3
 4
 5
 6
 返回的信息为{
 ‘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
 }
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 3、使用token而不使用账号密码YOURLS允许使用username和password参数(如果您的设置是私有的话)以老式的方式调用API 。如果您担心将自己的凭证发送出去,还可以使用秘密签名令牌进行API调用。
 signature在API请求中使用参数。例:http://yoursite/yourls-api.php?signature=1002a612b4&action=… 1
 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))
 1
 2
 3
 4
 5
 6
 如果提示504 url过长的话,则在nginx增加client_max_body_size 5m;
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;1
 2
 3
 如果遇到 Faithfully yours, nginx.错误,可能是cookies过长,可以看http字段中添加
proxy_buffer_size  128k;
proxy_buffers   32 32k;
proxy_busy_buffers_size 128k;1
 2
 3
 php配置中添加fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;1
 2
 3
 如果还是不行就在location转发中也添加proxy_buffer_size  128k;
proxy_buffers   32 32k;
proxy_busy_buffers_size 128k;1
 2
 3
 在这里插入图片描述