短网址服务能生成简洁好看的链接,非常适用于有链接分享需求的场景。然而目前国内新浪、百度等大厂短网址服务都要求登录,限制不少,小网站的短网址服务又有不稳定的忧虑,因此自建短网址服务是比较好的选择。

经过一番调研,我们选择了YOURLS这款短网址程序。YOURLS 是一款使用PHP+MySQL开发的开源短网址程序,可部署在自己的服务器上,文档齐全,有丰富的插件支持,支持数据统计等功能,简洁好用。

本文介绍使用YOURLS搭建自己的短网址服务,最终效果见 https://2i.gs

使用YOURLS搭建自己的短网址服务

准备工作

既然是短网址服务,首先得有一个域名,越短的越好。例如本人用的是 2i.gs,这样一个很长的网址可以缩短成 2i.gs/xxx 这种短形式。购买域名可参考 Namesilo域名注册和使用教程 或从 适合国人的域名注册商推荐 选购,然后将域名的@记录解析到你的服务器。

域名添加@ DNS记录
域名添加@ DNS记录

YOURLS 依赖于PHP和Mysql,因此需要先安装PHP和Mysql。CentOS系统安装最新版PHP请参考 使用Remi源安装最新版PHP 7和PHP 8。Debian/Ubuntu系统可使用下面的命令安装PHP 7.4:

# Debian/Ubuntu系统安装PHP 7.4
apt install -y lsb-release gnupg2
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
echo"deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.list
apt update
apt install -y php7.4-cli php7.4-fpm php7.4-bcmath php7.4-gd php7.4-mbstring \
 php7.4-mysql php7.4-opcache php7.4-xml php7.4-zip php7.4-json php7.4-imagick

update-alternatives --set php /usr/bin/php7.4

# 启动PHP-FPM
systemctl start php7.4-fpm

接着安装Mysql(MariaDB):

# Debian/Ubuntu安装Mariadb
apt install -y mariadb-server

#CentOS安装Mariadb
yum install -y mariadb-server
systemctl enable mariadb

#启动Mariadb
systemctl start mariadb

另外对外服务离不开web服务器,因此也需要安装Nginx

#CentOS系统安装Nginx
yum install -y nginx
systemctl enable nginx

#Debian/Ubuntu安装Nginx
apt install -y nginx

安装好PHP、MariaDB和Nginx后,接下来安装和部署YOURLS。

部署YOURLS

部署YOURLS的步骤如下:

1. 创建YOURLS的数据库用户名和数据库:

# 进入数据库
mysql
# 创建用户名,用户名和密码改成你自己的
CREATE USER 用户名@'%' IDENTIFIED BY '密码';
# 创建数据库,数据库名字改成你自己的
CREATE DATABASE 数据库名字 DEFAULT CHARSET=utf8mb4;
# 赋予权限
GRANT ALL PRIVILEGES ON 数据库名字.* to 用户名@'%';
# 刷新权限
FLUSH PRIVILEGES;

2. 下载和安装YOURLS:

mkdir -p /var/www
cd /var/www/
wget https://github.com/YOURLS/YOURLS/archive/master.zip
unzip master.zip
mv YOURLS-master YOURLS

# 修改网站目录权限
# Ubuntu/Debian系统
chown -R www-data:www-data YOURLS
# CentOS
chown -R apache:apache YOURLS

cd YOURLS
cp user/config-sample.php user/config.php
cp sample-public-front-page.txt index.php
cp sample-robots.txt robots.txt

3. 配置YOURLS。编辑 /var/www/YOURLS/user/config.php 文件,按照自己的情况进行修改:

define( 'YOURLS_DB_USER', '填写你的数据库用户名' );

define( 'YOURLS_DB_PASS', '填写数据库密码' );

define( 'YOURLS_DB_NAME', '填写数据库名字' );

# 这两行基本不用改
define( 'YOURLS_DB_HOST', 'localhost' );

define( 'YOURLS_DB_PREFIX', 'yourls_' );

# 填写你的域名,不要加www形式
define( 'YOURLS_SITE', 'http://你的域名' );

