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模块,因为他驻在了内存里,访问速度很快,就不需要你在磁盘上找个图片了~只是这个图片是透明的·呵呵但是你达到你不需要别人能看到你的错误了。
在看博客访问明细的时候发现有人直接用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的漏洞,而是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 的环境,安装上了 phpmyadmin,发生了错误。找了好久原因,才找到,因为自己的大意,才会成这样,错误如下: phpMyAdmin – 错误 无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。 当时看到这个错误,第一感觉 mysql 没有起来吗?检查起来了,然后检查 mysql.sock 的路径与php 的路径,也没有问题。 随后想到,也许是php没有编译好吗?创建一个 phpinfo(); ,访问没有问题,那好,那就看看 info 哪里有问题,看了一圈没发现什么问题,php.ini 加载路径没错。 最后看看 phpmyamdin 的配置文件吧。看到他要建立 session。然后去 session 保存目录看一下。问题就找到了。。我的 php-fpm 设置的 session 保存目录是 /home/www/sessions, 我创建的目录是 /home/www/session 少了一个 s 大家也要注意权限。要给 php-fpm 写的权限。 PS:以后配置环境的时候一定要细心。。一个问题纠缠了我 2个多小时,很是郁闷。
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+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 rewrite 的时候遇到一个问题,就是访问服务器的是时候提示 No input file specified.访问PHP,访问php就没有事,可以正常访问。猜想可能是php-cgi的问题吧,google 了一下,果然问题出现在这里。
网上提供的解决方法:
1、 php.ini(/usr/local/php/etc/php.ini)的配置中这两项
cgi.fix_pathinfo=1 (这个是自己添加的)
doc_root=
2、nginx配置文件/usr/local/nginx/conf/nginx.conf 中注意以下部分
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/www.abc.com/$fastcgi_script_name;
include fastcgi_params;
}
红字部分是虚拟主机的根目录。然后重启 php-fpm 和nginx
我只实践了第二种方法,方法如下:
早就看到nginx wiki 有提到 proxy_cache,由于一直没有看到大家对他报有身好评,所以一直也没有做测试,今天闲下来,开了两个虚拟机测试了一下,效果不错,后期准备实战一下。
Nginx proxy_cache 缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302这样的非 200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx 模块,可以清除指定URL的缓存。
测试环境:
www.nginxs.com nginx-proxy_cache
192.168.6.188 nginx
1. 下载编译安装 nginx
Wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.02.tar.bz2
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
wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
Tar zxvf ngx_cache_purge-1.0.tar.gz
刚买的 VPS 因为内存太小,所以各个方面都要优化!mysql 用的 mysqlnd 方式连接。
参考文章:www.s135.com
本人VPS系统 :ubuntu-server-9.04
安装步骤:
(系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为ubuntu-server)
一、获取相关开源程序:
1、【适用ubuntu操作系统】利用ubuntu Linux系统自带的apt-get命令安装、升级所需的程序库:
apt-get install build-essential autoconf automake libtool libjpeg62-dev libpng12-dev libfreetype6-dev libxml2-dev libbz2-dev libncurses5-dev libcurl4-openssl-dev curl openssl bison libsasl2-dev
2、下载程序源码包:
①、从软件的官方网站下载:
cd /home
wget http://sysoev.ru/nginx/nginx-0.8.34.tar.gz
近期评论