使用对象存储加速网站访问

起因:国内主机的带宽实在是太贵了,买不起。。。被迫在项目上线之前就启用图片cdn。走了大概一周的弯路,发现其实用起来远比想象中来的简单。

程序端的思路:

考虑到以最小的代价改动原有程序,并能够提供一个开关来方便切换cdn服务商或者关闭cdn服务,故不考虑修改数据库中现有数据。
原有的图片以相对路径存储在数据库中(形如”images/1.jpg” “upload/20160815/100000.jpg”),输出时只要在记录前拼接cdn地址即可;
项目中使用了ueditor富文本编辑器(稍作修改使上传目录为/upload文件夹下),观察发现其图片url均为”./upload“开头,故替换”./“为cdn地址;
当不再使用cdn服务时,将cdn地址写成服务器主域名即可完成禁用。

由于这类对象存储服务都提供了无缝迁移功能(腾讯云中称之为”回源设置“,七牛中称为”镜像源“),即对象存储服务器中若不存在当前文件,则自动从用户设定的源地址获取,使得无需手动处理上传逻辑。

参考代码:(原始代码在公司,以下代码为在家写博客时凭回忆手写,并未调试,可能存在某些小错误;以说明思路为主)

[php]
class Zcdn
{
$cdn_host = ”;
public function __construct()
{
//可以从配置文件中读取或手动修改此处配置;将此处修改为主域名以达到不使用cdn服务的目的
$this->cdn_host = ‘http://your.cdn.host’;
}
public static function auto($url, $type=’normal’)
{
if($type == ‘normal’){
return (new Zcdn())->cdn_host.$url;
}elseif($type == ‘ue’){
return str_replace("./", (new Zcdn())->cdn_host, $url);
}
}
}
[/php]

调用:

[php]
//图片或者其他静态资源
Zcdn::auto($item[‘url_from_db’]);
//使用ueditor富文本编辑器时保存在数据库中的记录
Zcdn::auto($item[‘ue_text_from_db’],’ue’);
[/php]

解决Windows与Linux/Mac系统时间不一致

Windows系统把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟BIOS/EFI中显示的时间是一样的。

Linux/Mac这种类Unix系统则把硬件时间当作UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是GMT+8,则系统中显示时间是硬件时间+8

对于需要在Mac与Windows,Linux与Windows间相互切换的用户,时间差错可能会造成一些不必要的麻烦。

解决方案:让Windows系统认为硬件时钟为UTC时间

思路:修改注册表

操作:以管理员模式运行命令行窗口,并输入

Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

执行,重启后重新调整时间即可

转自自己的人人小站,原始出处不详

debian下开启.htaccess rewrite功能

1、启用rewrite模块

root身份执行:a2enmode rewrite

此时提示需要重启apache,先不管

2、修改根目录配置

方案一:vi /etc/apache2/apache2.conf
将对应目录或根目录下AllowOverride 属性修改为All
<Directory /home/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
方案二:若directory配置位于虚拟主机配置文件中,需要修改/etc/apache2/sites-enable/下对应配置文件。

3、重启服务器

root身份执行:/etc/init.d/apache2 restart 或 service apache2 restart

.htaccess二三事

近日写一些小的项目时遇到了url的一些奇葩需求,折腾许久终于解决,现在把解决方案记录下来。

1、将http://domain/admin/*的访问重写至http://domian/admin.php下,剩下的重写至index.php下

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^admin/[a-zA-Z0-9_?&/]*$ admin.php [L]
RewriteRule ^admin admin.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php
</IfModule>

2、将所有访问重写至index.html文件

实现:将对http://domain/archives/1的访问重写至http://domain/index.html下,使用JavaScript获取的url地址将包含archives/1。
因为简单的RewriteRule 不加参数直接写脚本名称只适用于目标脚本为动态语言脚本,即可以适用于index.php,若为index.html则报404错误。此时需要做特殊处理。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [a-zA-Z0-9_?&]$ index.html
RewriteRule [a-zA-Z0-9_?&]/$ index.html
</IfModule>

Debian 8 安装 zabbix 2.4.5

正常安装大家应该搜索不到这篇博客,所以我也懒得写完整的安装教程了,大家先安装网上的教程安装,出了问题的时候记得看看它。

