<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Billy 的博客</title>
	<atom:link href="http://www.billy.net.cn/index.php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.billy.net.cn</link>
	<description>我喜欢喝着咖啡上网，所以只有咖啡和电脑的内容</description>
	<lastBuildDate>Sat, 24 Mar 2012 16:14:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Linux网络管理命令</title>
		<link>http://www.billy.net.cn/index.php/archives/334</link>
		<comments>http://www.billy.net.cn/index.php/archives/334#comments</comments>
		<pubDate>Sat, 24 Mar 2012 16:14:29 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[VPS 服务器]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=334</guid>
		<description><![CDATA[1.1     Curl Curl是Linux下一个很强大的http命令行工具，其功能十分强大。 1.1.1     读取网页 $ curl http://www.linuxidc.com 1.1.2     保存网页 $ curl http://www.linuxidc.com &#62; page.html $ curl -o page.html http://www.linuxidc.com<a href="http://www.billy.net.cn/index.php/archives/334" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<h3>1.1     Curl</h3>
<p>Curl是Linux下一个很强大的http命令行工具，其功能十分强大。</p>
<h3>1.1.1     读取网页</h3>
<p>$ curl http://www.linuxidc.com</p>
<h3>1.1.2     保存网页</h3>
<p>$ curl http://www.linuxidc.com &gt; page.html</p>
<p>$ curl -o page.html http://www.linuxidc.com<span id="more-334"></span></p>
<h3>1.1.3     使用的proxy服务器及其端口： -x</h3>
<p>$ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com</p>
<h3>1.1.4     使用cookie来记录session信息</h3>
<p>$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com</p>
<p>这个option: -D 是把http的response里面的cookie信息存到一个特别的文件中去，</p>
<p>这样，当页面被存到page.html的同时，cookie信息也被存到了cookie0001.txt里面了</p>
<h3>1.1.5     下一次访问的时候，继续使用上次留下的cookie信息</h3>
<p>使用option来把上次的cookie信息追加到http request里面去： -b</p>
<p>$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com</p>
<h3>1.1.6     浏览器信息</h3>
<p>$ curl -A “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com</p>
<h3>1.1.7     referer</h3>
<p>$ curl -A “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” -x 123.45.67.89:1080 -e “mail.linuxidc.com” -o page.html -D cookie0001.txt http://www.linuxidc.com</p>
<p>这样就可以骗对方的服务器，你是从mail.linuxidc.com点击某个链接过来的</p>
<h3>1.1.8     下载文件</h3>
<p>$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG</p>
<p>$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG</p>
<p>-O 可以按照服务器上的文件名，自动存在本地</p>
<p>$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG</p>
<h3>1.1.9     批量下载</h3>
<p>$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG</p>
<p>&nbsp;</p>
<p>这样产生的下载，就是</p>
<p>~zzh/001.JPG</p>
<p>~zzh/002.JPG</p>
<p>…</p>
<p>~zzh/201.JPG</p>
<p>~nick/001.JPG</p>
<p>~nick/002.JPG</p>
<p>…</p>
<p>~nick/201.JPG</p>
<h3>1.1.10  自定义文件名的下载</h3>
<p>curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG</p>
<p>这样，自定义出来下载下来的文件名，就变成了这样：</p>
<p>原来： ~zzh/001.JPG —-&gt; 下载后： 001-zzh.JPG 原来： ~nick/001.JPG —-&gt; 下载后： 001-nick.JPG</p>
<p>这样一来就不怕文件重名啦</p>
<h3>1.1.11  断点续传</h3>
<p>$ curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG</p>
<p>分块下载，我们使用这个option就可以了： -r</p>
<p>举例说明</p>
<p>比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 要下载（赵老师的电话朗诵 <img src="http://www.usa-vps.com/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" /> ）我们就可以用这样的命令：</p>
<p>$ curl -r 0-10240 -o “zhao.part1″ http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &amp;\</p>
<p>$ curl -r 10241-20480 -o “zhao.part1″ http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &amp;\</p>
<p>$ curl -r 20481-40960 -o “zhao.part1″ http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3 &amp;\</p>
<p>$ curl -r 40961- -o “zhao.part1″ http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3</p>
<p>这样就可以分块下载啦。不过你需要自己把这些破碎的文件合并起来如果你用UNIX或苹果，用 cat zhao.part* &gt; zhao.MP3就可以如果用的是Windows，用copy /b 来解决吧，呵呵</p>
<h3>1.1.12  浏览FTP</h3>
<p>$ curl -u name:passwd ftp://ip:port/path/file</p>
<p>或者大家熟悉的</p>
<p>$ curl ftp://name:passwd@ip:port/path/file</p>
<p>&nbsp;</p>
<h3>1.1.13  FTP上传</h3>
<p>上传的option是 -T</p>
<p>比如我们向ftp传一个文件：</p>
<p>$ curl -T localfile -u name:passwd ftp://upload_site:port/path/</p>
<h3>1.1.14  HTTP上传</h3>
<p>$ curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi</p>
<p>注意，这时候，使用的协议是HTTP的PUT method</p>
<h3>1.1.15  POST模式读取网页</h3>
<p>POST模式的option则是 -d</p>
<p>比如，</p>
<p>$ curl -d “user=nickwolfe&amp;password=12345″ http://www.linuxidc.com/login.cgi</p>
<p>&nbsp;</p>
<h3>1.1.16  POST模式下的文件上传</h3>
<p>比如</p>
<p>&lt;form method=”POST” enctype=”multipar/form-data” action=”http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi”&gt;</p>
<p>&lt;input type=file name=upload&gt;</p>
<p>&lt;input type=submit name=nick value=”go”&gt;</p>
<p>&lt;/form&gt;</p>
<p>这样一个HTTP表单，我们要用curl进行模拟，就该是这样的语法：</p>
<p>$ curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi</p>
<h2>1.2     finger</h2>
<h3>1.2.1     功能说明</h3>
<p>查找并显示用户信息。</p>
<h3>1.2.2     语法</h3>
<p>finger [-lmsp][帐号名称...]</p>
<h3>1.2.3     补充说明</h3>
<p>finger指令会去查找，并显示指定帐号的用户相关信息，包括本地与远端主机的用户皆可，帐号名称没有大小写的差别。单独执行finger指令，它会显示本地主机现在所有的用户的登陆信息，包括帐号名称，真实姓名，登入终端机，闲置时间，登入时间以及地址和电话。</p>
<h3>1.2.4     参数</h3>
<p>-l 　列出该用户的帐号名称，真实姓名，用户专属目录，登入所用的Shell，登入时间，转信地址，电子邮件状态，还有计划文件和方案文件内容。</p>
<p>-m 　排除查找用户的真实姓名。</p>
<p>-s 　列出该用户的帐号名称，真实姓名，登入终端机，闲置时间，登入时间以及地址和电话。</p>
<p>-p 　列出该用户的帐号名称，真实姓名，用户专属目录，登入所用的Shell，登入时间，转信地址，电子邮件状态，但不显示该用户的计划文件和方案文件内容。</p>
<h2>1.3     ftp</h2>
<h3>1.3.1     功能说明</h3>
<p>设置文件系统相关功能。</p>
<h3>1.3.2     语法</h3>
<p>ftp [-dignv][主机名称或IP地址]</p>
<h3>1.3.3     补充说明</h3>
<p>FTP是ARPANet的标准文件传输协议，该网络就是现今Internet的前身。</p>
<h3>1.3.4     参数</h3>
<p>-d   详细显示指令执行过程，便于排错或分析程序执行的情形。</p>
<p>-i   关闭互动模式，不询问任何问题。</p>
<p>-g   关闭本地主机文件名称支持特殊字符的扩充特性。</p>
<p>-n   不使用自动登陆。</p>
<p>-v   显示指令执行过程。</p>
<h2>1.4     ifconfig</h2>
<h3>1.4.1     功能说明</h3>
<p>显示或设置网络设备。</p>
<h3>1.4.2     语法</h3>
<p>ifconfig [网络设备][down up -allmulti -arp -promisc][add&lt;地址&gt;][del&lt;地址&gt;][&lt;hw&lt;网络设备类型&gt;&lt;硬件地址&gt;][io_addr&lt;I/O地址&gt;][irq&lt;IRQ地址&gt;][media&lt;网络媒介类型&gt;][mem_start&lt;内存地址&gt;][metric&lt;数目&gt;][mtu&lt;字节&gt;][netmask&lt;子网掩码&gt;][tunnel&lt;地址&gt;][-broadcast&lt;地址&gt;][-pointopoint&lt;地址&gt;][IP地址]</p>
<h3>1.4.3     补充说明</h3>
<p>ifconfig可设置网络设备的状态，或是显示目前的设置。</p>
<p>如果提示找不到命令，可用<strong>/sbin/ifconfig</strong>。</p>
<h3>1.4.4     参数</h3>
<p>add&lt;地址&gt;   设置网络设备IPv6的IP地址。</p>
<p>del&lt;地址&gt;   删除网络设备IPv6的IP地址。</p>
<p>down   关闭指定的网络设备。</p>
<p>&lt;hw&lt;网络设备类型&gt;&lt;硬件地址&gt;   设置网络设备的类型与硬件地址。</p>
<p>io_addr&lt;I/O地址&gt;   设置网络设备的I/O地址。</p>
<p>irq&lt;IRQ地址&gt;   设置网络设备的IRQ。</p>
<p>media&lt;网络媒介类型&gt;   设置网络设备的媒介类型。</p>
<p>mem_start&lt;内存地址&gt;   设置网络设备在主内存所占用的起始地址。</p>
<p>metric&lt;数目&gt;   指定在计算数据包的转送次数时，所要加上的数目。</p>
<p>mtu&lt;字节&gt;   设置网络设备的MTU。</p>
<p>netmask&lt;子网掩码&gt;   设置网络设备的子网掩码。</p>
<p>tunnel&lt;地址&gt;   建立IPv4与IPv6之间的隧道通信地址。</p>
<p>up   启动指定的网络设备。</p>
<p>-broadcast&lt;地址&gt;   将要送往指定地址的数据包当成广播数据包来处理。</p>
<p>-pointopoint&lt;地址&gt;   与指定地址的网络设备建立直接连线，此模式具有保密功能。</p>
<p>-promisc   关闭或启动指定网络设备的promiscuous模式。</p>
<p>[IP地址]   指定网络设备的IP地址。</p>
<p>[网络设备]   指定网络设备的名称。</p>
<h2>1.5     ip</h2>
<h3>1.5.1     功能说明</h3>
<p>ip是iproute2软件包里面的一个强大的网络配置工具，它能够替代一些传统的网络管理工具。例如：ifconfig、route等。</p>
<h3>1.5.2     语法</h3>
<p>ip [选项] [动作] [指令]</p>
<h3>1.5.3     参数</h3>
<p>动作 := { link | addr | route | rule | neigh | tunnel | maddr | mroute | monitor }</p>
<p>选项 := { -V[ersion] | -s[tatistics] | -r[esolve] |-f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] }</p>
<h3>1.5.4     装置介面 (device) 的相关设定： ip link</h3>
<p>ip link 可以设定与装置 (device) 有关的相关设定，包括 MTU 以及该网路介面的 MAC 等等， 当然也可以启动 (up) 或关闭 (down) 某个网路介面啦！整个语法是这样的：</p>
<p>[root@linux ~]# ip [-s] link show &lt;== 单纯的查阅该装置相关的资讯</p>
<p>[root@linux ~]# ip link set [device] [动作与参数]</p>
<p>参数：</p>
<p>show：仅显示出这个装置的相关内容，如果加上 -s 会显示更多统计数据；</p>
<p>set ：可以开始设定项目， device 指的是 eth0, eth1 等等介面代号；</p>
<p>动作与参数：包括有底下的这些动作：</p>
<p>up|down ：启动 (up) 或关闭 (down) 某个介面，其他参数使用预设的乙太网路；</p>
<p>address ：如果这个装置可以更改 MAC 的话，用这个参数修改！</p>
<p>name     ：给予这个装置一个特殊的名字；</p>
<p>mtu      ：就是最大传输单元啊！</p>
<p>&nbsp;</p>
<p><strong>范例一：显示出所有的介面资讯</strong></p>
<p>[root@linux ~]# ip link show</p>
<p>1: lo: &lt;LOOPBACK,UP,10000&gt; mtu 16436 qdisc noqueue</p>
<p>link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00</p>
<p>2: eth0: &lt;BROADCAST,MULTICAST,UP,10000&gt; mtu 1500 qdisc pfifo_fast qlen 1000</p>
<p>link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff</p>
<p>3: sit0: &lt;NOARP&gt; mtu 1480 qdisc noop</p>
<p>link/sit 0.0.0.0 brd 0.0.0.0</p>
<p>[root@linux ~]# ip -s link show eth0</p>
<p>2: eth0: &lt;BROADCAST,MULTICAST,UP,10000&gt; mtu 1500 qdisc pfifo_fast qlen 1000</p>
<p>link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff</p>
<p>RX: bytes packets errors dropped overrun mcast</p>
<p>484011792 2247372 0       0       0       0</p>
<p>TX: bytes packets errors dropped carrier collsns</p>
<p>2914104290 2867753 0       0       0       0</p>
<p>使用 ip link show 可以显示出整个装置介面的硬体相关资讯，如上所示，包括网卡位址(MAC)、MTU等等， 比较有趣的应该是那个 sit0 的介面了，那个 sit0 的介面是用在 IPv4 及 IPv6 的封包转换上的， 对於我们仅使用 IPv4 的网路是没有作用的。 lo 及 sit0 都是主机内部所自行设定的。 而如果加上 -s 的参数後，则这个网路卡的相关统计资讯就会被列出来， 包括接收 (RX) 及传送 (TX) 的封包数量等等，详细的内容与 ifconfig 所输出的结果相同的。</p>
<p><strong>范例二：启动、关闭与设定装置的相关资讯</strong></p>
<p>[root@linux ~]# ip link set eth0 up</p>
<p># 启动 eth0 这个装置介面；</p>
<p>[root@linux ~]# ip link set eth0 down</p>
<p># 阿就关闭啊！简单的要命～</p>
<p>[root@linux ~]# ip link set eth0 mtu 1000</p>
<p># 更改 MTU 的值，达到 1000 bytes，单位就是 bytes 啊！</p>
<p>更新网路卡的 MTU 使用 ifconfig 也可以达成啊！没啥了不起，不过，如果是要更改『网路卡代号、 MAC 位址的资讯』的话，那可就得使用 ip 罗～不过，设定前得要先关闭该网路卡，否则会不成功。 如下所示：</p>
<p><strong>范例三：修改网路卡代号、MAC </strong><strong>等参数</strong></p>
<p>[root@linux ~]# ip link set eth0 name vbird</p>
<p>SIOCSIFNAME: Device or resource busy</p>
<p># 因为该装置目前是启动的，所以不能这样做设定。你应该要这样做：</p>
<p>[root@linux ~]# ip link set eth0 down       &lt;==关闭介面</p>
<p>[root@linux ~]# ip link set eth0 name vbird &lt;==重新设定</p>
<p>[root@linux ~]# ip link show                &lt;==观察一下</p>
<p>2. vbird: &lt;BROADCAST,MILTICASE&gt; mtu 900 qdisc pfifo_fast qlen 1000</p>
<p>link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff</p>
<p># 怕了吧！连网路卡代号都可以改变！不过，玩玩後记得改回来啊！</p>
<p># 因为我们的 ifcfg-eth0 还是使用原本的装置代号！避免有问题，要改回来</p>
<p>[root@linux ~]# ip link set vbird name eth0 &lt;==介面改回来</p>
<p>[root@linux ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa</p>
<p>[root@linux ~]# ip link show eth0</p>
<p># 如果你的网路卡支援硬体位址 (MAC) 可以更改的话，</p>
<p># 那么上面这个动作就可以更改你的网路卡位址了！厉害吧！</p>
<p># 不过，还是那句老话，测试完之後请立刻改回来啊！</p>
<p>在这个装置的硬体相关资讯设定上面，包括 MTU, MAC 以及传输的模式等等，都可以在这里设定。 有趣的是那个 address 的项目，那个项目後面接的可是硬体位址 (MAC) 而不是 IP 喔！ 很容易搞错啊！切记切记！更多的硬体参数可以使用 man ip 查阅一下与 ip link 有关的设定。</p>
<h3>1.5.5     关於额外的 IP 相关设定： ip address</h3>
<p>如果说 ip link 是与 OSI 七层协定 的第二层资料连阶层有关的话，那么 ip address (ip addr) 就是与第三层网路层有关的参数啦！ 主要是在设定与 IP 有关的各项参数，包括 netmask, broadcast 等等。</p>
<p>[root@linux ~]# ip address show   &lt;==就是查阅 IP 参数啊！</p>
<p>[root@linux ~]# ip address [add|del] [IP参数] [dev 装置名] [相关参数]</p>
<p>参数：</p>
<p>show    ：单纯的显示出介面的 IP 资讯啊；</p>
<p>add|del ：进行相关参数的增加 (add) 或删除 (del) 设定，主要有：</p>
<p>IP 参数：主要就是网域的设定，例如 192.168.100.100/24 之类的设定喔；</p>
<p>dev    ：这个 IP 参数所要设定的介面，例如 eth0, eth1 等等；</p>
<p>相关参数：主要有底下这些：</p>
<p>broadcast：设定广播位址，如果设定值是 + 表示『让系统自动计算』</p>
<p>label    ：亦即是这个装置的别名，例如 eth0:0 就是了！</p>
<p>scope    ：这个介面的领域，通常是这几个大类：</p>
<p>global ：允许来自所有来源的连线；</p>
<p>site   ：仅支援 IPv6 ，仅允许本主机的连线；</p>
<p>link   ：仅允许本装置自我连线；</p>
<p>host   ：仅允许本主机内部的连线；</p>
<p>所以当然是使用 global 罗！预设也是 global 啦！</p>
<p>&nbsp;</p>
<p><strong>范例一：显示出所有的介面之 IP </strong><strong>参数：</strong></p>
<p>[root@linux ~]# ip address show</p>
<p>1: lo: &lt;LOOPBACK,UP,10000&gt; mtu 16436 qdisc noqueue</p>
<p>link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00</p>
<p>inet 127.0.0.1/8 scope host lo</p>
<p>inet6 ::1/128 scope host</p>
<p>valid_lft forever preferred_lft forever</p>
<p>2: eth0: &lt;BROADCAST,MULTICAST,UP,10000&gt; mtu 1500 qdisc pfifo_fast qlen 1000</p>
<p>link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff</p>
<p>inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0</p>
<p>inet6 fe80::250:fcff:fe22:9acb/64 scope link</p>
<p>valid_lft forever preferred_lft forever</p>
<p>3: sit0: &lt;NOARP&gt; mtu 1480 qdisc noop</p>
<p>link/sit 0.0.0.0 brd 0.0.0.0</p>
<p>看到上面那个特殊的字体吗？没错！那就是 IP 参数啦！也是 ip address 最主要的功能。 底下我们进一步来新增虚拟的网路介面试看看：</p>
<p><strong>范例二：新增一个介面，名称假设为 eth0:vbird</strong></p>
<p>[root@linux ~]# ip address add 192.168.50.50/24 broadcast + \</p>
<p>&gt; dev eth0 label eth0:vbird</p>
<p>[root@linux ~]# ip address show eth0</p>
<p>2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000</p>
<p>link/ether 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff</p>
<p>inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0</p>
<p>inet 192.168.50.50/24 brd 192.168.50.255 scope global eth0:vbird</p>
<p>inet6 fe80::240:d0ff:fe13:c346/64 scope link</p>
<p>valid_lft forever preferred_lft forever</p>
<p># 看到上面的特殊字体了吧？多出了一行新的介面，且名称是 eth0:vbird</p>
<p># 至於那个 broadcast + 也可以写成 broadcast 192.168.50.255 啦！</p>
<p>[root@linux ~]# ifconfig</p>
<p>eth0:vbir Link encap:Ethernet HWaddr 00:40:D0:13:C3:46</p>
<p>inet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0</p>
<p>UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1</p>
<p>Interrupt:5 Base address:0x3e00</p>
<p># 如果使用 ifconfig 就能够看到这个怪东西了！</p>
<p><strong>范例三：将刚刚的介面删除</strong></p>
<p>[root@linux ~]# ip address del 192.168.50.50/24 dev eth0</p>
<p>&nbsp;</p>
<h3>1.5.6     关於路由的相关设定： ip route</h3>
<p>ip route 的功能几乎与 route 这个指令差不多，但是，他还可以进行额外的参数设计，例如 MTU 的规划等等，相当的强悍啊！</p>
<p>[root@linux ~]# ip route show &lt;==单纯的显示出路由的设定而已</p>
<p>[root@linux ~]# ip route [add|del] [IP或网域] [via gateway] [dev 装置]</p>
<p>参数：</p>
<p>show ：单纯的显示出路由表，也可以使用 list ；</p>
<p>add|del ：增加 (add) 或删除 (del) 路由的意思。</p>
<p>IP或网域：可使用 192.168.50.0/24 之类的网域或者是单纯的 IP ；</p>
<p>via     ：从那个 gateway 出去，不一定需要；</p>
<p>dev     ：由那个装置连出去，这就需要了！</p>
<p>mtu     ：可以额外的设定 MTU 的数值喔！</p>
<p>&nbsp;</p>
<p><strong>范例一：显示出目前的路由资料</strong></p>
<p>[root@linux ~]# ip route show</p>
<p>192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2</p>
<p>169.254.0.0/16 dev eth1 scope link</p>
<p>default via 192.168.1.254 dev eth1</p>
<p>如上表所示，最简单的功能就是显示出目前的路由资讯，其实跟 route 这个指令相同啦！ 指示必须要注意几个小东西：</p>
<p>proto：此路由的路由协定，主要有 redirect, kernel, boot, static, ra 等， 其中 kernel 指的是直接由核心判断自动设定。</p>
<p>scope：路由的范围，主要是 link ，亦即是与本装置有关的直接连线。</p>
<p>再来看一下如何进行路由的增加与删除吧！</p>
<p><strong>范例二：增加路由，主要是本机直接可沟通的网域</strong></p>
<p>[root@linux ~]# ip route add 192.168.5.0/24 dev eth0</p>
<p># 针对本机直接沟通的网域设定好路由，不需要透过外部的路由器</p>
<p>[root@linux ~]# ip route show</p>
<p>192.168.5.0/24 dev eth0 scope link</p>
<p>….以下省略….</p>
<p><strong>范例三：增加可以通往外部的路由，需透过 router </strong><strong>喔！</strong></p>
<p>[root@linux ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0</p>
<p>[root@linux ~]# ip route show</p>
<p>192.168.5.0/24 dev eth0 scope link</p>
<p>….其他省略….</p>
<p>192.168.10.0/24 via 192.168.5.100 dev eth0</p>
<p># 仔细看喔，因为我有 192.168.5.0/24 的路由存在 (我的网卡直接联系)，</p>
<p># 所以才可以将 192.168.10.0/24 的路由丢给 192.168.5.100</p>
<p># 那部主机来帮忙传递喔！与之前提到的 route 指令是一样的限制！</p>
<p><strong>范例四：增加预设路由</strong></p>
<p>[root@linux ~]# ip route add default via 192.168.1.2 dev eth0</p>
<p># 那个 192.168.1.2 就是我的预设路由器 (gateway) 的意思啊！ ^_^</p>
<p># 真的记得，只要一个预设路由就 OK ！</p>
<p><strong>范例五：删除路由</strong></p>
<p>[root@linux ~]# ip route del 192.168.10.0/24</p>
<p>[root@linux ~]# ip route del 192.168.5.0/24</p>
<h2>1.6     netstat</h2>
<h3>1.6.1     功能说明</h3>
<p>显示网络状态。</p>
<h3>1.6.2     语法</h3>
<p>netstat [-acCeFghilMnNoprstuvVwx][-A&lt;网络类型&gt;][--ip]</p>
<h3>1.6.3     补充说明</h3>
<p>利用netstat指令可让你得知整个Linux系统的网络情况。</p>
<h3>1.6.4     参数</h3>
<p>-a或–all   显示所有连线中的Socket。</p>
<p>-A&lt;网络类型&gt;或–&lt;网络类型&gt;   列出该网络类型连线中的相关地址。</p>
<p>-c或–continuous   持续列出网络状态。</p>
<p>-C或–cache   显示路由器配置的快取信息。</p>
<p>-e或–extend   显示网络其他相关信息。</p>
<p>-F或–fib   显示FIB。</p>
<p>-g或–groups   显示多重广播功能群组组员名单。</p>
<p>-h或–help   在线帮助。</p>
<p>-i或–interfaces   显示网络界面信息表单。</p>
<p>-l或–listening   显示监控中的服务器的Socket。</p>
<p>-M或–masquerade   显示伪装的网络连线。</p>
<p>-n或–numeric   直接使用IP地址，而不通过域名服务器。</p>
<p>-N或–netlink或–symbolic   显示网络硬件外围设备的符号连接名称。</p>
<p>-o或–timers   显示计时器。</p>
<p>-p或–programs   显示正在使用Socket的程序识别码和程序名称。</p>
<p>-r或–route   显示Routing Table。</p>
<p>-s或–statistice   显示网络工作信息统计表。</p>
<p>-t或–tcp   显示TCP传输协议的连线状况。</p>
<p>-u或–udp   显示UDP传输协议的连线状况。</p>
<p>-v或–verbose   显示指令执行过程。</p>
<p>-V或–version   显示版本信息。</p>
<p>-w或–raw   显示RAW传输协议的连线状况。</p>
<p>-x或–unix   此参数的效果和指定”-A unix”参数相同。</p>
<p>–ip或–inet   此参数的效果和指定”-A inet”参数相同。</p>
<h2>1.7     nslookup</h2>
<h3>1.7.1     功能说明</h3>
<p>nslookup命令的功能是查询一台机器的IP地址和其对应的域名。使用权限所有用户。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器，就可以用这个命令查看不同主机的IP地址对应的域名。</p>
<h3>1.7.2     语法</h3>
<p>nslookup ［IP地址/域名］</p>
<h3>1.7.3     例子</h3>
<p><strong>（</strong><strong>1</strong><strong>）在本地计算机上使用</strong><strong>nslookup</strong><strong>命令</strong><strong></strong></p>
<p>$ nslookup</p>
<p>Default Server: name.cao.com.cn</p>
<p>Address: 192.168.1.9</p>
<p>&gt;</p>
<p>在符号“&gt;”后面输入要查询的IP地址域名，并回车即可。如果要退出该命令，输入“exit”，并回车即可。</p>
<p>&nbsp;</p>
<p><strong>（</strong><strong>2</strong><strong>）使用</strong><strong>nslookup</strong><strong>命令测试</strong><strong>named</strong></p>
<p>输入下面命令：</p>
<p>nslookup</p>
<p>然后就进入交换式nslookup环境。如果named正常启动，则nslookup会显示当前DNS服务器的地址和域名，否则表示named没能正常启动。</p>
<p>&nbsp;</p>
<p><strong>下面简单介绍一些基本的</strong><strong>DNS</strong><strong>诊断。</strong><strong></strong></p>
<p>◆ 检查正向DNS解析，在nslookup提示符下输入带域名的主机名，如hp712.my.com，nslookup应能显示该主机名对应的IP地址。如果只输入hp712，nslookup会根据/etc/resolv.conf的定义，自动添加my.com域名，并回答对应的IP地址。</p>
<p>◆检查反向DNS解析，在nslookup提示符下输入某个IP地址，如192.22.33.20，nslookup应能回答该IP地址所对应的主机名。</p>
<p>◆检查MX邮件地址记录在nslookup提示符下输入：</p>
<p>set q=mx</p>
<p>然后输入某个域名，输入my.com和mail.my.com，nslookup应能够回答对应的邮件服务器地址，即</p>
<p>support.my.com和support2.my.com。</p>
<p>◆检查TXT记录：</p>
<p>set type=txt</p>
<p>然后输入某个域名，nslookup会显示对应的记录。</p>
<h2>1.8     ping</h2>
<h3>1.8.1     功能说明</h3>
<p>检测主机。</p>
<h3>1.8.2     语法</h3>
<p>ping [-dfnqrRv][-c&lt;完成次数&gt;][-i&lt;间隔秒数&gt;][-I&lt;网络界面&gt;][-l&lt;前置载入&gt;][-p&lt;范本样式&gt;][-s&lt;数据包大小&gt;][-t&lt;存活数值&gt;][主机名称或IP地址]</p>
<h3>1.8.3     补充说明</h3>
<p>执行ping指令会使用ICMP传输协议，发出要求回应的信息，若远端主机的网络功能没有问题，就会回应该信息，因而得知该主机运作正常。</p>
<h3>1.8.4     参数</h3>
<p>-d   使用Socket的SO_DEBUG功能。</p>
<p>-c&lt;完成次数&gt;   设置完成要求回应的次数。</p>
<p>-f   极限检测。</p>
<p>-i&lt;间隔秒数&gt;   指定收发信息的间隔时间。</p>
<p>-I&lt;网络界面&gt;   使用指定的网络界面送出数据包。</p>
<p>-l&lt;前置载入&gt;   设置在送出要求信息之前，先行发出的数据包。</p>
<p>-n   只输出数值。</p>
<p>-p&lt;范本样式&gt;   设置填满数据包的范本样式。</p>
<p>-q   不显示指令执行过程，开头和结尾的相关信息除外。</p>
<p>-r   忽略普通的Routing Table，直接将数据包送到远端主机上。</p>
<p>-R   记录路由过程。</p>
<p>-s&lt;数据包大小&gt;   设置数据包的大小。</p>
<p>-t&lt;存活数值&gt;   设置存活数值TTL的大小。</p>
<p>-v   详细显示指令的执行过程。</p>
<h2>1.9     rcp</h2>
<h3>1.9.1     功能说明</h3>
<p>远端复制文件或目录。</p>
<h3>1.9.2     语法</h3>
<p>rcp [-pr][源文件或目录][目标文件或目录] 或 rcp [-pr][源文件或目录...][目标文件]</p>
<h3>1.9.3     补充说明</h3>
<p>rcp指令用在远端复制文件或目录，如同时指定两个以上的文件或目录，且最后的目的地是一个已经存在的目录，则它灰把前面指定的所有文件或目录复制到该目录中。</p>
<h3>1.9.4     参数</h3>
<p>-p 　保留源文件或目录的属性，包括拥有者，所属群组，权限与时间。</p>
<p>-r 　递归处理，将指定目录下的文件与子目录一并处理。</p>
<h2>1.10        route</h2>
<h3>1.10.1  功能说明</h3>
<p>route表示手工产生、修改和查看路由表。</p>
<h3>1.10.2  语法</h3>
<p>#route [-add][-net|-host] targetaddress [-netmask Nm][dev]If]</p>
<p>#route [－delete][-net|-host] targetaddress [gw Gw] [-netmask Nm] [dev]If]</p>
<h3>1.10.3  参数</h3>
<p>-add：增加路由。</p>
<p>-delete：删除路由。</p>
<p>-net：路由到达的是一个网络，而不是一台主机。</p>
<p>-host：路由到达的是一台主机。</p>
<p>-netmask Nm：指定路由的子网掩码。</p>
<p>gw：指定路由的网关。</p>
<p>[dev]If：强迫路由链指定接口。</p>
<h3>1.10.4  例子</h3>
<p>route add -net 202.96.96.0 -netmask 255.255.255.0 gw 192.168.1.10 dev eth0</p>
<p>表示到202.96.96.0/255.255.255.0这个网络的信息通过你的第一块网卡发送, 默认网关的地址是192.168.1.10</p>
<h2>1.11        tcpdump</h2>
<h3>1.11.1  功能说明</h3>
<p>倾倒网络传输数据。</p>
<h3>1.11.2  语法</h3>
<p>tcpdump [-adeflnNOpqStvx][-c&lt;数据包数目&gt;][-dd][-ddd][-F&lt;表达文件&gt;][-i&lt;网络界面&gt;][-r&lt;数据包文件&gt;][-s&lt;数据包大小&gt;][-tt][-T&lt;数据包类型&gt;][-vv][-w&lt;数据包文件&gt;][输出数据栏位]</p>
<h3>1.11.3  补充说明</h3>
<p>执行tcpdump指令可列出经过指定网络界面的数据包文件头，在Linux操作系统中，你必须是系统管理员。</p>
<h3>1.11.4  参数</h3>
<p>-a   尝试将网络和广播地址转换成名称。</p>
<p>-c&lt;数据包数目&gt;   收到指定的数据包数目后，就停止进行倾倒操作。</p>
<p>-d   把编译过的数据包编码转换成可阅读的格式，并倾倒到标准输出。</p>
<p>-dd   把编译过的数据包编码转换成C语言的格式，并倾倒到标准输出。</p>
<p>-ddd   把编译过的数据包编码转换成十进制数字的格式，并倾倒到标准输出。</p>
<p>-e   在每列倾倒资料上显示连接层级的文件头。</p>
<p>-f   用数字显示网际网络地址。</p>
<p>-F&lt;表达文件&gt;   指定内含表达方式的文件。</p>
<p>-i&lt;网络界面&gt;   使用指定的网络截面送出数据包。</p>
<p>-l   使用标准输出列的缓冲区。</p>
<p>-n   不把主机的网络地址转换成名字。</p>
<p>-N   不列出域名。</p>
<p>-O   不将数据包编码最佳化。</p>
<p>-p   不让网络界面进入混杂模式。</p>
<p>-q   快速输出，仅列出少数的传输协议信息。</p>
<p>-r&lt;数据包文件&gt;   从指定的文件读取数据包数据。</p>
<p>-s&lt;数据包大小&gt;   设置每个数据包的大小。</p>
<p>-S   用绝对而非相对数值列出TCP关联数。</p>
<p>-t   在每列倾倒资料上不显示时间戳记。</p>
<p>-tt   在每列倾倒资料上显示未经格式化的时间戳记。</p>
<p>-T&lt;数据包类型&gt;   强制将表达方式所指定的数据包转译成设置的数据包类型。</p>
<p>-v   详细显示指令执行过程。</p>
<p>-vv   更详细显示指令执行过程。</p>
<p>-x   用十六进制字码列出数据包资料。</p>
<p>-w&lt;数据包文件&gt;   把数据包数据写入指定的文件。</p>
<h2>1.12        telnet</h2>
<h3>1.12.1  功能说明</h3>
<p>远端登入。</p>
<h3>1.12.2  语法</h3>
<p>telnet [-8acdEfFKLrx][-b&lt;主机别名&gt;][-e&lt;脱离字符&gt;][-k&lt;域名&gt;][-l&lt;用户名称&gt;][-n&lt;记录文件&gt;][-S&lt;服务类型&gt;][-X&lt;认证形态&gt;][主机名称或IP地址&lt;通信端口&gt;]</p>
<h3>1.12.3  补充说明</h3>
<p>执行telnet指令开启终端机阶段作业，并登入远端主机。</p>
<h3>1.12.4  参数</h3>
<p>-8   允许使用8位字符资料，包括输入与输出。</p>
<p>-a   尝试自动登入远端系统。</p>
<p>-b&lt;主机别名&gt;   使用别名指定远端主机名称。</p>
<p>-c   不读取用户专属目录里的.telnetrc文件。</p>
<p>-d   启动排错模式。</p>
<p>-e&lt;脱离字符&gt;   设置脱离字符。</p>
<p>-E   滤除脱离字符。</p>
<p>-f   此参数的效果和指定”-F”参数相同。</p>
<p>-F   使用Kerberos V5认证时，加上此参数可把本地主机的认证数据上传到远端主机。</p>
<p>-k&lt;域名&gt;   使用Kerberos认证时，加上此参数让远端主机采用指定的领域名，而非该主机的域名。</p>
<p>-K   不自动登入远端主机。</p>
<p>-l&lt;用户名称&gt;   指定要登入远端主机的用户名称。</p>
<p>-L   允许输出8位字符资料。</p>
<p>-n&lt;记录文件&gt;   指定文件记录相关信息。</p>
<p>-r   使用类似rlogin指令的用户界面。</p>
<p>-S&lt;服务类型&gt;   设置telnet连线所需的IP TOS信息。</p>
<p>-x   假设主机有支持数据加密的功能，就使用它。</p>
<p>-X&lt;认证形态&gt;   关闭指定的认证形态。</p>
<h2>1.13        traceroute</h2>
<h3>1.13.1  功能说明</h3>
<p>显示数据包到主机间的路径。</p>
<h3>1.13.2  语法</h3>
<p>traceroute [-dFlnrvx][-f&lt;存活数值&gt;][-g&lt;网关&gt;...][-i&lt;网络界面&gt;][-m&lt;存活数 值&gt;][-p&lt;通信端口&gt;][-s&lt;来源地址&gt;][-t&lt;服务类型&gt;][-w&lt;超时秒数&gt;][主 机名称或IP地址][数据包大小]</p>
<h3>1.13.3  补充说明</h3>
<p>traceroute指令让你追踪网络数据包的路由途径，预设数据包大小是40Bytes，用户可另行设置。</p>
<h3>1.13.4  参数</h3>
<p>-d 使用Socket层级的排错功能。</p>
<p>-f&lt;存活数值&gt; 设置第一个检测数据包的存活数值TTL的大小。</p>
<p>-F 设置勿离断位。</p>
<p>-g&lt;网关&gt; 设置来源路由网关，最多可设置8个。</p>
<p>-i&lt;网络界面&gt; 使用指定的网络界面送出数据包。</p>
<p>-I 使用ICMP回应取代UDP资料信息。</p>
<p>-m&lt;存活数值&gt; 设置检测数据包的最大存活数值TTL的大小。</p>
<p>-n 直接使用IP地址而非主机名称。</p>
<p>-p&lt;通信端口&gt; 设置UDP传输协议的通信端口。</p>
<p>-r 忽略普通的Routing Table，直接将数据包送到远端主机上。</p>
<p>-s&lt;来源地址&gt; 设置本地主机送出数据包的IP地址。</p>
<p>-t&lt;服务类型&gt; 设置检测数据包的TOS数值。</p>
<p>-v 详细显示指令的执行过程。</p>
<p>-w&lt;超时秒数&gt; 设置等待远端主机回报的时间。</p>
<p>-x 开启或关闭数据包的正确性检验。</p>
<p>y:Cav$}i&gt;���}�指令执行过程。</p>
<p>&nbsp;</p>
<p>-r   递归处理，将指定目录下的所有文件和子目录一并处理。</p>
<p>-S   包含系统和隐藏文件。</p>
<p>-t&lt;日期时间&gt;   把压缩文件的日期设成指定的日期。</p>
<p>-T   检查备份文件内的每个文件是否正确无误。</p>
<p>-u   更换较新的文件到压缩文件内。</p>
<p>-v   显示指令执行过程或显示版本信息。</p>
<p>-V   保存VMS操作系统的文件属性。</p>
<p>-w   在文件名称里假如版本编号，本参数仅在VMS操作系统下有效。</p>
<p>-x&lt;范本样式&gt;   压缩时排除符合条件的文件。</p>
<p>-X   不保存额外的文件属性。</p>
<p>-y   直接保存符号连接，而非该连接所指向的文件，本参数仅在UNIX之类的系统下有效。</p>
<p>-z   替压缩文件加上注释。</p>
<p>-$   保存第一个被压缩文件所在磁盘的卷册名称。</p>
<p>-&lt;压缩效率&gt;   压缩效率是一个介于1-9的数值。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/334/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://cgi2.tky.3web.ne.jp/~zzh/zhao1.MP3" length="0" type="audio/mpeg" />
		</item>
		<item>
		<title>VPS服务器FTP安装与配置</title>
		<link>http://www.billy.net.cn/index.php/archives/332</link>
		<comments>http://www.billy.net.cn/index.php/archives/332#comments</comments>
		<pubDate>Sat, 24 Mar 2012 16:11:10 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[nginx 相关]]></category>
		<category><![CDATA[VPS 服务器]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=332</guid>
		<description><![CDATA[VPS要自己安装ftp服务器，让我们一起来配置ftp，方便自己上载和下载文件。 1.安装vsftpd，使用下面的命令： yum install vsftpd 2.启动/重启/关闭vsftpd服务器 [root@localhost ftp]#/sbin/service vsftpd restart Shutting down vsftpd:OK Starting vsftpd for vsftpd: OK 看见OK就表示重启成功. 启动和关闭分别把restart改为start或stop即可. 如果是源码安装的,到安装文件夹下找到start.sh和shutdown.sh文件,执行它们就可以了.<a href="http://www.billy.net.cn/index.php/archives/332" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>VPS要自己安装ftp服务器，让我们一起来配置ftp，方便自己上载和下载文件。</p>
<p>1.安装vsftpd，使用下面的命令：<br />
<a title="yum" href="http://www.usa-vps.com/vps-study-guide/yum%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97-%E4%B8%AD%E8%8B%B1%E6%96%87.htm" target="_blank">yum</a> install vsftpd</p>
<p>2.启动/重启/关闭vsftpd服务器<br />
[root@localhost ftp]#/sbin/service vsftpd restart<br />
Shutting down vsftpd:OK<br />
Starting vsftpd for vsftpd: OK<br />
看见OK就表示重启成功.<br />
启动和关闭分别把restart改为start或stop即可.<br />
如果是源码安装的,到安装文件夹下找到start.sh和shutdown.sh文件,执行它们就可以了.<span id="more-332"></span></p>
<p>3.与vsftpd服务器有关的文件和文件夹<br />
vsftpd服务器的配置文件的是: /etc/vsftpd/vsftpd.conf</p>
<p>vsftpd服务器的根目录,即FTP服务器的主目录:<br />
[root@localhost ftp]# more /etc/passwd|grep ftp<br />
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin<br />
这样你就能看到FTP的服务器的目录在/var/ftp处<br />
如果你想修改服务器目录的路径,那么你只要修改/var/ftp到别处就行了</p>
<p>4.添加FTP本地用户<br />
有的FTP服务器需要用户名和密码才能登录,就是因为设置了FTP用户和权限.<br />
FTP用户一般是不能登录系统的,只能进入FTP服务器自己的目录中,这是基于安全原因.只能在ftp中指定的目录上载和下载,不能登录SHELL,更不可能登录系统。</p>
<p>/usr/sbin/adduser -d /opt/ftp -g ftp -s /sbin/nologin ftpuser</p>
<p>这个命令的意思是:<br />
使用命令(adduser)添加ftpuser用户,不能登录系统(-s /sbin/nologin),自己的文件夹在(-d /opt/ftp)),属于组ftp(-g ftp)<br />
然后你需要为它设置密码passwd ftp<br />
这样就添加了一个FTP用户了.下面的示例可以帮助你进入FTP服务器了.</p>
<p>要保证自己能读写自己的目录,就要在配置文件vsftpd.conf里设置一下就可以读写了.<br />
local_enable=yes<br />
write_enable=yes<br />
local_umask=022</p>
<p>5.匿名上传下载<br />
修改配置文件即可vsftpd.conf,确定有以下几行,没有自己添加进去就可以了.<br />
anonymous_enable=yes<br />
anon_upload_enable=yes<br />
anon_mkdir_write_enable=yes<br />
anon_umask=022</p>
<p>然后你可以新建一个文件夹,修改它的权限为完全开放,任何用户就可以登录这个文件夹,并上传下载文件:<br />
mkdir /var/ftp/guest<br />
chmod 777 /var/ftp/guest</p>
<p>6.定制进入FTP服务器的欢迎信息<br />
在vsftpd.conf文件中设置:<br />
dirmessage_enable=yes<br />
然后进入用户目录建立一个.message文件,输入欢迎信息即可。</p>
<p>7.实现虚拟路径<br />
将某个目录挂载到FTP服务器下供用户使用,这就叫做虚拟路径.<br />
比如将gxl用户的目录挂载到FTP服务器中,供FTP服务器的用户使用,使用如下命令即可:<br />
[root@localhost opt]# mount –bind /home/gxl /var/ftp/pub #使用挂载命令<br />
[root@localhost opt]# ls /var/ftp/pub<br />
LumaQQ Screenshot.png 桌面</p>
<p>8.打开vsFTPd的日志功能<br />
添加下面一行到vsftpd.conf文件中,一般情况下该文件中有这一行,只要把前面的注释符号#去掉即可,没有的话就添加,或者修改:<br />
xferlog_file=/var/log/vsftpd.log</p>
<p>9.限制链接数,以及每个IP最大的链接数<br />
修改配置文件中,例如vsftp最大支持链接数100个,每个IP能支持5个链接:<br />
max_client=100<br />
max_per=5</p>
<p>10.限制传输速度<br />
修改配置文件中,例如让匿名用户和vsftd上的用户(即虚拟用户)都以80KB=1024*80=81920的速度下载<br />
anon_max_rate=81920<br />
local_max_rate=81920</p>
<p>11.将用户(一般指虚拟用户)限制在自家目录<br />
修改配置文件中,这样用户就只能访问自己家的目录了:<br />
chroot_local_user=yes<br />
如果只想某些用户仅能访问自己的目录,其它用户不做这个限制,那么就需要在chroot_list文件(此文件一般是在/etc/vsftpd/中)中添加此用户.<br />
编辑此文件,比如将test用户添加到此文件中,那么将其写入即可.一般的话,一个用户占一行.<br />
[root@localhost vsftpd]# cat chroot_list<br />
ftpuser</p>
<p>12.绑定某个IP到vsFTPd<br />
有时候要限制某些IP访问服务器,只允许某些IP访问,例如只允许192.38.1.43访问这个FTP,同样修改配置文件:<br />
listen_address=192.38.1.43</p>
<p>配置好ftp后，你就可以通过你的本机登录到ftp服务器，管理你的文件。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/332/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx Rewrite伪静态语法教程[转]</title>
		<link>http://www.billy.net.cn/index.php/archives/329</link>
		<comments>http://www.billy.net.cn/index.php/archives/329#comments</comments>
		<pubDate>Sun, 16 Oct 2011 12:49:01 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[nginx 相关]]></category>
		<category><![CDATA[VPS 服务器]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[rewrite]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=329</guid>
		<description><![CDATA[一、Nginx rewrite基本语法 Nginx的rewrite语法其实很简单.用到的指令无非是这几个 set if return break rewrite 麻雀虽小,可御可萝五脏俱全.只是简单的几个指令却可以做出绝对不输apache的简单灵活的配置. 1.set set主要是用来设置变量用的,没什么特别的 2.if if主要用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等, 用法: if(条件) {…} - 当if表达式中的条件为true,则执行if块中的语句 -<a href="http://www.billy.net.cn/index.php/archives/329" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>一、Nginx rewrite基本语法</p>
<p>Nginx的rewrite语法其实很简单.用到的指令无非是这几个</p>
<p>set<br />
if<br />
return<br />
break<br />
rewrite</p>
<p>麻雀虽小,可御可萝五脏俱全.只是简单的几个指令却可以做出绝对不输apache的简单灵活的配置.<span id="more-329"></span><br />
1.set</p>
<p>set主要是用来设置变量用的,没什么特别的</p>
<p>2.if</p>
<p>if主要用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等,</p>
<p>用法: if(条件) {…}</p>
<p>- 当if表达式中的条件为true,则执行if块中的语句</p>
<p>- 当表达式只是一个变量时,如果值为空或者任何以0开头的字符串都会当作false</p>
<p>- 直接比较内容时,使用 = 和 !=</p>
<p>- 使用正则表达式匹配时,使用</p>
<p>~ 大小写敏感匹配<br />
~* 大小写不敏感匹配<br />
!~ 大小写敏感不匹配<br />
!~* 大小写不敏感不匹配</p>
<p>这几句话看起来有点绕,总之记住: ~为正则匹配, 后置*为大小写不敏感, 前置!为”非”操作</p>
<p>随便一提,因为nginx使用花括号{}判断区块,所以当正则中包含花括号时,则必须用双引号将正则包起来.对下面讲到的rewrite语句中的正则亦是如此.<br />
比如 “\d{4}\d{2}\.+”</p>
<p>- 使用-f,-d,-e,-x检测文件和目录</p>
<p>-f 检测文件存在<br />
-d 检测目录存在<br />
-e 检测文件,目录或者符号链接存在<br />
-x 检测文件可执行</p>
<p>跟~类似,前置!则为”非”操作</p>
<p>举例</p>
<p>if ($http_user_agent ~ MSIE) {<br />
rewrite  ^(.*)$  /msie/$1  break;<br />
}</p>
<p>//如果UA包含”MSIE”,rewrite 请求到/msie目录下</p>
<p>if ($http_cookie ~* “id=([^;] +)(?:;|$)” ) {<br />
set  $id  $1;<br />
}</p>
<p>//如果cookie匹配正则,设置变量$id等于正则引用部分</p>
<p>if ($request_method = POST ) {<br />
return 405;<br />
}</p>
<p>//如果提交方法为POST,则返回状态405 (Method not allowed)</p>
<p>if (!-f $request_filename) {<br />
break;<br />
proxy_pass  <a href="http://127.0.0.1/" target="_blank">http://127.0.0.1</a>;<br />
}</p>
<p>//如果请求文件名不存在,则反向代理localhost</p>
<p>if ($args ~ post=140){<br />
rewrite ^ <a href="http://example.com/" target="_blank">http://example.com/</a> permanent;<br />
}</p>
<p>//如果query string中包含”post=140″,永久重定向到example.com</p>
<p>3.return</p>
<p>return可用来直接设置HTTP返回状态,比如403,404等(301,302不可用return返回,这个下面会在rewrite提到)</p>
<p>4.break</p>
<p>立即停止rewrite检测,跟下面讲到的rewrite的break flag功能是一样的,区别在于前者是一个语句,后者是rewrite语句的flag</p>
<p>5.rewrite</p>
<p>最核心的功能(废话)</p>
<p>用法: rewrite 正则 替换 标志位</p>
<p>其中标志位有四种</p>
<p>break – 停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果<br />
last – 停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果,这点后面会跟nginx的location匹配一起提到<br />
redirect – 返回302临时重定向,一般用于重定向到完整的URL(包含http:部分)<br />
permanent – 返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)</p>
<p>因为301和302不能简单的只单纯返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了. 作为替换,rewrite可以更灵活的使用redirect和permanent标志实现301和302. 比如上一篇日志中提到的Blog搬家要做的域名重定向,在nginx中就会这么写</p>
<p>rewrite ^(.*)$ <a href="http://newdomain.com/" target="_blank">http://newdomain.com/</a> permanent;</p>
<p>举例来说一下rewrite的实际应用</p>
<p>rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  last;</p>
<p>如果请求为 /download/eva/media/op1.mp3 则请求被rewrite到 /download/eva/mp3/op1.mp3</p>
<p>使用起来就是这样,很简单不是么? 不过要注意的是rewrite有很多潜规则需要注意</p>
<p>- rewrite的生效区块为sever, location, if</p>
<p>- rewrite只对相对路径进行匹配,不包含hostname 比如说以上面301重定向的例子说明</p>
<p>rewrite ~* cafeneko\.info <a href="http://newdomain.com/" target="_blank">http://newdomain.com/</a> permanent;</p>
<p>这句是永远无法执行的,以这个URL为例</p>
<p><a href="http://blog.cafeneko.info/2010/10/neokoseseiki_in_new_home/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=neokoseseiki_in_new_home" target="_blank">http://blog.cafeneko.info/2010/10/neokoseseiki_in_new_home/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=neokoseseiki_in_new_home</a></p>
<p>其中cafeneko.info叫做hostname,再往后到?为止叫做相对路径,?后面的一串叫做query string</p>
<p>对于rewrite来说,其正则表达式仅对”/2010/10/neokoseseiki_in_new_home”这一部分进行匹配,即不包含hostname,也不包含query string .所以除非相对路径中包含跟域名一样的string,否则是不会匹配的. 如果非要做域名匹配的话就要使用if语句了,比如进行去www跳转</p>
<p>if ($host ~* ^www\.(cafeneko\.info)) {<br />
set $host_without_www $1;<br />
rewrite ^(.*)$ http://$host_without_www$1 permanent;<br />
}</p>
<p>- 使用相对路径rewrite时,会根据HTTP header中的HOST跟nginx的server_name匹配后进行rewrite,如果HOST不匹配或者没有HOST信息的话则rewrite到server_name设置的第一个域名,如果没有设置server_name的话,会使用本机的localhost进行rewrite</p>
<p>- 前面提到过,rewrite的正则是不匹配query string的,所以默认情况下,query string是自动追加到rewrite后的地址上的,如果不想自动追加query string,则在rewrite地址的末尾添加?</p>
<p>rewrite  ^/users/(.*)$  /show?user=$1?  last;</p>
<p>rewrite的基本知识就是这么多..但还没有完..还有最头疼的部分没有说…</p>
<p>二、Nginx location 和 rewrite retry</p>
<p>nginx的rewrite有个很奇特的特性 — rewrite后的url会再次进行rewrite检查,最多重试10次,10次后还没有终止的话就会返回HTTP 500</p>
<p>用过nginx的朋友都知道location区块,location区块有点像Apache中的RewriteBase,但对于nginx来说location是控制的级别而已,里面的内容不仅仅是rewrite.</p>
<p>这里必须稍微先讲一点location的知识.location是nginx用来处理对同一个server不同的请求地址使用独立的配置的方式</p>
<p>举例:</p>
<p>location  = / {<br />
&#8230;.配置A<br />
}</p>
<p>location  / {<br />
&#8230;.配置B<br />
}</p>
<p>location ^~ /images/ {<br />
&#8230;.配置C<br />
}</p>
<p>location ~* \.(gif|jpg|jpeg)$ {<br />
&#8230;.配置D<br />
}</p>
<p>访问 / 会使用配置A<br />
访问 /documents/document.html 会使用配置B<br />
访问 /images/1.gif 会使用配置C<br />
访问 /documents/1.jpg 会使用配置D</p>
<p>如何判断命中哪个location暂且按下不婊, 我们在实战篇再回头来看这个问题.</p>
<p>现在我们只需要明白一个情况: nginx可以有多个location并使用不同的配.</p>
<p>sever区块中如果有包含rewrite规则,则会最先执行,而且只会执行一次, 然后再判断命中哪个location的配置,再去执行该location中的rewrite, 当该location中的rewrite执行完毕时,rewrite并不会停止,而是根据rewrite过的URL再次判断location并执行其中的配置. 那么,这里就存在一个问题,如果rewrite写的不正确的话,是会在location区块间造成无限循环的.所以nginx才会加一个最多重试10次的上限. 比如这个例子</p>
<p>location /download/ {<br />
rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  last;<br />
}</p>
<p>如果请求为 /download/eva/media/op1.mp3 则请求被rewrite到 /download/eva/mp3/op1.mp3</p>
<p>结果rewrite的结果重新命中了location /download/ 虽然这次并没有命中rewrite规则的正则表达式,但因为缺少终止rewrite的标志,其仍会不停重试download中rewrite规则直到达到10次上限返回HTTP 500</p>
<p>认真的朋友这时就会问了,上面的rewrite规则不是有标志位last么? last不是终止rewrite的意思么?</p>
<p>说到这里我就要抱怨下了,网上能找到关于nginx rewrite的文章中80%对last标志的解释都是</p>
<p>last – 基本上都用这个Flag</p>
<p>……这他妈坑爹呢!!! 什么叫基本上都用? 什么是不基本的情况?  =皿=</p>
<p>有兴趣的可以放狗”基本上都用这个Flag”…</p>
<p>我最终还是在stack overflow找到了答案:</p>
<p>last和break最大的不同在于</p>
<p>- break是终止当前location的rewrite检测,而且不再进行location匹配<br />
– last是终止当前location的rewrite检测,但会继续重试location匹配并处理区块中的rewrite规则</p>
<p>还是这个该死的例子</p>
<p>location /download/ {<br />
rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  ;<br />
rewrite  ^(/download/.*)/movie/(.*)\..*$  $1/avi/$2.mp3  ;<br />
rewrite  ^(/download/.*)/avvvv/(.*)\..*$  $1/rmvb/$2.mp3 ;<br />
}</p>
<p>上面没有写标志位,请各位自行脑补…</p>
<p>如果请求为 /download/acg/moive/UBW.avi</p>
<p>last的情况是: 在第2行rewrite处终止,并重试location /download..死循环<br />
break的情况是: 在第2行rewrite处终止,其结果为最终的rewrite地址.</p>
<p>也就是说,上面的某位试图下载eva op不但没下到反而被HTTP 500射了一脸的例子正是因为用了last标志所以才会造成死循环,如果用break就没事了.</p>
<p>location /download/ {<br />
rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  break;<br />
}</p>
<p>对于这个问题,我个人的建议是,如果是全局性质的rewrite,最好放在server区块中并减少不必要的location区块.location区块中的rewrite要想清楚是用last还是break.</p>
<p>有人可能会问,用break不就万无一失了么?</p>
<p>不对.有些情况是要用last的. 典型的例子就是wordpress的permalink rewrite</p>
<p>常见的情况下, wordpress的rewrite是放在location /下面,并将请求rewrite到/index.php</p>
<p>这时如果这里使用break乃就挂了,不信试试. ｂ（￣▽￣）ｄ…因为nginx返回的是没有解释的index.php的源码…</p>
<p>这里一定要使用last才可以在结束location / 的rewrite, 并再次命中location ~ \.php$,将其交给fastcgi进行解释.其后返回给浏览器的才是解释过的html代码.</p>
<p>关于nginx rewrite的简介到这里就全部讲完了,水平及其有限,请大家指出错漏…</p>
<p>三、实战! WordPress的Permalink+Supercache rewrite实现</p>
<p>这个rewrite写法其实是来自supercache作者本家的某个评论中,网上很容易查到,做了一些修改. 先给出该配置文件的全部内容..部分内容码掉了..绝对路径什么的你知道也没啥用对吧?</p>
<p>server {<br />
listen   80;<br />
server_name  cafeneko.info <a href="http://www.cafeneko.info/" target="_blank">www.cafeneko.info</a>;</p>
<p>access_log  ***;<br />
error_log   *** ;</p>
<p>root   ***;<br />
index  index.php;</p>
<p>gzip_static on;</p>
<p>if (-f $request_filename) {<br />
break;<br />
}</p>
<p>set $supercache_file ”;<br />
set $supercache_uri $request_uri;</p>
<p>if ($request_method = POST) {<br />
set $supercache_uri ”;<br />
}</p>
<p>if ($query_string) {<br />
set $supercache_uri ”;<br />
}</p>
<p>if ($http_cookie ~* “comment_author_|wordpress_logged_|wp-postpass_” ) {<br />
set $supercache_uri ”;<br />
}</p>
<p>if ($supercache_uri ~ ^(.+)$) {<br />
set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;<br />
}</p>
<p>if (-f $document_root$supercache_file) {<br />
rewrite ^(.*)$ $supercache_file break;<br />
}</p>
<p>if (!-e $request_filename) {<br />
rewrite . /index.php last;<br />
}</p>
<p>location ~ \.php$ {</p>
<p>fastcgi_pass   127.0.0.1:9000;<br />
fastcgi_index  index.php;<br />
fastcgi_param  SCRIPT_FILENAME  ***$fastcgi_script_name;<br />
include        fastcgi_params;<br />
}</p>
<p>location ~ /\.ht {<br />
deny  all;<br />
}<br />
}</p>
<p>下面是解释:</p>
<p>gzip_static on;</p>
<p>如果浏览器支持gzip,则在压缩前先寻找是否存在压缩好的同名gz文件避免再次压缩浪费资源,配合supercache的压缩功能一起使用效果最好,相比supercache原生的Apache mod_rewrite实现,nginx的实现简单的多. Apache mod_rewrite足足用了两套看起来一模一样的条件判断来分别rewrite支持gzip压缩和不支持的情况.</p>
<p>if (-f $request_filename) {<br />
break;<br />
}</p>
<p>//如果是直接请求某个真实存在的文件,则用break语句停止rewrite检查</p>
<p>set $supercache_file ”;<br />
set $supercache_uri $request_uri;</p>
<p>//用$request_uri初始化变量 $supercache_uri.</p>
<p>if ($request_method = POST) {<br />
set $supercache_uri ”;<br />
}</p>
<p>//如果请求方式为POST,则不使用supercache.这里用清空$supercache_uri的方法来跳过检测,下面会看到</p>
<p>if ($query_string) {<br />
set $supercache_uri ”;<br />
}</p>
<p>//因为使用了rewrite的原因,正常情况下不应该有query_string(一般只有后台才会出现query string),有的话则不使用supercache</p>
<p>if ($http_cookie ~* “comment_author_|wordpress_logged_|wp-postpass_” ) {<br />
set $supercache_uri ”;<br />
}</p>
<p>//默认情况下,supercache是仅对unknown user使用的.其他诸如登录用户或者评论过的用户则不使用.</p>
<p>comment_author是测试评论用户的cookie, wordpress_logged是测试登录用户的cookie. wp-postpass不大清楚,字面上来看可能是曾经发表过文章的?只要cookie中含有这些字符串则条件成立.</p>
<p>原来的写法中检测登录用户cookie用的是wordpress_,但是我在测试中发现登入/登出以后还会有一个叫wordpress_test_cookie存在,不知道是什么作用,我也不清楚一般用户是否会产生这个cookie.由于考虑到登出以后这个cookie依然存在可能会影响到cache的判断,于是把这里改成了匹配wordpress_logged_</p>
<p>if ($supercache_uri ~ ^(.+)$) {<br />
set $supercache_file /wp-content/cache/supercache/$http_host$1index.html;<br />
}</p>
<p>//如果变量$supercache_uri不为空,则设置cache file的路径</p>
<p>这里稍微留意下$http_host$1index.html这串东西,其实写成 $http_host/$1/index.html 就好懂很多</p>
<p>以这个rewrite形式的url为例</p>
<p>cafeneko.info/2010/09/tsukihime-doujin_part01/</p>
<p>其中<br />
$http_host = ‘cafeneko.info’ , $1 = $request_uri = ‘/2010/09/tsukihime-doujin_part01/’</p>
<p>则 $http_host$1index.html = ‘cafeneko.info/2010/09/tsukihime-doujin_part01/index.html’</p>
<p>而 $http_host/$1/index.html = ‘cafeneko.info//2010/09/tsukihime-doujin_part01//index.html’</p>
<p>虽然在调试过程中两者并没有不同,不过为了保持正确的路径,还是省略了中间的/符号.</p>
<p>最后上例rewrite后的url = ‘cafeneko.info/wp-content/cache/supercache/cafeneko.info/2010/09/tsukihime-doujin_part01/index.html’</p>
<p>if (-f $document_root$supercache_file) {<br />
rewrite ^(.*)$ $supercache_file break;<br />
}</p>
<p>//检查cache文件是否存在,存在的话则执行rewrite,留意这里因为是rewrite到html静态文件,所以可以直接用break终止掉.</p>
<p>if (!-e $request_filename) {<br />
rewrite . /index.php last;<br />
}</p>
<p>//执行到此则说明不使用suercache,进行wordpress的permalink rewrite</p>
<p>检查请求的文件/目录是否存在,如果不存在则条件成立, rewrite到index.php</p>
<p>顺便说一句,当时这里这句rewrite看的我百思不得其解. .</p>
<p>只能匹配一个字符啊?这是什么意思?</p>
<p>一般情况下,想调试nginx rewrite最简单的方法就是把flag写成redirect,这样就能在浏览器地址栏里看到真实的rewrite地址.</p>
<p>然而对于permalink rewrite却不能用这种方法,因为一旦写成redirect以后,不管点什么链接,只要没有supercache,都是跳转回首页了.</p>
<p>后来看了一些文章才明白了rewrite的本质,其实是在保持请求地址不变的情况下,在服务器端将请求转到特定的页面.</p>
<p>乍一看supercache的性质有点像302到静态文件,所以可以用redirect调试.</p>
<p>但是permalink却是性质完全不同的rewrite,这跟wordpress的处理方式有关. 我研究不深就不多说了,简单说就是保持URL不变将请求rewrite到index.php,WP将分析其URL结构再对其并进行匹配(文章,页面,tag等),然后再构建页面. 所以其实这条rewrite</p>
<p>rewrite . /index.php last;</p>
<p>说的是,任何请求都会被rewrite到index.php.因为”.”匹配任意字符,所以这条rewrite其实可以写成任何形式的能任意命中的正则.比如说</p>
<p>rewrite . /index.php last;<br />
rewrite ^ /index.php last;<br />
rewrite .* /index.php last;</p>
<p>效果都是一样的,都能做到permalink rewrite.</p>
<p>最后要提的就是有人可能注意到我的rewrite规则是放在server块中的.网上能找到的大多数关于wordpress的nginx rewrite规则都是放在location /下面的,但是上面我却放在了server块中,为何?</p>
<p>原因是WP或某个插件会在当前页面做一个POST的XHR请求,本来没什么特别,但问题就出在其XHR请求的URL结构上.</p>
<p>正常的permalink一般为: domain.com/year/month/postname/ 或者 domain.com/tags/tagname/ 之类.</p>
<p>但这个XHR请求的URL却是 domain.com/year/month/postname/index.php 或者 domain.com/tags/tagname/index.php</p>
<p>这样一来就命中了location ~ \.php$而交给fastcgi,但因为根本没有做过rewrite其页面不可能存在,结果就是这个XHR返回一个404</p>
<p>鉴于location之间匹配优先级的原因,我将主要的rewrite功能全部放进了server区块中,这样就得以保证在进行location匹配之前是一定做过rewrite的.</p>
<p>这时有朋友又要问了,为什么命中的是location ~ \.php$而不是location / ?</p>
<p>…望天…长叹…这就要扯到天杀的location匹配问题了….</p>
<p>locatoin并非像rewrite那样逐条执行,而是有着匹配优先级的,当一条请求同时满足几个location的匹配时,其只会选择其一的配置执行.</p>
<p>其寻找的方法为:</p>
<p>1. 首先寻找所有的常量匹配,如location /, location /av/, 以相对路径自左向右匹配,匹配长度最高的会被使用,<br />
2. 然后按照配置文件中出现的顺序依次测试正则表达式,如 location ~ download\/$, location ~* \.wtf, 第一个匹配会被使用<br />
3. 如果没有匹配的正则,则使用之前的常量匹配</p>
<p>而下面几种方法当匹配时会立即终止其他location的尝试</p>
<p>1. = 完全匹配,location = /download/<br />
2. ^~ 终止正则测试,如location ^~ /download/ 如果这条是最长匹配,则终止正则测试,这个符号只能匹配常量<br />
3. 在没有=或者^~的情况下,如果常量完全匹配,也会立即终止测试,比如请求为 /download/ 会完全命中location /download/而不继续其他的正则测试</p>
<p>总结:</p>
<p>1. 如果完全匹配(不管有没有=),尝试会立即终止<br />
2. 以最长匹配测试各个常量,如果常量匹配并有 ^~, 尝试会终止<br />
3. 按在配置文件中出现的顺序测试各个正则表达式<br />
4. 如果第3步有命中,则使用其匹配location,否则使用第2步的location</p>
<p>另外还可以定义一种特殊的named location,以@开头,如location @thisissparta 不过这种location定义不用于一般的处理,而是专门用于try_file, error_page的处理,这里不再深入.</p>
<p>晕了没? 用前文的例子来看看</p>
<p>location  = / {<br />
&#8230;.配置A<br />
}</p>
<p>location  / {<br />
&#8230;.配置B<br />
}</p>
<p>location ^~ /images/ {<br />
&#8230;.配置C<br />
}</p>
<p>location ~* \.(gif|jpg|jpeg)$ {<br />
&#8230;.配置D<br />
}</p>
<p>访问 / 会使用配置A -&gt; 完全命中<br />
访问 /documents/document.html 会使用配置B -&gt; 匹配常量B,不匹配正则C和D,所以用B<br />
访问 /images/1.gif 会使用配置C -&gt; 匹配常量B,匹配正则C,使用首个命中的正则,所以用C<br />
访问 /documents/1.jpg 会使用配置D -&gt; 匹配常量B,不匹配正则C,匹配正则D,使用首个命中的正则,所以用D</p>
<p>那么再回头看我们刚才说的问题.为什么那个URL结果奇怪的XHR请求会命中location ~ \.php$而不是location / ? 我相信你应该已经知道答案了.</p>
<p>所以要解决这个问题最简单的方法就是把rewrite规则放在比location先执行的server块里面就可以了哟.</p>
<p>这次的研究笔记就到此为止了.</p>
<p>最后留一个思考题,如果不将rewrite规则放入server块,还有什么方法可以解决这个XHR 404的问题?</p>
<p>原来的location /块包含从location ~ \.php$到root为止的部分.</p>
<p>答案是存在的.在用使用目前的方法前我死脑筋的在保留location /的前提下尝试了很多种方法…请不要尝试为各种permalink构建独立的location.因为wp的permalink种类很多,包括单篇文章,页面,分类,tag,作者,存档等等..欢迎在回复中讨论 /</p>
<p>参考: Nginx wiki</p>
<p>更新  @2010.10.23</p>
<p>之前的supercache rewrite规则适用于大部分的WP.但是并不适用于mobile press插件的移动设备支持.</p>
<p>因为其中并没有检测移动设备的user agent,从而导致移动设备也会被rewrite到cache上.这样的结果是在移动设备上也是看到的跟PC一样的完全版blog. 对于性能比较好的手机比如iphone安卓什么的大概没什么问题,但比较一般的比如nokia上用opera mini等看就会比较辛苦了,这次把supercache原本在htaccess中的移动设备检测的代码块也移植了过来.</p>
<p>在前文的配置文件中cookie检测后面加入以下代码段</p>
<p># Bypass special user agent<br />
if ($http_user_agent ~* “2.0 MMP|240&#215;320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo Wii|Nitro|Nokia|Opera Mini|Palm|PlayStation Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915 Obigo|LGE VX|webOS|Nokia5800&#8243;) {<br />
set $supercache_uri ”;<br />
}</p>
<p>if ($http_user_agent ~* “w3c |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-”) {<br />
set $supercache_uri ”;<br />
}</p>
<p>这样就可以对移动设备绕开cache规则,而直接使用mobile press产生的移动版的效果了.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/329/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress开启gzip压缩方法</title>
		<link>http://www.billy.net.cn/index.php/archives/325</link>
		<comments>http://www.billy.net.cn/index.php/archives/325#comments</comments>
		<pubDate>Wed, 06 Jul 2011 20:41:30 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=325</guid>
		<description><![CDATA[前阵子换了服务器后发现流量飞增，自己当时也没想到是没有开启gzip的原因，因为上个服务器默认开启了，当自己想到的时候从后台登录cpanel 一看，晕，竟然没有那个优化网站的选项，google之，发现网上介绍的方法也很多，有改php.ini的，有改.htaccess的，呃，方法很多，奶 牛也测试了一些，最后，种种原因，木有成功，不是主页不正常显示就是内部错误，这个方法毕竟都是有适应环境的，所以嘛，嘻嘻，不解释。 今天放一个奶牛测试成功了的方法，这个方法针对wordpress博客哦，操作很简单，只要在博客根目录下的index.php文件中加入一行代码就可以了。 找到根目录下的index.php文件中的 define('WP_USE_THEMES', true); 注意，这里的index.php文件是根目录下的，不是主题目录下的哦~ 将上面代码的后面添加一行 ob_start('ob_gzhandler'); 就可以了，保存退出，上传文件。然后从http://tool.chinaz.com/Gzips/等类似网站就可以查询自己的网站是否开启了gzip，嘻嘻，去试试吧~~~开启gzip可以压缩网页传输的文件，加快网站的载入速度，挺不错滴~]]></description>
			<content:encoded><![CDATA[<blockquote><p><span style="font-size: small;">前阵子换了服务器后发现流量飞增，自己当时也没想到是没有开启gzip的原因，因为上个服务器默认开启了，当自己想到的时候从后台登录cpanel 一看，晕，竟然没有那个优化网站的选项，google之，发现网上介绍的方法也很多，有改php.ini的，有改.htaccess的，呃，方法很多，奶 牛也测试了一些，最后，种种原因，木有成功，不是主页不正常显示就是内部错误，这个方法毕竟都是有适应环境的，所以嘛，嘻嘻，不解释。</span></p>
<p><span style="font-size: small;">今天放一个奶牛测试成功了的方法，这个方法针对wordpress博客哦，操作很简单，只要在博客根目录下的index.php文件中加入一行代码就可以了。</span></p>
<p><span style="font-size: small;">找到根目录下的index.php文件中的</span></p>
<pre><span style="font-size: small;">define('WP_USE_THEMES', true);</span></pre>
<p><span style="font-size: small;"><span id="more-325"></span></span></p>
<pre></pre>
<p><span style="font-size: small;">注意，这里的index.php文件是根目录下的，不是主题目录下的哦~</span></p>
<p><span style="font-size: small;">将上面代码的后面添加一行</span></p>
<pre><span style="font-size: small;">ob_start('ob_gzhandler');</span></pre>
<p><span style="font-size: small;">就可以了，保存退出，上传文件。然后从http://tool.chinaz.com/Gzips/等类似网站就可以查询自己的网站是否开启了gzip，嘻嘻，去试试吧~~~开启gzip可以压缩网页传输的文件，加快网站的载入速度，挺不错滴~</span></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/325/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>startssl免费申请SSL证书教程</title>
		<link>http://www.billy.net.cn/index.php/archives/314</link>
		<comments>http://www.billy.net.cn/index.php/archives/314#comments</comments>
		<pubDate>Tue, 28 Jun 2011 05:48:56 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[nginx 相关]]></category>
		<category><![CDATA[VPS 服务器]]></category>
		<category><![CDATA[Web 服务器]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[startssl]]></category>
		<category><![CDATA[免费]]></category>
		<category><![CDATA[教程]]></category>
		<category><![CDATA[申请]]></category>
		<category><![CDATA[证书]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=314</guid>
		<description><![CDATA[1、首先进入startssl证书申请网址进入后，第一个介绍就是StartSSL™ Free，我们点击NO kidding 100% FREE进入申请网址！敬告：最好使用IE申请！但IE6下可能页面显示有问题！ Just Shot Store 2、进入后为自动登陆，申请账户，快速获取证书！我们点击Express Lane，进入快速申请！ 3、进入新注册页面，注意：所有信息都必须填写，而且地址要写详细，您可以提供真实的信息，或者编写的，但必须按照他的要求填写，以英文地址填写方法填写（示例只是为了演示）！注册后需要等待审核通过。 4、如果审核通过，你会在你注册的时候的邮箱内收到一封内容类似于下面的邮件，你按链接点过去，照提示一步一步就可以在你浏览器上安装一个证书了，这个证 书用于登录startssl网站，Startssl官网不是通过邮箱和密码登陆的， 只提供证书登陆，所以如果你丢了证书，那只能重新注册用户了。 5、当认证通过后，就可以看到下面的界面了，我们先做验证向导，点击Validations Wizard 选择Domain name validation 然后继续，选择您的域名，注意：不要输入WWW，后缀需要选择！<a href="http://www.billy.net.cn/index.php/archives/314" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p><span><span style="font-family: Simsun;"><span style="font-size: small;">1、首先进入<span style="color: #284c6f;"><a href="http://wgphb.com/php/r.php?url=http%3A%2F%2Fwww.startssl.com%2F%3Fapp%3D39" target="_blank">startssl证书申请网址</a></span>进入后，第一个介绍就是StartSSL™ Free，我们点击NO kidding 100% FREE进入申请网址！敬告：最好使用IE申请！但IE6下可能页面显示有问题！<span id="more-314"></span></span></span></span></p>
<p><span><span style="font-family: Simsun;"><span style="font-size: small;"><a href="http://www.jssharp.com" target="_blank">Just Shot Store</a><br />
</span></span></span></p>
<p><img src="http://chlefa.blu.livefilestore.com/y1pArD914SjcOd62Da8b9ozT_n8NJeeJ5t2uL4-mcaFqUTPQPtCJpvh1YSQxJOjbi6Xd0dgIndcWnPujgT3oMr_2hrQMkIz7UEE/startsslfree.JPG?psid=1" border="0" alt="" width="546" height="350" /><br />
2、进入后为自动登陆，申请账户，快速获取证书！我们点击<strong>Express Lane</strong>，进入快速申请！<br />
<img src="http://chlefa.blu.livefilestore.com/y1pDWqIcfdbWJHizPQz0sRDfgkFDJFEilFQTmJAIgAim8cMsfI9FF-_li8lSObVOj5ZvE1zobciUOTGBzoMbxzYcpJxrQNSV2L0/startauth.JPG?psid=1" border="0" alt="" width="534" height="450" /><br />
3、进入新注册页面，注意：所有信息都必须填写，而且地址要写详细，您可以提供真实的信息，或者编写的，但必须按照他的要求填写，以英文地址填写方法填写（示例只是为了演示）！注册后需要等待审核通过。<br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021590.jpg" alt="" width="600" height="374" /><br />
4、如果审核通过，你会在你注册的时候的邮箱内收到一封内容类似于下面的邮件，你按链接点过去，照提示一步一步就可以在你浏览器上安装一个证书了，这个证 书用于登录startssl网站，Startssl官网不是通过邮箱和密码登陆的， 只提供证书登陆，所以如果你丢了证书，那只能重新注册用户了。<br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021591.jpg" alt="" width="600" height="336" /><br />
5、当认证通过后，就可以看到下面的界面了，我们先做验证向导，点击Validations Wizard 选择Domain name validation 然后继续，选择您的域名，注意：不要输入WWW，后缀需要选择！<img src="http://www.chinaz.com/upimg/allimg/101111/1021592.jpg" alt="" width="600" height="234" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021593.jpg" alt="" width="600" height="224" /><br />
6、输入完网址后，需要验证网站所有者，主要向邮箱发送验证信息，验证邮箱前缀为postmaster@您的域名，hostmaster@您的域名，webmaster@您的域名，以及您注册域名时填写的邮箱<br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021594.jpg" alt="" width="600" height="287" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021595.jpg" alt="" width="600" height="204" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021596.jpg" alt="" width="600" height="225" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021597.jpg" alt="" width="600" height="217" /><br />
7、验证添加完域名后，开始申请SSL证书！点击左上角的CertificatesWizard选择WEB Server SSL/TSL Certifites！<br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021598.jpg" alt="" width="600" height="246" /><br />
8、接着您需要输入个人密钥，最少需要10位数，最大为32位数，必须为数字以及字母，不允许有符号，最好数字和字母混合！keysize最好为 2048，因为一般Cpanel控制面板支持2048，不支持4096大小！点击Continue后系统开始生成密钥，这个过程可能有点长，生成完毕后， 记得一定要按提示保存好那个私钥文件，否则到后面证书文件得到了，私钥文件丢了，就没法在做认证了。<br />
<img src="http://www.chinaz.com/upimg/allimg/101111/1021599.jpg" alt="" width="600" height="266" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/10215910.jpg" alt="" width="600" height="340" /><br />
9、生成完个人密钥后，您需要选择域名以及子域名，我们在里面填写WWW即可，您也可以选择其他子域名！然后开始生成公钥，这个过程也有点长，生成后的公钥您需要将其保存！</p>
<p><img src="http://www.chinaz.com/upimg/allimg/101111/10215911.jpg" alt="" width="600" height="220" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/10215912.jpg" alt="" width="600" height="251" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/10215913.jpg" alt="" width="600" height="179" /><br />
<img src="http://www.chinaz.com/upimg/allimg/101111/10215914.jpg" alt="" width="600" height="193" /></p>
<p><img src="http://www.chinaz.com/upimg/allimg/101111/10215916.jpg" alt="" width="600" height="308" /></p>
<p>10、下面就等待几个小时，去邮箱看看刚申请的域名https证书是否成功得到了，如果得到了，就去下载证书文件就是了，相应步骤如下。<br />
<img src="http://www.chinaz.com/upimg/allimg/101111/10215915.jpg" alt="" width="600" height="322" /></p>
<p>11、Startssl SSL证书就算申请好了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/314/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vps lnmp 环境下 wordpress 多站功能启用</title>
		<link>http://www.billy.net.cn/index.php/archives/311</link>
		<comments>http://www.billy.net.cn/index.php/archives/311#comments</comments>
		<pubDate>Tue, 28 Jun 2011 01:26:57 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[lnmp]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[功能]]></category>
		<category><![CDATA[启用]]></category>
		<category><![CDATA[多站]]></category>
		<category><![CDATA[环境]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=311</guid>
		<description><![CDATA[首先从官网 wordpress.org 下载最新安装包解压缩： 1、推荐先备份一下数据库，以防万一； 2、从后台停用一切插件； 3、将wp-admin和wp-includes上传至 wordpress 安装目录，可以完全覆盖，也可以删除这两个文件夹再上传； 4、将解压包根目录下除wp-config.php外的所有文件覆盖到服务器上wordpress根目录。切记别覆盖wp-config.php，这个里边是你的数据库等信息。否则会没有办法升级。 完成后直接在浏览器输入http://你的域名/wp-admin/upgrade.php进行升级吧，如果没有意外会很顺利的完成。 其实wordpress3.0最引人注目的是多站点功能，这样可以解决爱好者无需在服务器上安装多个wp以实现多博客的问题。 第一步：编辑配置文件 编辑根目录的 wp-config.php 文件，找到以下代码： define ('WPLANG', 'zh_CN'); 在其之后添加以下代码： define('WP_ALLOW_MULTISITE',<a href="http://www.billy.net.cn/index.php/archives/311" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>首先从官网 wordpress.org 下载最新安装包解压缩：</p>
<p>1、推荐先备份一下数据库，以防万一；</p>
<p>2、从后台停用一切插件；</p>
<p>3、将wp-admin和wp-includes上传至 wordpress 安装目录，可以完全覆盖，也可以删除这两个文件夹再上传；</p>
<p>4、将解压包根目录下除wp-config.php外的所有文件覆盖到服务器上wordpress根目录。切记别覆盖wp-config.php，这个里边是你的数据库等信息。否则会没有办法升级。<span id="more-311"></span></p>
<p>完成后直接在浏览器输入http://你的域名/wp-admin/upgrade.php进行升级吧，如果没有意外会很顺利的完成。</p>
<p>其实wordpress3.0最引人注目的是多站点功能，这样可以解决爱好者无需在服务器上安装多个wp以实现多博客的问题。</p>
<p>第一步：编辑配置文件</p>
<p>编辑根目录的 wp-config.php 文件，找到以下代码：</p>
<pre>define ('WPLANG', 'zh_CN');</pre>
<p>在其之后添加以下代码：</p>
<pre>define('WP_ALLOW_MULTISITE', true);</pre>
<p>这个时候刷新后台页面，工具菜单中已经有网络 (Network) 选项。</p>
<p>第二步：停用插件</p>
<p>为了顺利设置多站点功能，需要暂停所有已安装旧插件，可以在操作完成后重新开启。</p>
<p>第三步：创建文件夹</p>
<p>通过 FTP 或者其他方式在 wp-content 目录下创建 blogs.dir 目录，属性为 777 模式。这个目录用于存储子站点上传的媒体文件。</p>
<p>第四步：追加配置代码</p>
<p>刷新管理页面，点击工具菜单中的网络 (Network) 选项卡，系统会自动生成需要追加的代码片段。其中和 wp-config.php 相关的有两段代码。首先在后添加以下代码：</p>
<pre>define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
$base = '/'; //基准 URL
define( 'DOMAIN_CURRENT_SITE', 'www.yourname.com' ); //请将 www.yourname.com 替换为主站域名
define( 'PATH_CURRENT_SITE', '/' ); //当前博客路径
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );</pre>
<p>为了保证站点安全，需要接着添加以下代码尾随其后：</p>
<pre>define( 'AUTH_SALT', '...' );
define( 'SECURE_AUTH_SALT', '...' );
define( 'LOGGED_IN_SALT', '...' );
define( 'NONCE_SALT', '...' );</pre>
<p>这两段代码每个博客都不一样，请直接从后台提示页面拷贝。</p>
<p>第五步：修改Rewrite 规则，加入以下代码：</p>
<p>server_name_in_redirect off;</p>
<p>port_in_redirect off;</p>
<p>rewrite ^.*/files/(.*) /wp-content/blogs.php?file=$1;</p>
<p>if (!-e $request_filename) {</p>
<p>rewrite ^.+?(/wp-.*) $1 last;</p>
<p>rewrite ^.+?(/.*\.php)$ $1 last;</p>
<p>rewrite ^ /index.php last;</p>
<p>}</p>
<p>OK,完工。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/311/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPS主机LNMP环境下解决wordpress自动更新提示FTP</title>
		<link>http://www.billy.net.cn/index.php/archives/302</link>
		<comments>http://www.billy.net.cn/index.php/archives/302#comments</comments>
		<pubDate>Tue, 28 Jun 2011 01:00:07 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[lnmp]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[主机]]></category>
		<category><![CDATA[提示]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[自动]]></category>
		<category><![CDATA[解决]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=302</guid>
		<description><![CDATA[本博客用的是美国VPS，自己装的LNMP环境，但是在wordpress后台自动更新的时候，一直提示要填FTP信息。但是自己没有装SFTP。感觉没必要用 Winscp就挺好的。 其实这是因为安装LNMP时，不是用的WWW用户安装的原因。用chown修改下文件权限就可以了 chown -R www /home/wwwroot 把目录下wwwroot所有文件和文件夹的所有者改成叫做www的用户。经测试，wordpress可以顺利的自动升级了。]]></description>
			<content:encoded><![CDATA[<p>本博客用的是美国VPS，自己装的LNMP环境，但是在wordpress后台自动更新的时候，一直提示要填FTP信息。但是自己没有装SFTP。感觉没必要用 Winscp就挺好的。<br />
其实这是因为安装LNMP时，不是用的WWW用户安装的原因。用chown修改下文件权限就可以了</p>
<p>chown -R www /home/wwwroot</p>
<p>把目录下wwwroot所有文件和文件夹的所有者改成叫做www的用户。经测试，wordpress可以顺利的自动升级了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/302/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 5 已经在用了，Firefox 6新特性预览</title>
		<link>http://www.billy.net.cn/index.php/archives/300</link>
		<comments>http://www.billy.net.cn/index.php/archives/300#comments</comments>
		<pubDate>Mon, 27 Jun 2011 15:12:15 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[电脑资讯]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[6]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[新]]></category>
		<category><![CDATA[特性]]></category>
		<category><![CDATA[预览]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=300</guid>
		<description><![CDATA[Firefox 5这次终于没有跳票，如期发布了，这个版本新增了一些特性，值得前端开发人员关注。同时，Mozilla之前放出了Firefox6会支持的一些特性，我们在此一起了解下。 Firefox 6 新特性： 支持progress元素； 增加window.machMedia()方法以匹配CSS3的媒体查询； 二进制数据API增强，包括XHR2和FileReader等； WebSockets回归； CSS text-decoration支持 -moz-text-decoration-color,-moz-text-decoration-line和-moz-text-decoration-style子属性； 在交互的tab中，setTimeout和setInterval会延迟更多； onhashchange时间新增newURL和oldURL属性； 实现了beforeprint和afterprint事件； 事件新增defaultPrevented属性，以判断event.preventDefault()方法是否被调用； element.dataset属性可以用来获取或者修改HTML元素的”data-”前缀属性； DOM3 CustomEvent规范实现； 清除浏览器cookie的时候也会清掉Flash的cookie。<a href="http://www.billy.net.cn/index.php/archives/300" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>Firefox 5这次终于没有跳票，如期发布了，这个版本新增了一些特性，值得前端开发人员关注。同时，Mozilla之前放出了Firefox6会支持的一些特性，我们在此一起了解下。<span id="more-300"></span></p>
<h2>Firefox 6 新特性：</h2>
<ol>
<li>支持progress元素；</li>
<li>增加window.machMedia()方法以匹配CSS3的媒体查询；</li>
<li>二进制数据API增强，包括XHR2和FileReader等；</li>
<li>WebSockets回归；</li>
<li>CSS text-decoration支持 -moz-text-decoration-color,-moz-text-decoration-line和-moz-text-decoration-style子属性；</li>
<li>在交互的tab中，setTimeout和setInterval会延迟更多；</li>
<li>onhashchange时间新增newURL和oldURL属性；</li>
<li>实现了beforeprint和afterprint事件；</li>
<li>事件新增defaultPrevented属性，以判断event.preventDefault()方法是否被调用；</li>
<li>element.dataset属性可以用来获取或者修改HTML元素的”data-”前缀属性；</li>
<li>DOM3 CustomEvent规范实现；</li>
<li>清除浏览器cookie的时候也会清掉Flash的cookie。</li>
</ol>
<p>当然，Firefox6最终可能会有变数，这里仅供参考。更多内容可以查</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/300/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 火狐 5 十大新功能</title>
		<link>http://www.billy.net.cn/index.php/archives/286</link>
		<comments>http://www.billy.net.cn/index.php/archives/286#comments</comments>
		<pubDate>Mon, 27 Jun 2011 15:02:48 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[十大]]></category>
		<category><![CDATA[新功能]]></category>
		<category><![CDATA[火狐]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=286</guid>
		<description><![CDATA[&#160; 据国外媒体报道，在我们享受Firefox 4新功能的时候，Mozilla已经准备在6月21日发布Firefox 5。 根据Mozilla的计划，Firefox浏览器的开发速度将提速。此举与Google对Chrome浏览器的做法相似，以此可在数月内推出一个新版Firefox浏览器，而Mozilla以前只能每两年推出一版Firefox。 下面，让我们来看下Firefox 5将添加的新功能： 任务栏网站固定 &#160; &#160; IE9最好的功能之一是任务栏网站固定，Firefox 5似乎也将添加类似的功能。新功能意味着用户可以把喜爱网站添加到任务栏，需要时可以从任务栏直接打开网站。 固定图标功能选项 &#160; &#160; 除了网站固定功能，Firefox任务栏固定图标还可以显示一些功能选项。例如，Facebook固定图标可以显示信息提示和朋友状态更新等。 多彩搜索栏 &#160; &#160; 搜索引擎配色方案可以让用户迅速区分不同的搜索工具，用户可以根据自己的需要方便地选择搜索引擎。<a href="http://www.billy.net.cn/index.php/archives/286" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>据国外媒体报道，在我们享受Firefox 4新功能的时候，Mozilla已经准备在6月21日发布Firefox 5。</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150251gfC.jpg" border="0" alt="" width="324" height="244" /></p>
<p><span id="more-286"></span></p>
<p>根据Mozilla的计划，Firefox浏览器的开发速度将提速。此举与Google对Chrome浏览器的做法相似，以此可在数月内推出一个新版Firefox浏览器，而Mozilla以前只能每两年推出一版Firefox。</p>
<p>下面，让我们来看下Firefox 5将添加的新功能：</p>
<p><strong>任务栏网站固定</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150301vRB.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>IE9最好的功能之一是任务栏网站固定，Firefox 5似乎也将添加类似的功能。新功能意味着用户可以把喜爱网站添加到任务栏，需要时可以从任务栏直接打开网站。</p>
<p><strong>固定图标功能选项</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150302rSY.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>除了网站固定功能，Firefox任务栏固定图标还可以显示一些功能选项。例如，Facebook固定图标可以显示信息提示和朋友状态更新等。</p>
<p><strong>多彩搜索栏</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150304ojn.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>搜索引擎配色方案可以让用户迅速区分不同的搜索工具，用户可以根据自己的需要方便地选择搜索引擎。</p>
<p><strong>新的同步功能</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/1503059ek.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>Mozilla已经意识到同步功能的重要性，Firefox 5的同步功能将进一步得以改进。对于用户而言，出色的同步功能可以极大地方便跨平台使用浏览器。</p>
<p><strong>插件更新</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/1503065aH.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>插件是Firefox浏览器的一大特色，但新版Firefox在插件更新和兼容方面还存在困难。从上图可以看出，Mozilla将允许Firefox用户统一升级浏览器插件。</p>
<div>
<p><strong>移除主按钮</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150307DIW.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>据科技博客Conceivably Tech报道，Mozilla可能会移除主按钮，转而使用一个小的主标签页。</p>
<p><strong>PDF</strong><strong>阅读器</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150308OSS.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>Firefox 5还将兼容更多的文件格式。科技博客Conceivably Tech称，　Firefox 5将内置PDF阅读器，并且支持MP3等流行文件格式。</p>
<p><strong>多帐户登录</strong><strong> </strong></p>
<p>&nbsp;</p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150309gEQ.jpg" border="0" alt="" /></p>
<p>&nbsp;</p>
<p>科技博客Conceivably Tech还报道，Firefox 5将内置一个身份管理器，记录用户的网站登录信息，设置还允许用户使用不同帐户同时登录一个网站。</p>
<p><strong>社会化共享</strong><strong> </strong></p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/1503113Zp.jpg" border="0" alt="" /></p>
<p>地址栏新增一个社会化共享图标，用户通过该图标可以在Facebook, Twitter和Digg等社交网站共享信息。</p>
<p><strong>文件上传指示器</strong><strong> </strong></p>
<p><img src="http://www.billy.net.cn/wp-content/uploads/images/2011/06/150312Nd7.jpg" border="0" alt="" /></p>
<p>当用户上传文件到网站时，Firefox 5会弹出一个小的状态栏。</p>
<p>转自：http://news.newhua.com/news/2011/0412/119834.shtml</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/286/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修改 Prestashop 1.3/1.4 footer 的 Powered By Prestashop 链接</title>
		<link>http://www.billy.net.cn/index.php/archives/277</link>
		<comments>http://www.billy.net.cn/index.php/archives/277#comments</comments>
		<pubDate>Mon, 27 Jun 2011 14:42:48 +0000</pubDate>
		<dc:creator>billy</dc:creator>
				<category><![CDATA[Prestashop]]></category>
		<category><![CDATA[1.3]]></category>
		<category><![CDATA[1.4]]></category>
		<category><![CDATA[footer]]></category>
		<category><![CDATA[Powered By Prestashop]]></category>
		<category><![CDATA[修改]]></category>
		<category><![CDATA[链接]]></category>

		<guid isPermaLink="false">http://www.billy.net.cn/?p=277</guid>
		<description><![CDATA[修改 Powered By Prestashop 步骤： 1.到Prestashop 的 “modules” 文件夹，进入 “blockvariouslinks”,然后开始修改文件 prestashop 1.3 修改： prestashop/yourtheme/modules/blockvariouslinks/blockvariouslinks.tpl 如果是 prestashop 1.4 修改： prestashop/yourtheme/modules/blockcms/blockcms.tpl 2.<a href="http://www.billy.net.cn/index.php/archives/277" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
			<content:encoded><![CDATA[<p>修改 Powered By Prestashop 步骤：</p>
<p>1.到Prestashop 的 “modules” 文件夹，进入 “blockvariouslinks”,然后开始修改文件</p>
<p>prestashop 1.3 修改：</p>
<p>prestashop/yourtheme/modules/blockvariouslinks/blockvariouslinks.tpl<span id="more-277"></span></p>
<p>如果是 prestashop 1.4 修改：</p>
<p>prestashop/yourtheme/modules/blockcms/blockcms.tpl</p>
<p>2. 如果你的模板文件夹里没有 “modules” 文件夹，那么你可以修改这个文件：</p>
<p>prestashop/modules/blockvariouslinks/blockvariouslinks.tpl</p>
<p>3. 你可以修改或去除 ” Powered by Prestashop” 标记。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.billy.net.cn/index.php/archives/277/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

