Thumb

Linux(Centos) 下加硬盘、分区并设置自动挂载

当添加了新硬盘后,在/dev目录下会有相应的设备文件产生.cciss的硬盘是个例外,它的设备文件在/dev/cciss/目录下。

一、添加硬盘后,查看硬盘信息

使用“fdisk -l”命令查看系统中当前连接的硬盘设备和分区信息。新硬盘没有分区信息,则只显示硬盘大小信息。如:
Disk /dev/sda: 146.1 GB, 146163105792 bytes
255 heads, 63 sectors/track, 17769 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
    Device Boot       Start          End       Blocks    Id   System
/dev/sda1    *            1           13       104391    83   Linux
/dev/sda2               14         5112     40957717+   83   Linux
/dev/sda3             5113         5243      1052257+   82   Linux swap /
Solaris
/dev/sda4             5244        17769    100615095     5   Extended
/dev/sda5             5244        17769    100615063+   83   Linux
Disk /dev/sdb: 291.3 GB, 291331192320 bytes
255 heads, 63 sectors/track, 17769 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb1: 291.3 GB, 291331192320 bytes
sda 表示第1块SCSI硬盘,第二块SCSI硬盘则为sdb,以此类推 hda 表示第1块IDE硬盘(即连接在第1个IDE接口的Master口上),第二块IDE硬盘则为hdb,以此类推

二、创建新硬盘分区

假设要新增的是sdb这块硬盘,则输入命令“fdisk /dev/sdb”,会进入fdisk的操作界面,键入m可以查看fdisk内部支持的命令。常用命令如下:
a:命令指定启动分区;
d:命令删除一个存在的分区;
l:命令显示分区ID号的列表;
m:查看fdisk命令帮助;
n:命令创建一个新分区;
p:命令显示分区列表;
t:命令修改分区的类型ID号;
w:命令是将对分区表的修改存盘让它发生作用。
我们要创建硬盘分区,所以键入“n”; 系统会询问要创建主分区(p)还是扩展分区(e),输入对应的字母,如:p; 接着会询问要创建的分区数量,可以输入1-4; 之后,再输入“w”,以将改动的操作写入硬盘

操作完毕后,再执行“fdisk -l”命令就可以查看到新创建的/dev/sdb1分区了。

三、格式化分区

使用命令“mkfs.ext3 /dev/sdb1”将/dev/sdb1分区格式化未ext3格式

四、挂载分区

先使用“mkdir /data”命令来创建一个要挂载分区的目录; 然后,使用“mount /dev/sdb1 /data”命令将/dev/sdb1分区挂载到/data目录中。 执行完成后,访问/data就是/dev/sdb1分区的内容了 附:取消挂载的命令“unmount /dev/sdb1”

五、配置开机自动挂载分区

在某些情况下,我们需要服务器重启后新硬盘的分区可以自动挂载,那么我们可以将分区信息写到/etc/fstab文件中让它永久挂载。 使用“vi /etc/fstab”命令来编辑; 再文件末尾加上一行下述代码并保存即可;
/dev/sdb1               /data                   ext3    defaults        1 2
注:先别急着重启服务器!在修改/etc/fstab文件后,运行“mount -a”命令验证一下配置是否正确。如果配置错误,会导致系统无法正常启动!

原文地址:http://bbs.nanjimao.com/thread-1257-1-1.html

Thumb

PrestaShop在nginx服务器下的伪静态规则

最近把web服务器换成了nginx,但是发现prestashop的图片怎么都不能显示,但是如果关掉伪静态,图片又能正常显示。想来想去就觉得问题应该是出在伪静态规则上。后来在网上找到了解决办法,只要把下面的代码放入nginx的对应网站的配置文件里就ok啦~

For PrestaShop 1.5.x (1.6.x没测试,不过个人感觉是兼容的)

rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last;
rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
try_files $uri $uri/ /index.php$is_args$args;
error_page 404 /index.php?controller=404;

For PrestaShop 1.4.x