1、安装mysql等组件(略,依赖安装可先使用apt-get install zabbix-server-mysql完成依赖库安装,如果不需要最新版本,则直接跳至第4步)
2、apt-get remove zabbix-server-mysql 卸载老版本
3、wget方式下载最新版本的zabbix-server-mysql,执行dpkg -i zabbix-server-mysql 版本号.deb完成安装。
4、尝试启动 /etc/init.d/zabbix-server start
查看状态 /etc/init.d/zabbix-server status
如果报libnetsnmp.so.15缺失,可先用find / -name “libsnmo.so*”查找新版本所在位置(当前为libnetsnmp.so.30),cd至相应路径,执行 cp libnetsnmp.so.30 libnetsnmp.so.15
5、再次尝试启动并查看状态。若无报错,执行netstat -an | grep 10051
10051 为zabbix-server默认端口。返回
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN
tcp6 0 0 :::10051 :::* LISTEN
表示启动成功,若无返回,查看log
6、cat /var/log/zabbix-server/zabbix_server.log
报错形如:[Z3001] connection to database ‘zabbix’ failed: [1045] Access denied for user ‘zabbix’@’localhost’ (using password: NO)

CentOS 中rpm相关操作

RPM命令查询已安装的包名
#rpm –ql 包名 如 rpm -ql gcc 来查看gcc的文件都安装到哪里去了
#rpm -qa | grep 包名 来查看有没有安装这个包
#rpm -qa 查看全部已经安装的包名

安装与卸载
安装:rpm -ivh *.rpm
卸载:rpm -e packgename
如果遇到依赖,无法删除,使用 rpm -e –nodeps <包的名字> 不检查依赖,直接删除rpm包
如果恰好有多个包叫同样的名字,使用 rpm -e –allmatches –nodeps <包的名字> 删除所有相同名字的包, 并忽略依赖

RPM参数
-ivh:安装显示安装进度–install–verbose–hash
-Uvh:升级软件包–Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包

YUM相关
自动搜索最快镜像插件: yum install yum-fastestmirror
安装yum图形窗口插件: yum install yumex
查看可能批量安装的列表: yum grouplist

1 安装
yum install 全部安装
yum install package1 安装指定的安装包package1
yum groupinsall group1 安装程序组group1

2 更新和升级
yum update 全部更新
yum update package1 更新指定程序包package1
yum check-update 检查可更新的程序
yum upgrade package1 升级指定程序包package1
yum groupupdate group1 升级程序组group1

3 查找和显示
yum info package1 显示安装包信息package1
yum list 显示所有已经安装和可以安装的程序包
yum list package1 显示指定程序包安装情况package1
yum groupinfo group1 显示程序组group1信息yum search string 根据关键字string查找安装包

4 删除程序
yum remove &#124; erase package1 删除程序包package1
yum groupremove group1 删除程序组group1
yum deplist package1 查看程序package1依赖情况

5 清除缓存
yum clean packages 清除缓存目录下的软件包
yum clean headers 清除缓存目录下的 headers
yum clean oldheaders 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers

清除AutoCAD教育版打印戳记

AutoCAD教育版打印戳记,起源于AutoDesk推出的学生免费用三年的活动,理论上来说,带有教育版戳记的文档是不能进行商用的。

jyb1

jyb2

 

这个戳记会在任何使用了具有该戳记的文件的任何一个块的时候就被顺带复制过来了(有点绕),比如,复制。(这传染性,跟GPL似的)

解决方法:把文件本身另存为.dxf格式即可。或者将新建,然后将需要复制的块复制到新建的文件中,另存为.dxf格式,再从扩展名为.dxf格式的文件中复制即可。

原理:AutoCAD在官方的说明文档中给出的.dxf文件的编码说明,但并没有对教育版戳记进行编码,所以在保存为dxf后这个戳记就和很多其他文件辅助信息一起“丢失”了。即使后期的dxf文档对教育版戳记进行了编码,也可以采用保存为早期版本或者文本编辑工具手动清除(猜测,毕竟现在自动课桌公司还没有这么做)

备注:网上有说教育版标记无法通过保存成dxf的方式清除。如果遇到,可尝试文本编辑器(不是word,写字板,不建议用记事本(文件过大时打开性能不佳),推荐Gvim,Emeditor,Notepad++,Editplus等)打开.dxf,手动搜索“教育版”字样,清除后保存。

另:网上有说使用“插入-外部参考”的方式可祛除,未经验证,有意者可尝试。