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”却被认为是这正文。
我倾向于使用中文链接,因为在浏览器中一眼就能识别页面的标题:
还好我还有另一个域名:c4.hk。为何不将它作为短链接来使用呢?
0x02 准备
YOURLS是基于PHP的一款开源软件,所以我要准备nginx、apache、PHP、mariadb。
首先安装配置nginx,你可以参考以下文章进行安装:
nginx 1.9.10 编译安装 with ngx_lua_waf & pagespeed
其实你仅适用nginx或者apache作为前端服务器也是可以的,因为我的后端是分布式的,所以还需要安装apache,可以参考以下文章:
我使用PHP7,我暂时还没有写关于PHP的文章,所以你需要到其他地方寻找相关信息。
最后是获取YOURLS,你可以在GitHub找到它的源码:
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 就能访问并开始使用你的短链接系统啦。