# 填写时区,国内是8
define( 'YOURLS_HOURS_OFFSET', 8 );

# 设置为中文
define( 'YOURLS_LANG', 'zh_CN' );

/** Allow multiple short URLs for a same long URL
 ** Set to true to have only one pair of shortURL/longURL (default YOURLS behavior)
 ** Set to false to allow multiple short URLs pointing to the same long URL (bit.ly behavior) */
define( 'YOURLS_UNIQUE_URLS', false );

# 设置私有权限
define( 'YOURLS_PRIVATE', true );


define( 'YOURLS_COOKIEKEY', '从http://yourls.org/cookie获取值' );

# 后台登录用户名和密码,一行设置一个,请务必修改
$yourls_user_passwords = array(
	'用户名1' => '密码1',
	// 'username2' => 'password2',
	// You can have one or more 'login'=>'password' lines
	);

/** Debug mode to output some internal information
 ** Default is false for live site. Enable when coding or before submitting a new issue */
define( 'YOURLS_DEBUG', false );

# 网址中允许大些字母填62,否则填36
define( 'YOURLS_URL_CONVERT', 62 );
/*
 * 36: generates all lowercase keywords (ie: 13jkm)
 * 62: generates mixed case keywords (ie: 13jKm or 13JKm)
 * Stick to one setting. It's best not to change after you've started creating links.
 */

# 保留的关键字,可自己添加
$yourls_reserved_URL = array(
	'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick',
);

接着编辑 index.php ,将 $page = YOURLS_SITE . '/sample-public-front-page.php' ; 改成 $page = YOURLS_SITE . '/index.php' ;

4. 配置Nginx。在/etc/nginx/conf.d/目录下创建域名配置文件(例如2i.gs.conf),输入如下内容

server {
    listen   80;
    server_name 你的域名;
    charset utf-8;

    root "/var/www/YOURLS";

    location / {
        index  index.php index.html;
        try_files $uri $uri/ /yourls-loader.php$is_args$args;
    }

    location ~ ^/\.user\.ini {
            deny all;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_index index.php;
        # CentOS 8系统请改成 fastcgi_pass php-fpm; CentOS 7系统请改成 fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

    location ~ \.(png|jpe?g|js|css|gif|ico|swf|webp|pdf|txt|doc|docx|xls|xlsx|ppt|pptx|mov|fla|zip|rar|woff2|ttf)$ {
        expires max;
        access_log off;
        try_files $uri =404;
    }
}

推荐使用HTTPS访问网站,申请证书和配置请参考使用acme.sh签发证书 或 从阿里云获取免费SSL证书

5.  nginx -t 查看有无Nginx配置错误,然后重启Nginx:systemctl restart nginx。如果有防火墙和安全组,记得放行。

浏览器打开你的域名,配置正确的话应该能看到类似如下截图:

YOURLS短网址截图
YOURLS短网址截图

这说明短网址服务已经搭建成功,输入一个网址,看看能不能正确生成短网址。

配置YOURLS

默认安装的YOURLS界面和功能都比较朴素简洁,可以通过安装/激活插件和主题来修改。

首先介绍YOURLS的插件管理。在页面上点击”管理界面”,使用配置文件填写的用户名和密码登录。点击左上角的“管理插件”,这里便能管理和激活插件:

YOURLS管理插件
YOURLS管理插件

将鼠标移到插件右侧的“动作”那一栏,会出现激活/取消激活菜单,点击便可开启/关闭插件。

推荐开启的Random SHortURLs插件。更多插件可从 Awesome YOURLS 查找。

YOURLS默认的界面比较简陋,因此推荐安装更好看的主题。目前有三款主题:SleekyInfinity SquaredAir 666。本人只用过前两款,最后决定结合两者:前端使用Infinity Squared,后端使用Sleeky

最终网站前端效果图:

短网址前端效果图
短网址前端效果图

后端效果图:

短网址后端效果图
短网址后端效果图

相对原版颜值高了不少。

参考

  1. YOURLS
  2. Awesome YOURLS