0x01 前言

我这个网站的地址包含中文,在分享的时候显得很不方便。在分享的时候会出现两种情况,一种是链接被编码,例如这篇文章的地址:

https://ngx.hk/2016/11/27/%E4%BD%BF%E7%94%A8yourls%E6%90%AD%E5%BB%BA%E7%9F%AD%E9%93%BE%E6%8E%A5%E6%9C%8D%E5%8A%A1.html

另一种是链接不能识别,我发现包括微信在内的很多分享软件都不支持中文地址:

https://ngx.hk/2016/11/27/使用yourls搭建短链接服务.html

例如上面这行链接,仅识别https://ngx.hk/2016/11/27/,而后面的“使用yourls搭建短链接服务.html”却被认为是这正文。

我倾向于使用中文链接,因为在浏览器中一眼就能识别页面的标题:

1480226766

还好我还有另一个域名:c4.hk。为何不将它作为短链接来使用呢?

0x02 准备

YOURLS是基于PHP的一款开源软件,所以我要准备nginx、apache、PHP、mariadb。

首先安装配置nginx,你可以参考以下文章进行安装:

nginx 1.9.10 编译安装 with ngx_lua_waf & pagespeed

其实你仅适用nginx或者apache作为前端服务器也是可以的,因为我的后端是分布式的,所以还需要安装apache,可以参考以下文章:

编译安装apache2 & mod_pagespeed

我使用PHP7,我暂时还没有写关于PHP的文章,所以你需要到其他地方寻找相关信息。

最后是获取YOURLS,你可以在GitHub找到它的源码:

YOURLS

0x03 配置环境

首先来配置nginx:

[root@hk1 ~]# cat /usr/local/nginx/conf.d/c4.hk.ngx.conf 
server {
    listen                  80;
    server_name             c4.hk www.c4.hk;

    rewrite ^/(.*)$ https://ngx.hk/$1 permanent;
}

server {
    listen                  443 ssl http2;
    server_name             c4.hk www.c4.hk;

    ssl                     on;
    ssl_certificate         /usr/local/nginx/ssl/c4.hk.crt;
    ssl_certificate_key     /usr/local/nginx/ssl/c4.hk.key;
    ssl_buffer_size         16k;
    ssl_ciphers             ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:DES-CBC3-SHA;
    ssl_prefer_server_ciphers   on;
    ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache       builtin:20480 shared:SSL:10m;
    ssl_session_timeout     3h;
    ssl_stapling            on;
    ssl_session_tickets     on;
    add_header              X-Content-Type-Options nosniff;
    add_header              X-XSS-Protection "1; mode=block";
    add_header              Strict-Transport-Security "max-age=31536000; preload; includeSubDomains" always;

#    include                 /usr/local/nginx/conf.d/sql_def.conf;
#    include                 /usr/local/nginx/conf.d/sub_filter.ngx.conf;

    root                    /usr/local/html/c4.hk/public_html/; 
    access_log              /usr/local/html/c4.hk/logs/ngx_access.log main;

    location / {

        index               index.php index.html;
        proxy_pass          http://127.0.0.1:8080;

        proxy_cache         content;
        proxy_cache_valid   200 304 301 302 10m;
        proxy_cache_valid   any 30s;
        proxy_cache_lock_timeout 5s;
        proxy_cache_use_stale   updating error timeout invalid_header http_500 http_502;

    }

#	location ^~ /admin {
#		deny			all;
#	}

}

以上是我的nginx配置文件,在最后的admin location我设为禁止访问,因为我只需要通过API访问就好了,所以禁用admin文件夹的访问权限。同时通过iptables控制api文件的访问,即可最大程度地保护短链接系统。

以下是apache的配置,因为apache只作为后端,所以没有做过多配置:

[root@hk1 ~]# cat /usr/local/apache2/conf.d/c4.hk.apa.conf 
<VirtualHost 127.0.0.1:8080>
	ServerAdmin [email protected]
	DocumentRoot /usr/local/html/c4.hk/public_html/
	ServerName c4.hk
	ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9011/usr/local/html/c4.hk/public_html/$1
	ErrorLog /usr/local/html/c4.hk/logs/apa.error.log

	ModPagespeedMapRewriteDomain https://fonts.odin.org.cn https://fonts.odin.org.cn,https://fonts.odin.org.cn,fonts.googleapis.com
	ModPagespeedMapRewriteDomain https://ajax.odin.org.cn https://ajax.odin.org.cn,https://ajax.odin.org.cn,ajax.googleapis.com

以下是php-fpm的配置信息:

[root@hk1 ~]# cat /usr/local/php7/etc/php-fpm.d/c4.hk.conf 
[c4hk]
;useradd -M -s /sbin/nologin -n c4hk
listen = 127.0.0.1:9011
user = c4hk
group = daemon
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /usr/local/html/c4.hk/logs/fpm-php.log
php_flag[display_errors] = off
php_admin_value[memory_limit] = 128M
pm.max_requests = 3000
request_terminate_timeout = 300

0x04 配置YOURLS

先下载YOURLS:

[root@hk1 codex]# git clone https://github.com/YOURLS/YOURLS.git

然后将YOURLS复制到正确的位置:

[root@hk1 codex]# cp -r YOURLS /usr/local/html/c4.hk/public_html/

配置YOURLS

#进入文件夹:
[root@hk1 codex]# cd /usr/local/html/c4.hk/public_html/

#复制配置文件:
[root@hk1 public_html]# cp user/config-sample.php user/config.php

#修改配置文件:
[root@hk1 public_html]# vim user/config.php

0x05 结语

一切顺利的话,通过 https://[your domain/ip]/admin 就能访问并开始使用你的短链接系统啦。