
拿到nginxfans.com域名后,一直再琢磨是否用来做博客。最终决定做一个论坛,方便和大家一起研究讨论Nginx相关的技术,名称暂定为Nginx中文社区,希望广大Nginx爱好者前来捧场!
Nginx中文社区网址:http://www.nginxfans.com/

拿到nginxfans.com域名后,一直再琢磨是否用来做博客。最终决定做一个论坛,方便和大家一起研究讨论Nginx相关的技术,名称暂定为Nginx中文社区,希望广大Nginx爱好者前来捧场!
Nginx中文社区网址:http://www.nginxfans.com/
Cacti 默认的数据采集周期是5分钟一次,这对于监控业务繁忙的系统来说似乎过于漫长了,一些突发状况很难在第一时间发现,所以我们需要缩短这个周期。
首先,先登录 Cacti,进入 console > Settings > Poller 界面,将 Poller Interval 和 Cron Interval 均改为 “Every Minute” 选项,然后点击 Save 按钮保存。
然后,进入 Linux,修改 crontab 中的数据采集脚本运行周期为*/1 * * * *,例如:
*/1 * * * * /usr/local/php/bin/php /htdocs/cacti/poller.php > /dev/null 2>&1
最后,回到 Cacti,进入 console > Data Templates 界面,修改所用到的数据模板,将 Step 设为60,这里的单位是秒。
完成上述三个步骤后,还需要我们手工清理历史数据后 Cacti 才能正常采集数据和显示图表。
进入 console > System Utilities 界面,点击 “Rebuild Poller Cache”。
至此我们已经成功将 Cacti 的数据采集周期由5分钟一次修改为1分钟一次了。
如果不能正常显图表,可尝试手工清除 cacti/rra 目录下的 rrd 文件。
转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/
Cacti 是一套基于PHP、MySQL、SNMP和RRDTool开发的网络流量监测图形分析工具。
若希望使用 Cacti 监控 Linux 服务器的网卡流量,需要在被监控的 Linux 服务器上安装 net-snmp-utils 相关软件包,我们可以通过 yum 在线安装,例如:
yum install net-snmp-utils
安装好 net-snmp-utils 后,在被监控的服务器上编辑/etc/snmp/snmpd.conf文档
vi /etc/snmp/snmpd.conf
在其中添加下面这行命令
view systemview included .1.3.6.1.2.1.2
保存并重新 snmpd 服务
service snmpd restart
然后,我们进入cacti,添加被监控的服务器 继续阅读
在一次例行检查日志的时候,发现Nginx日志中出现了大量的PHP连接Memcached超时的报错信息,如下:
PHP Warning: Memcache::connect(): Can't connect to 127.0.0.1:11211, Connection timed out (110) in ...
连上服务器检查Memcached进程运行正常,然后我用一段测试代码检查Memcached是否能够正常连接,结果也很正常。
于是又仔细分析日志,发现那段报错信息是间隔出现的,说明是有一定几率的。这时我回想起上周因为架构问题刚刚把PHP的Session存储路径指向到了Memcached里,可能是因为这个配置增加了Memcached的负载,从而导致在并发量较高时,Memcached出现连接超时的现象。
找到原因就容易解决了。重新调整Memcached的启动参数,增加-c参数来提高连接数量。默认为1024,可以逐步增加以找到最佳数值。我设置为2048。
启动命令为:
memcached -d -m 256 -c 2048 -l 127.0.0.1 -p 11211 -u root
如果服务器充裕,可以考虑分布式的memcached集群,以降低单个节点上的压力。
转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/
图片盗链行为对网站负载和带宽均会造成不同程度的影响和消耗,有必要对这种行为加以限制,Nginx的防盗链设置非常简单,设置方法如下。
打开nginx.conf,在需要启用防盗链机制的server{}中,加入下面的代码:
location ~ .*\.(bmp|gif|jpg|jpeg|png|swf)$ {
valid_referers none blocked *.youdomain.com youdomain.com;
if ($invalid_referer) {
return 403;
}
}
上面代码中的youdomain.com更换成你的域名即可。
由于无法继续忍受和千军万马共挤虚拟主机。近日,我为阳光部落(http://www.sunbloger.com/)从Godaddy(http://www.godaddy.com/)上购买了VPS主机,下面是我在购买和使用中的一些感受和心得。
在Godaddy主页的All Products菜单中,选择Hosting & Servers,再在弹出的菜单中选择VPS项目,就可以进入VPS主机的选购页面了,后面的购买和付款流程与买虚拟主机没有区别,就不详细说了。但需要注意的是机房会被默认到Godaddy新加坡数据中心,从这几年的经验来看,新加坡机房的效果不如美国本土好。
目前Godaddy的VPS提供三种操作系统供用户选择,分别是CentOS、Fedora和Windows,对于服务器来说,特别是打算用Linux作为服务器操作系统时,CentOS是最好的选择。
购买后的VPS需要在Godaddy上开通,在开通过程中需要提供一个账号和密码,用于通过SSH登录到服务器上。但Godaddy的VPS不支持直接root登录,需要以预先设置的账号登录后,再su切换到root。
我购买的CentOS系统的VPS十分精简,如果喜欢自己编译安装的方式去部署一些软件,经常会遇到提示缺少某某组件,直接通过yum安装所需组件即可。
在我安装并启动Nginx时,提示我80端口已被占用,用netstat –tulpn命令查询后发现VPS中已经安装有httpd,占用了80端口。停掉httpd,再次启动Nginx,一切正常了!
CentOS(Community ENTerprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。
CentOS 6.4 功能改进:
软件包的变化:
官方网址:http://www.centos.org/
假设我们有3台服务器,IP地址分别为:
192.168.0.1 / 192.168.0.2 / 192.168.0.3
我们将192.168.0.1作为前端主服务器,192.168.0.2和192.168.0.3作为负载均衡的后端服务器。
下面是192.168.0.1主服务器上Nginx的配置方法:
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream serverlist {
server 192.168.0.2:8000 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.0.3:8000 weight=7 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
server_name www.sunbloger.com;
location / {
proxy_pass http://serverlist;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
配置说明:
upstream serverlist{}可以理解为一个服务器池,通过proxy_pass http://serverlist命令,可将访问www.sunbloger.com的请求分配给位于池内的服务器192.168.0.2和192.168.0.3。
weight=3和weight=7为服务器的权重,权重越高,被分配到的请求就越多。
max_fails=3和fail_timeout=20s的含义是,当请求失败次数达到3次时,这个服务器将被暂时下线20秒。
技巧:主服务器可负责静态内容,将所有php的请求分配到后端服务器处理。
转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/
Zend Framework (简写ZF)是由 Zend 公司支持开发的完全基于 PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,ZF采用 MVC(Model–View-Controller) 架构模式来分离应用程序中不同的部分方便程序的开发和维护。
在2012年9月5日正式发布了2.0版本,简称为ZF2,该版本的主打口号则是“高性能”。目前的最新版本为 Zend Framework 2.1,是ZF2里的首个正式版本。最新版本除了对原有组件功能进行大幅提升外,还新添两个新成员:
你可能认为,一群聪明人不会有什么忌讳藏着掖着,比如像自由和开源软件(FOSS)社区的成员。你还可能觉得,这样一群知识分子不会觉得什么想法是禁止讨论的或让人不舒服的;但要是你果真这么想,那就大错特错了。
与任何亚文化一样,FOSS也是由共同的信念维系在一起。共同的信念有助于形成一种共同的归属感,这意味着对这些信念提出质疑,无异于对这个归属感提出质疑。
其中一些忌讳话题可能会颠覆20年或更长时间以来秉承的公理。另一些忌讳话题则是新的,质疑公认的真理。不过,尽管细细打量忌讳可能让人不舒服,但 这么做往往是必要的。许多信念已不再适用,或者已经沦为半真半假的话之后,还流行很长一段时间。有时考虑一下无法想象的事情大有意义,只有这样才能让信念 重新接受现实的考验。
基于这个道理,我列出了个人针对当下开源社区的九点看法;至于这些看法正确与否,有待各位评论。 继续阅读
PHP是一种脚本语言,它需要PHP解释器来分析运行PHP文件。当把PHP做为CGI服务Web请求时,它需要被嵌入到某种Web服务器里,最常见的是集成到Apache或IIS里,这就是说,在使用PHP前,你需要安装Apache或IIS,并且正确的配置它们和PHP集成的参数。虽然这种配置已经很规范,文档非常丰富,但我们还是经常在安装Apache和PHP集成时遇到问题,而且,有时候我们只想测试一个简单的PHP特征,不想就为此安装、启动Apache服务。
但据官方文档上说,这个内置的Web服务器只是提供开发测试使用,不推荐使用中生产环境中。因为这个服务器接受处理请求时顺序执行的,不能并发处理。 继续阅读
代码如下:
<?php
/**
* 重置Jpg图片尺寸
*
* @param string $path
* @param string $filename 源文件名
* @param int $maxwidth
* @param int $maxheight
* @param string $newname 新文件名
*/
function reSizeJpg($path, $filename, $maxwidth, $maxheight, $newname)
{
$jpg = imagecreatefromjpeg($path.'/'.$filename);
if ($jpg) {
$width = imagesx($jpg);
$height = imagesy($jpg);
} else {
return false;
}
if (($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)) {
if ($maxwidth && $width > $maxwidth) {
$widthratio = $maxwidth / $width;
$resize_width = true;
}
if ($maxheight && $height > $maxheight) {
$heightratio = $maxheight / $height;
$resize_height = true;
}
if ($resize_width && $resize_height) {
if ($widthratio < $heightratio) {
$ratio = $widthratio;
} else {
$ratio = $heightratio;
}
} elseif ($resize_width) {
$ratio = $widthratio;
} elseif ($resize_height) {
$ratio = $heightratio;
}
$newwidth = $width * $ratio;
$newheight = $height * $ratio;
if (function_exists("imagecopyresampled")) {
$newim = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($newim, $jpg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
} else {
$newim = imagecreate($newwidth, $newheight);
imagecopyresized($newim, $jpg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
}
imagejpeg($newim, $path.'/'.$newname);
imagedestroy($newim);
} else {
imagejpeg($jpg, $path.'/'.$newname);
}
imagedestroy($jpg);
return true;
}
?>
代码如下:
<?php
/**
* 追加水印
*
* @param string $source_img 原始图片url
* @param string $water_map 水印图片url
*/
function addWaterMap($source_img, $water_map)
{
$img = imagecreatefromjpeg($source_img); //读取原图
$img_x = imagesx($img); //原图宽
$img_y = imagesy($img); //原图高
imagealphablending($img, true);//设置为混合填色模式
//$img_water_map = imagecreatefromjpeg($water_map); //读取水印图片
$img_water_map = imagecreatefrompng($water_map);
$water_x = imagesx($img_water_map); //水印宽
$water_y = imagesy($img_water_map); //水印高
$wimg_x = $img_x - $water_x - 10; //水印x坐标
$wimg_y = $img_y - $water_y - 10; //水印y坐标
imagecopy($img, $img_water_map, $wimg_x, $wimg_y, 0, 0, $water_x, $water_y); //分别为原图,水印,水印x坐标,水印y坐标,水印图片横轴开始点,水印图片纵轴开始点,水印横轴结束,水印纵轴结束
imagejpeg($img, $source_img, 95); //输出到目标文件
imagedestroy($img); //销毁内存数据流
imagedestroy($img_water_map); //销毁内存数据流
return true;
}
?>
使用索引,可以优化含有ORDER BY的MySQL语句,下文就将为您详细介绍这种优化MySQL语句的方法,希望对您学习MySQL语句优化方面有所帮助。
关于建立索引的几个准则:
1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。
2、索引越多,更新数据的速度越慢。
3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。
4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。
5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。 继续阅读