存档

文章标签 ‘nginx’

squid 缓存动态连接

2010年8月27日 eric 131 条评论

由于网站的访问量越来越大,用户播放视频,都要从web服务器拿文件,而且又是动态连接,要调用一个php-cgi进程,这样的话很浪费资源,所以要加缓存服务器。但是问题来了,squid 默认是不缓存动态页面的,google 了半天,发现很多人的文章没有一个说到正点上的。最后自己不停的做测试,看squid.conf.documented,把问题解决了,所以就记录下来,以便以后大家遇到同样的问题。好解决。

列子:

http://www.nginxs.com/nginx/Grec.php?id=eric&b.php?=aaa

首选用 curl 抓 head头。

nginx $> curl -I http://www.nginxs.com/nginx/Grec.php
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 27 Aug 2010 06:49:43 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.2.13
Set-Cookie: PHPSESSID=2d4523a7c6a5a54dbb20f64f3bc04be3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

看红字部分,然后在看 squid.conf.documented 对应的部分

#       options: override-expire
#                override-lastmod
#                reload-into-ims
#                ignore-reload
#                ignore-no-cache
#                ignore-no-store
#                ignore-must-revalidate
#                ignore-private
#                ignore-auth
#                refresh-ims
#

把 Cache-Control 的信息,squid对应有违规则 那么我们修改 squid.conf

分类: squid 标签: , ,

优化nginx+fastcgi上传

2010年8月6日 eric 162 条评论

由于公司网站的项目要用到用户上传20M左右的文件,经过测试发现,上传的时候php-fpm单个进程占用CPU利用率大而长,上传速度也不是很理想,如果是多个人上传,效果就会更糟糕。在看nginx官网网站的时候。看到nginx支持POST,原理是这样的,POST到nginx的产生一个临时文件,nginx接受到数据在转移到FastCGI,这样多了一次复制过程和内存开销,比较浪费。但是对于上传大文件来说速度有明显改善。但是光nginx支持不够,还需要php-fpm的支持。 添加这个功能需要修改nginx配置文件: http { ……. 添加如下: client_body_in_file_only clean; client_body_temp_path /dev/shm 1 2; fastcgi_param REQUEST_BODY_FILE $request_body_file; … } 最好使用内存文件系统 /dev/shm 这样减少对磁盘的读写,减少了 磁盘 I/O,这样大大的优化了NGINX上传速度。

分类: nginx 标签: , ,

nginx模块referer_module防盗链

2010年7月15日 eric 9 条评论

你的站点是不是图片、视频比较多,本身流量就很大,再有大量的盗链,很容易就把服务器击垮的,所以web站点防盗链很重要的。nginx referer_module 模块可以简单来防止盗链。

模块说明:
This module makes it possible to block access to the site with the incorrect values of line “Referer” in the request header.

Keep in mind that it is easy to spoof this header; therefore, the purpose of using of this module consists not in 100% blocking of these requests, but in the blocking of the mass flow of requests, made from typical browsers. Also, consider that the typical browser does not always provide a “Referer” header, even for correct requests.

Example

location /photos/ {
valid_referers none blocked www.mydomain.com mydomain.com;

if ($invalid_referer) {
return 403;
}
}

分类: nginx 标签: ,

nginx的404错误empty_gif用法

2010年7月13日 eric 21 条评论

nginx 的 404 403 500 502 503 错误 使用 empty_gif 来隐藏

模块说明:
ngx_http_empty_gif_module 本模块在内存中常驻了一个 1×1 的透明 GIF 图像,可以被非常快速的调用。

示例:

location = /_.gif {
empty_gif;
}

可能你需要,发生 403 错误 404 错误 502 错误,不想让别人看到错误,你可以选择用别的页面或者一张图片来显示,在你编译nginx的时候如果你没关掉ngx_http_empty_gif_module 这个模块的话,完全可以使用empty_gif模块,因为他驻在了内存里,访问速度很快,就不需要你在磁盘上找个图片了~只是这个图片是透明的·呵呵但是你达到你不需要别人能看到你的错误了。

分类: nginx 标签: ,

chkconfig添加脚本

2010年6月8日 eric 220 条评论

今天发现blog打不开了,ping了下IP,可以ping通,然后PUTTY连接到服务器,uptime发现服务器昨天18点重启过,哎,国内的VPS商真的是不能用啊,技术太差,真的想自己买几台服务器,来搞VPS出租,绝对比他们专业,不会动不动就重启,动不动就连接不上。可能是我租用的这家是用的免费版的vmware吧。好了不发牢骚了,说下重点。知道服务器重启过,发现是nginx、mysql、php-fpm没起来。上写完脚本后。我只直接用了下 chkconfig name on 没想到根本没起作用,自己大意了,说下我是如何解决的吧。

chkconfig –help
chkconfig 版本 1.3.30.1 – 版权 (C) 1997-2000 Red Hat, Inc.
在 GNU 公共许可的条款下,本软件可以被自由发行。

用法: chkconfig –list [name]
chkconfig –add
chkconfig –del

chkconfig [--level ]

