LKSRTL99X 失效
iap99d 失效
lks99d 失效
gofay001 失效
cjc99FWX2 失效
98CENTS 失效
unlocked
gofac012
cjc99d
gofac085 注册、转移
LKSRTL99X 失效
iap99d 失效
lks99d 失效
gofay001 失效
cjc99FWX2 失效
98CENTS 失效
unlocked
gofac012
cjc99d
gofac085 注册、转移
原来博客使用的是BuyVM的VPS服务,Lin128 128M内存;Brust 256M;HD 15G;Traffic:500G;系统使用过的是Debian,官方的价格是95RMB/年;
购买了BuyVM大概用了六个月的时间,本来打算长期使用,但是前几天收到邮件,服务商要将原来圣何塞的机房搬迁到拉斯维加斯,虽然速度和原来差不多,自认为无法接受。我的VPS上面只跑了一个BLOG再加上平时使用SSH科学上网看看新闻之类的,对vps的配置要求不大,500G/月的流量根本用不完,平均每个月能用到5G左右吧。。 但是自从升级Wordpress到3.5后,发现128M内存经常报502错误,只好寻找新的廉价VPS。
在接下来的时间里开始寻找低价位、低配置、高质量的VPS服务商,其实有三个在我的选择范围之类,分别是:hostigation,burst,BargainVM
hostigation :
OVZ-512 512/1024 50GB 1000 GB 1 $30/yr
Test IPv4: 206.253.164.3
Test File: http://hostigation.com/100mb.bin
Brust配置:
SolusVM/ Xen
Memory: 512MB GUARANTEED
Disk Space: 20GB (RAID BASED CONFIG)
Bandwidth: 1000GB/MONTH
IP Addresses: 2 (IPv4) + IPv6
$7.95/MONTH
BargainVM配置:
SolusVM/ Xen
Memory: 256MB GUARANTEED
Disk Space: 10GB (RAID BASED CONFIG)
Bandwidth: 100GB/MONTH
IP Addresses: 4(IPv4) + IPv6
$1/MONTH
BargainVM的最便宜应该是首选,但是对于256M内存是否能跑DirectAdmin面板保持怀疑,而我恰好有一套闲置的DircertAdmin面板。根据网络上的评价和对比,我最终选择了hostigation : OVZ-512 $30/yr 的套餐。比BuyVM便宜不少,速度还比较不错,在这20多天的使用过程中Hostigation很稳定;
BuyVM:http://buyvm.net/
Brust:http://www.burst.net/vps.shtml
Hostgatation:订购地址; 优惠码‘XMAS2012’。
BargainVM:订购地址; 优惠码‘WSO’。
IP段有/24、/25、/26、/27、/28、/29、/30 实际对应的子网掩码为:255.255.255.0 255.255.255.128 255.255.255.192 255.255.255.224 255.255.255.240 255.255.255.248 255.255.255.252
可用IP查询,IP段对应表
IP总数 子网掩码 Amount of a Class C /30 4 255.255.255.252 1/64 /29 8 255.255.255.248 1/32 /28 16 255.255.255.240 1/16 /27 32 255.255.255.224 1/8 /26 64 255.255.255.192 1/4 /24 256 255.255.255.0 1 /23 512 255.255.254.0 2 /22 1024 255.255.252.0 4 /21 2048 255.255.248.0 8 /20 4096 255.255.240.0 16 /19 8192 255.255.224.0 32 /18 16384 255.255.192.0 64 /17 32768 255.255.128.0 128 /16 65536 255.255.0.0 256
ip段/27 /29 /30 网关,子网掩码,广播地址查询
范例: 要查询204.45.116.184 /29 ,先找到下表的 /29 表格,网关 这一列找到要查询的IP最后一位即.184 ,然后就可以看到可用IP范围(注:第一个IP是Gateway网关地址 )和广播地址了。然后从上面 的表找到 子网掩码即可。
/25 -- 2 Subnets -- 126 Hosts/Subnet 网络地址Network # 可用IP范围 广播地址Broadcast .0 .1-.126 .127 .128 .129-.254 .255 /30 -- 64 Subnets -- 2 Hosts/Subnet
/30
网络地址Network # 可用IP范围 广播地址Broadcast .0 .1-.2 .3 .4 .5-.6 .7 .8 .9-.10 .11 .12 .13-.14 .15 .16 .17-.18 .19 .20 .21-.22 .23 .24 .25-.26 .27 .28 .29-.30 .31 .32 .33-.34 .35 .36 .37-.38 .39 .40 .41-.42 .43 .44 .45-.46 .47 .48 .49-.50 .51 .52 .53-.54 .55 .56 .57-.58 .59 .60 .61-.62 .63 .64 .65-.66 .67 .68 .69-.70 .71 .72 .73-.74 .75 .76 .77-.78 .79 .80 .81-.82 .83 .84 .85-.86 .87 .88 .89-.90 .91 .92 .93-.94 .95 .96 .97-.98 .99 .100 .101-.102 .103 .104 .105-.106 .107 .108 .109-.110 .111 .112 .113-.114 .115 .116 .117-.118 .119 .120 .121-.122 .123 .124 .125-.126 .127 .128 .129-.130 .131 .132 .133-.134 .135 .136 .137-.138 .139 .140 .141-.142 .143 .144 .145-.146 .147 .148 .149-.150 .151 .152 .153-.154 .155 .156 .157-.158 .159 .160 .161-.162 .163 .164 .165-.166 .167 .168 .169-.170 .171 .172 .173-.174 .175 .176 .177-.178 .179 .180 .181-.182 .183 .184 .185-.186 .187 .188 .189-.190 .191 .192 .193-.194 .195 .196 .197-.198 .199 .200 .201-.202 .203 .204 .205-.206 .207 .208 .209-.210 .211 .212 .213-.214 .215 .216 .217-.218 .219 .220 .221-.222 .223 .224 .225-.226 .227 .228 .229-.230 .231 .232 .233-.234 .235 .236 .237-.238 .239 .240 .241-.242 .243 .244 .245-.246 .247 .248 .249-.250 .251 .252 .253-.254 .255
/26 — 4 Subnets — 62 Hosts/Subnet
网络地址Network # 可用IP范围 广播地址Broadcast .0 .1-.62 .63 .64 .65-.126 .127 .128 .129-.190 .191 .192 .193-.254 .255
/27 — 8 Subnets — 30 Hosts/Subnet
网络地址Network # 可用IP范围 广播地址Broadcast .0 .1-.30 .31 .32 .33-.62 .63 .64 .65-.94 .95 .96 .97-.126 .127 .128 .129-.158 .159 .160 .161-.190 .191 .192 .193-.222 .223 .224 .225-.254 .255
/28 -- 16 Subnets -- 14 Hosts/Subnet
网络地址
Network # 可用IP
范围 广播地址
Broadcast
.0 .1-.14 .15
.16 .17-.30 .31
.32 .33-.46 .47
.48 .49-.62 .63
.64 .65-.78 .79
.80 .81-.94 .95
.96 .97-.110 .111
.112 .113-.126 .127
.128 .129-.142 .143
.144 .145-.158 .159
.160 .161-.174 .175
.176 .177-.190 .191
.192 .193-.206 .207
.208 .209-.222 .223
.224 .225-.238 .239
.240 .241-.254 .255
/29 -- 32 Subnets -- 6 Hosts/Subnet
网络地址
Network # 可用IP
范围 广播地址
Broadcast
.0 .1-.6 .7
.8 .9-.14 .15
.16 .17-.22 .23
.24 .25-.30 .31
.32 .33-.38 .39
.40 .41-.46 .47
.48 .49-.54 .55
.56 .57-.62 .63
.64 .65-.70 .71
.72 .73-.78 .79
.80 .81-.86 .87
.88 .89-.94 .95
.96 .97-.102 .103
.104 .105-.110 .111
.112 .113-.118 .119
.120 .121-.126 .127
.128 .129-.134 .135
.136 .137-.142 .143
.144 .145-.150 .151
.152 .153-.158 .159
.160 .161-.166 .167
.168 .169-.174 .175
.176 .177-.182 .183
.184 .185-.190 .191
.192 .193-.198 .199
.200 .201-.206 .207
.208 .209-.214 .215
.216 .217-.222 .223
.224 .225-.230 .231
.232 .233-.238 .239
.240 .241-.246 .247
.248 .249-.254 .255
添加伪静态:
利用nginx的配置优先级,在配置文件添加正则匹配:
location ~* \.html$ {
rewrite "^(.*)sort_([0-9]+)_([0-9]+).html$" $1sort.php?sortid=$2&page=$3 last;
rewrite "^(.*)over_([0-9]+).html$" $1over.php?page=$2 last;
rewrite "^(.*)top_(.*)_([0-9]+).html$" $1top.php?topid=$2&page=$3 last;
rewrite "^(.*)topover_(.*)_([0-9]+).html$" $1topover.php?topid=$2&page=$3 last;
rewrite "^(.*)book_([0-9]+).html$" $1book.php?bookid=$2 last;
rewrite "^(.*)down_(.*)_([0-9]+).html$" $1down.php?bookid=$3&type=$2 last;
rewrite "^(.*)readend_([0-9]+).html$" $1readend.php?bookid=$2 last;
rewrite "^(.*)read_([0-9]+)_([0-9]+).html$" $1read.php?cutid=$2&bookid=$3 last;
rewrite "^(.*)chapter_([0-9]+)_([0-9]+)_([0-9]+).html$" $1chapter.php?cutid=$2&bookid=$3&chapterid=$4 last;
}
使用nginx 有大半年了,它的高性能,稳定性表现很好。 这里也得到很多人的认可。 其中它的配置,有点像写程序一样,每行命令结尾一个”;”号,语句块用”{}”括起来。 配制好,直接nginx -t 检查配制情况,配制成功,直接运行:service nginx reload .服务器没有任何宕机情况下,实现平稳修改配置。
最近一直在做location 配制时候,遇到小麻烦,以下是个人学习一点体会。
1.location 匹配的优先级(来自实践总结中)
(location =) > (location 完整路径 >) >(location ^~ 路径) >(location ~* 正则) >(location 路径)
只要匹配到,其它的都会忽略,然后返回到改匹配。
用以下例子来测试:
#1
6 location / {
7 return 500;
8 }
9
10 #2
11 location /a/ {
12 return 404;
13 }
14
15 #3
16 location ~* \.jpg$ {
17 return 403;
18 }
19
20 #4
21 location ^~ /a/ {
22 return 402;
23 }
24
25 #5
26 location /a/1.jpg {
27 return 401;
28 }
29
30 #6
31 location = /a/1.jpg {
32 return 400;
33 }
34
说明测试时候:先要将#2全部注释掉,不然会认为#2 与#4 完全一样。会提示:重复配制
D:\nginx-0.8.7>nginx -s reload
[emerg]: duplicate location "/a/" in D:\nginx-0.8.7/conf/nginx.conf:53
首先测试:每次都是访问:http://localhost:9999/a/1.jpg (在windows 安装测试,然后端口是9999) 文件a/1.jpg 根本不存在。关键是测试看页面返回情况。
a.
400 Bad Request
——————————————————————————–
nginx/0.8.7
(图一)
从测试中可以看到,优先级最高的是:= 号。 它会最先匹配到。
b.接下来我们 屏蔽掉 #6 如下:
#6
# location = /a/1.jpg {
# return 400;
# }
然后在:D:\nginx-0.8.7> nginx -s reload 访问:http://localhost:9999/a/1.jpg
401 Authorization Required
——————————————————————————–
nginx/0.8.7
图(2-2)
注意:从这个测试 发现 :没有“=”情况下,location 后面直接接完整路径是优先匹配。 通过测试发现,如果将:location /a/1.jpg 改成:location /a/1\.jpg
会出现意外情况,直接出现是:return 402. 从这一点,可以推测到nginx 匹配优先是:网站路径,并且不带正则表达式的优先。
以上是本人通过测试,推测得到,如有问题,欢迎指正。
c.同理测试 屏蔽掉 #5 如下:注释及重新加载同上.
#5
# location /a/1.jpg {
# return 401;
# }
访问:http://localhost:9999/a/1.jpg 返回如下结果。
402 Payment Required
——————————————————————————–
nginx/0.8.7
通过这个测试可以得出:location ^~ 优先级 高于 location ~* 优先级 ,其中:^~ 主要后面接路径。
c.同理测试 屏蔽掉 #4 如下:注释及重新加载同上.
#4
# location ^~ /a/ {
# return 402;
# }
访问:http://localhost:9999/a/1.jpg 返回如下结果。
403 Forbidden
——————————————————————————–
nginx/0.8.7
从以上比较得到:正则优先 未带任何批评符 的路径匹配
d.同理测试 屏蔽掉 #3 如下:注释及重新加载同上. 并且去掉#2 的注释“#”
#2
location /a/ {
return 404;
}
访问:http://localhost:9999/a/1.jpg 返回如下结果。
404 Not Found
——————————————————————————–
nginx/0.8.7
比较有意思是:/a/ 与 / 应该是 同种类型的匹配表达式, 可以从中得到,该匹配顺序是,将路径从右匹配, 可以推测形如逐个字符,那个先匹配到,就是那个优先。 因此得到是:/a/ 优先于 / .
以上测试,是我测试结果,优先级别以以上规律。 在实际我们书写中,经常会犯错误。 还记得前段时间:80后安全团队曝nginx漏洞 其实,个人认为不能算是nginx 漏洞,只是,我们不了解nginx 配制规则,而出现一个配置上面致命漏洞而已。 其实,通过上面优先级,我们在配置时候可能也一样经常犯一个致命错误。
#以下是随便写例子,个人可能各不相同
#假设站点在:/home/www/html/目录下,所有的php 及上传文件都在这个目录下面。
location ~* \.php$ {
proxy_pass http://www.a.com;
}
location /upload/ {
alias /home/www/html/upload/;
}
而且,这个upload 目录,是静态目录,我们想法是下面所有文件是不能够执行的,包括php文件。
如果有用户访问:http://www.a.com/upload/1.css , 会直接显示该css, 但是,如果有用户访问:http://www.a.com/upload/1.php 类似文件,正如上面所说,实际匹配到:~* \.php$ 了。 upload 下面是执行了。
从这个里面,我们发现一个问题,实际没有达到我们要求。 静态目录下面的文件一样执行了。 这下比较麻烦了。 一旦出现个什么上存漏洞的,别人上存了一个php,我们还以为,我们配置是ok的。 觉得很安全,缺在不知不觉中被别人打开一扇门。
那么我们怎么样修改呢?
location ~* \.php$ {
proxy_pass http://www.a.com;
}
location ^~ /upload/ {
alias /home/www/html/upload/;
}
对,就是必须用:”^~” ,这样是不是就已经安全了呢。 如果你再访问下:http://www.a.com/upload/1.php 你会发现,这段代码源码显示出来了。 这个其实对于我们而言也是不想见到了。 一段显示源码,在各个搜索引擎,很容易通过所有特殊关键字,搜索到改文件的。
那么我们该怎么样配置安全的上存目录呢? 对,你想到了:限制允许的特殊文件类型。
改造如下:
location ~* \.php$ {
proxy_pass http://www.a.com;
}
location ^~ /upload/ {
if ($request_filename ! ~* \.(jpg|jpeg|gif|png|swf|zip|rar|txt)$) {
return 403;
}
alias /home/www/html/upload/;
}
只要不是满足上面扩展名文件,就自动提示:403 不能访问,有可以避免源代码显示。
刚才从匹配结果已经知道了,同级不带任何匹配符的,是以右为准匹配。 那么,如果都用正则表达式,以什么方式匹配呢?
测试如下:(新建配置文件,server 包含)
location ~* \.jpg$ {
return 402;
}
location ~* 1\.jpg$ {
return 403;
}
结果如下:
402 Payment Required
——————————————————————————–
nginx/0.8.7
看来是返回的是:402 上面一个呢。 按理论说,1.jpg 配置 比 .jpg 更准确,看来跟上面说的顺序不同,那它会不会是那个在前以那个匹配呢? 我们再测试下:
location ~* 1\.jpg$ {
return 403;
}
location ~* \.jpg$ {
return 402;
}
返回结果是:
403 Forbidden
——————————————————————————–
nginx/0.8.7
哈哈,恰好相反,看来我的推断是正确的,如果都是正则,都能够匹配,以配置文件出现顺序来,谁在前谁优先。 一气说了,不知道朋友你,明白我的思路吗?这样比较会很多很多,大家可以逐一测试。 熟悉location 配置,对于熟练运用,nginx 是一个必备基数。 因为,nginx 太灵活,也太流行了。上面的问题,也许朋友你,会遇到。希望对你有帮助。
最新评论