主要内容参考这篇文即可,有两点需要特别注意:
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
在这里插入图片描述