分类: linux 标签: , ,

nginx server_name 设置

2010年6月1日 eric 273 条评论

在看博客访问明细的时候发现有人直接用IP 访问我的博客,看上去很不爽,有点好像站点被别人拿下的感觉,然后就在nginx官方网站看了一下,可以禁止直接IP访问,所以我就记录下。官方原文: If you do not want to process requests with undefined “Host” header lines, you may define a default server that just drops the requests: server { listen 80 default_server; server_name _; return 444; } 我加的配置: server { listen 80 default_server; server_name _; rewrite ^ http://www.nginxs.com$request_uri?; } 直接返回错误不好吧,毕竟还是想让别人来访问送IP的,呵呵!!! 随后还看到 server_name 支持 正则表达式,如果这样的话,就很容易让二级域名对应相应的目录了,做了一下测试,效果不错。 server { [...]

分类: nginx 标签: ,

转发:Nginx文件类型错误解析漏洞

2010年5月24日 eric 95 条评论

其实此漏洞并不是Nginx的漏洞,而是PHP PATH_INFO的漏洞,详见:http://bugs.php.net/bug.php?id=50852&edit=1 例如用户上传了一张照片,访问地址为http://www.domain.com/images/test.jpg,而test.jpg文件内的内容实际上是PHP代码时,通过http://www.domain.com/images/test.jpg/abc.php就能够执行该文件内的PHP代码。 网上提供的临时解决方法有:   方法①、修改php.ini,设置cgi.fix_pathinfo = 0;然后重启php-cgi。此修改会影响到使用PATH_INFO伪静态的应用,例如我以前博文的URL:http://blog.s135.com/read.php/348.htm 就不能访问了。   方法②、在nginx的配置文件添加如下内容后重启:if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}。该匹配会影响类似 http://www.domain.com/software/5.0/test.php(5.0为目录),http://www.domain.com/goto.php/phpwind 的URL访问。   方法③、对于存储图片的location{…},或虚拟主机server{…},只允许纯静态访问,不配置PHP访问。例如在金山逍遥网论坛、SNS上传的图片、附件,会传送到专门的图片、附件存储服务器集群上(pic.xoyo.com),这组服务器提供纯静态服务,无任何动态PHP配置。各大网站几乎全部进行了图片服务器分离,因此Nginx的此次漏洞对大型网站影响不大。 本人再提供一种修改nginx.conf配置文件的临时解决方法,兼容“http://blog.s135.com/demo/0day/phpinfo.php/test”的PATH_INFO伪静态,拒绝“http://blog.s135.com/demo/0day/phpinfo.jpg/test.php”的漏洞攻击: location ~* .*\.php($|/) { if ($request_filename ~* (.*)\.php) { set $php_url $1; } if (!-e $php_url.php) { return 403; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; }   也可将以下内容写在fcgi.conf文件中,便于多个虚拟主机引用: if ($request_filename ~* (.*)\.php) { set $php_url [...]

分类: nginx 标签: , ,

php-fpm with php-5.3.2 + APC

2010年5月17日 eric 109 条评论

php-fpm 现在php官方内部已经出版本了,据说以后会出现在 php core 里,如果现在安装的话,可以svn得到最新代码,我抢先为快。

至于缓存,我用的facebook 试用的apc 测试了一段时间还很,满意。

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.02.tar.bz2

wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz

wget http://pecl.php.net/get/APC-3.1.3p1.tgz
tar zxvf pcre-8.02.tar.bz2

cd pcre-8.02

./configure --enable-utf8 --enable-pcregrep-libbz2

make

make install
分类: nginx 标签: , , ,

优化centos VPS

2010年5月12日 eric 74 条评论

金钱的诱惑,一个朋友买了一台vps,受人所托,帮他优化一下系统,安装一套nginx+php+mysql的环境。他把 ssh 用户名和密码发给我后,我登录上去看了一下。这个VPS商果然很操蛋的说。人家只能远程登录,又没给人家VNC,给人家装图形界面干嘛?还装了 games真是浪费空间啊。由于本人做人和实诚,绝对好好给这位兄才好好整一下系统,优化到极致。首先把没用的删掉,没用的服务器停掉,做到最省资源。

1.删除 gnome X11 以及没用的服务

分类: linux 标签: , , ,

nginx keepalived 双机互备

2010年4月20日 eric 47 条评论

以前写过一篇,nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研究了一下该如何监控 nginx进程呢,看官方站看到了。vrrp_script 功能,但是用他的方法实在形不通,可能是我的方法不对,或者是个BUG。所以后来我自己写了个小脚本来完成工作。

环境

Server 1 : ubuntu-server 8.04.4 www.nginxs.com

Server 2 : userver-server 8.04.4 192.168.6.188

软件

Keepalived 1.1.15

nginx-0.8.35

pcre-8.02

1.分别在两台服务器上安装nginx

tar jxvf pcre-8.02.tar.bz2

cd pcre-8.02

./configure --prefix=/usr --enable-utf8 --enable-pcregrep-libbz2 --enable-pcregrep-libz

make

make install
分类: nginx 标签: , ,