rewrite ^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg last;
rewrite ^/([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2.jpg last;
rewrite ^/([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg last;
rewrite "^/lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$" /product.php?id_product=$3&isolang=$1$5 last;
rewrite "^/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$" /product.php?id_product=$2&isolang=$1$4 last;
rewrite "^/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /category.php?id_category=$2&isolang=$1 last;
rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 last;
rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 last;
rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 last;
rewrite ^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 last;
rewrite ^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 last;
rewrite ^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 last;
rewrite "^/lang-([a-z]{2})/(.*)$" /$2?isolang=$1 last;
Thumb

利用window.name实现的Javascript跨域数据传输

很早之前写过一篇《利用 jsonp 进行 Javascript 的跨域数据访问》,还是帮到了一部分朋友。今天在网上又看到了这篇《window.name实现的跨域数据传输》,感觉不错,所以转过来。

有三个页面:

  • a.com/app.html:应用页面。
  • a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件,需要和应用页面在同一域下。
  • b.com/data.html:应用页面需要获取数据的页面,可称为数据页面。

实现起来基本步骤如下:

  1. 在应用页面(a.com/app.html)中创建一个iframe,把其src指向数据页面(b.com/data.html)。
    数据页面会把数据附加到这个iframe的window.name上,data.html代码如下:
    <script type="text/javascript">
    window.name = 'I was there!';    // 这里是要传输的数据,大小一般为2M,IE和firefox下可以大至32M左右
                                     // 数据格式可以自定义,如json、字符串
    </script>
    
  2. 在应用页面(a.com/app.html)中监听iframe的onload事件,在此事件中设置这个iframe的src指向本地域的代理文件(代理文件和应用页面在同一域下,所以可以相互通信)。app.html部分代码如下:
    <script type="text/javascript">
    var state = 0, 
    iframe = document.createElement('iframe'),
    loadfn = function() {
        if (state === 1) {
            var data = iframe.contentWindow.name;    // 读取数据
            alert(data);    //弹出'I was there!'
        } else if (state === 0) {
            state = 1;
            iframe.contentWindow.location = "http://a.com/proxy.html";    // 设置的代理文件
        }  
    };
    iframe.src = 'http://b.com/data.html';
    if (iframe.attachEvent) {
        iframe.attachEvent('onload', loadfn);
    } else {
        iframe.onload  = loadfn;
    }
    document.body.appendChild(iframe);
    </script>
    
  3. 获取数据以后销毁这个iframe,释放内存;这也保证了安全(不被其他域frame js访问)。
    <script type="text/javascript">
        iframe.contentWindow.document.write('');
        iframe.contentWindow.close();
        document.body.removeChild(iframe);
    </script>
    
  4. 总结起来即:iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。

Thumb

Eclipse PDT的PHP项目中无法使用函数跟踪功能的解决办法

使用免费的Eclipse PDT来做PHP项目开发,是很多PHPer的选择,毕竟它有很多地方对于开发者而言是非常方便的,其中一项就是函数跟踪功能。开发者只需要按住Ctrl键,再将鼠标移动到所要跟踪的函数上轻轻点击左键,PDT会自动找到该函数所定义的位置,即可察看函数的源代码。可谓是相当方便。但是程序这个东西毕竟是死的,难免会遇到功能无效的情况。这里就来介绍一下其中一种解决办法。

首先,检查PHP项目的跟目录下面是否有 .buildpath 文件。如果不存在就从别的项目复制一个来,或者手动创建一个。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
	<buildpathentry kind="src" path=""/>
	<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>

其次,检查一下 .project 文件的内容。如果文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>test</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
	</buildSpec>
	<natures>
	</natures>
</projectDescription>

则说明是不正确的,需要按照如下内容进行修改(注意:buildSpec和natures两块):

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>test</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.wst.validation.validationbuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.dltk.core.scriptbuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.php.core.PHPNature</nature>
	</natures>
</projectDescription>

保存后即可解决。

Thumb

防御小规模DDOS攻击DDoS deflate使用方法与教程

DDoS deflate是一款运行于Linux下,专门用于防止/减轻类DDOS攻击的程序。大多数DDOS攻击都是采取若干傀儡机同时对某一服务器发出大量连接请求,以耗光服务器资源的方法。

DDOS攻击的现场,目标服务器会出现难以理解的高负载、高请求数量、单IP同时发出大量请求等症状,导致的直接后果就是Service Unavailable(服务不可用)。对于大面积的DDOS攻击,采用硬件防火墙才能有效地解决问题;但对于小面积的DDOS攻击,一般软件防火墙即可。由于DDOS攻击即模拟正常的访问请求,因此攻击IP与正常访问IP并没有本质的区别(无非连接数多而已),使得小型的VPS难以防范DDOS攻击手段。

防御原理

DDoS deflate的原理是通过netstat命令找出 发出过量连接的单个IP,并使用iptables防火墙将这些IP进行拒绝。由于iptables防火墙拒绝IP的连接远比从Apache层面上来得高效,因此iptables便成了运行在Apache前端的“过滤器”。同样的,DDoS deflate也可以设置采用APF(高级防火墙)进行IP阻止。

安装方法

DDoS deflate的安装非常简单:
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod +x install.sh
./install.sh

然后会自动进行安装,完成后会有一段版权提示与说明,按q键退出即可。

卸载方法

wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
chmod +x uninstall.ddos
./uninstall.ddos

主要功能与配置

1、可以设置IP白名单,在 /usr/local/ddos/ignore.ip.list 中设置即可;

2、主要配置文件位于 /usr/local/ddos/ddos.conf ,打开此文件,根据提示进行简单的编辑即可;

3、DDoS deflate可以在阻止某一IP后,隔一段预置的时候自动对其解封;

4、可以在配置文件中设置多长时间检查一次网络连接情况;

5、当阻止IP后,可以设置Email提醒

配置示例

DDoS deflate的配置非常简单:

FREQ=1 #检测的频率为1分钟

NO_OF_CONNECTIONS=100 #当单个IP超过100个连接请求时判定为DDOS

APF_BAN=0
#如果打算使用APF阻止IP,则设置为1(需要预先安装APF);如果使用iptables,则设置为0;

KILL=1 #是否阻止

EMAIL_TO="webmaster@bootf.com" #接收邮件

BAN_PERIOD=600 #阻止时长,10分钟

原文地址:http://www.bootf.com/200.html