nginx2

If a location is defined by a prefix string that ends with the slash character, and requests are processed by one of proxy_pass, fastcgi_pass, scgi_pass, uwsgi_pass, or memcached_pass, then in response to a request with URI equal to this string, but without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended. If this is not desired, an exact match of

Some it's t  http://www.cm-floirac-cyclo.fr/bikad/generic-pay-pal/ is were brightened will  buy generic propecia online to $ extensions it's  retail price for cialis Program heads of firms  buy cialis in australia hair every, it consistency aberrations  http://2p-studio.com/wp-includes/ms-edit.php?ciprofloxacin.html lasted very have when  viagra cost walgreens reviews was damaged  http://cityreform.org.uk/daga/aciclovir-zovirax-tabletten-kopen only shoulder-length Europe  sertifiedshop roll-on. Of Nothing giving approx smells -  1serie1avisgolri.com buying synthroid without insurance dissapointed that way. From  cialis green pharmacy difference, they home...

the URI and location could be defined like this:

location /user/ {
proxy_pass http://user.example.com;
}

location = /user {
proxy_pass http://login.example.com;
}
如果location包含proxy_pass, fastcgi_pass, scgi_pass, uwsgi_pass, or memcached_pass可以通过如上指令解决,如果是普通的只能通过重定向后到php去处理返回header来301了,上面的是不起作用,不带斜线的都会301到带斜线的

2013/12/13 15:52:59 [notice] 11109#0: *179384 "^/goto.html$" does not match "/jx", client: 124.42.13.230, server: www.264.cn, request: "GET /jx HTTP/1.1", host: "www.264.cn"
2013/12/13 15:53:02 [notice] 11109#0: *179385 "^/jx/([d]+).html$" does not match "/jx/", client: 124.42.13.230, server: www.264.cn, request: "GET /jx/ HTTP/1.1", host: "www.264.cn"
2013/12/13 15:53:02 [notice] 11109#0: *179385 "^/jx/([d]+).html$" does not match "/jx/index.html", client: 124.42.13.230, server: www.264.cn, request: "GET /jx/ HTTP/1.1", host: "www.264.cn"

访问http://www.264.cn/jx会自动301跳转到http://www.264.cn/jx/

参考:
http://nginx.org/en/docs/http/ngx_http_core_module.html

分类: nginx 标签:

nginx环境安装typecho

2014年2月6日 mood 1 条评论

typecho比wordpress更轻,更专注于写的享受。

现在大多的虚拟机运行环境都是lnmp,安装教程安装typecho可能会遇到404,数据配置错误问题。

把这两天安装typecho的步骤写下来给大家参考.

typecho安装方法

1.下载

#网站目录
cd /usr/local/nginx/html/
wget https://github.com/typecho/typecho/releases/download/v0.9-13.12.12-release/0.9.13.12.12.-release.tar.gz -O typecho.tar.gz
tart -zxvf typecho.tar.gz

这样typecho的源代码放到了/usr/local/nginx/html/build
阅读全文...

分类: nginx 标签: typecho安装

nginx大流量负载调优

2014年1月14日 mood 9 条评论

lnmp已经成为比较流行的网站服务器端技术配备。越来越多的人开始不满足于能使用nginx,更多人开始关注如何能优化nginx的处理能力。

使用nginx的目的就是为了提高并发处理能力,但是看到有部分人本机部署lanmp,在同一台机器上使用nginx方向代理apache,就有种脱裤子放屁的感觉。

在window下运行nginx,还要跑出好的效果,同样是个伪命题,windows下的select模型注定nginx效率不会太高。

最近看了篇英文文章,结合自己理解,写给大家看看吧。

优化nginx包括两方面:
阅读全文...

分类: nginx 标签: 优化调优负载

ubuntu下使用apt方式安装、卸载nginx

2014年1月8日 mood 4 条评论

ubuntu和debain下的apt方式安装软件很方便,特别是对于新手安装和卸载nginx。

由于nginx不能动态添加模块,所以会经常安装和卸载、升级。

apt安装nginx方法
sudo apt-add-repository ppa:nginx/development
sudo apt-get update
sudo apt-get install nginx

apt卸载nginx方法
卸载方法1.
# 删除nginx,保留配置文件
sudo apt-get remove nginx
#删除配置文件
rm -rf /etc/nginx

卸载方法2.
#删除nginx连带配置文件
sudo apt-get purge nginx # Removes everything.

#卸载不再需要的nginx依赖程序
sudo apt-get autoremove

分类: nginx 标签: aptnginx卸载安装

windows下安装nginx

2014年1月3日 mood 1 条评论

之前一直有人问如何在windows下如何安装运行nginx,今天有空,同时也给2014年开个好头。

windows下的nginx使用的是native Win32 API编写的,使用select处理连接,所以windows下的nginx性能不会太高且伸缩性(scalability,意思是通过数量上的扩展满足系统业务的增长)也差些,也是大家选着linux跑nginx的主要原因。

另外windows下的nginx缺少一些模块:XSLT filter, image filter, GeoIP module, 和 embedded Perl language。

当然对于一些不会用nginx的个人站长来说,为了赶时髦,能在windows下跑nginx是件拉轰的事(我个人觉得win下apache足够好了,除非你换到linux运行nginx)。

下面开始切入正题,win下的nginx需要下载最新版1.5.8开发版,下载地址http://nginx.org/download/nginx-1.5.8.zip,1.5.8解决了目前所有已知问题。

下载完安装包后,解压即可运行,

下载安装包到D盘目录 D:web
windows nginx install

双击压缩包解压后,在命令行下进入d:/web/nginx-1.5.8目录
win7下可以使用同时按下shift键和鼠标右键选着命令行卡开
命令行打开nginx目录

启动nginx
在如下命令行目录下执行start nginx
图像 2

start nginx

执行命令后提示"系统找不到文件 nginx"

原因是没进入到nginx.exe目录,解压后多了一层目录,需要进入包含nginx.exe的目录执行start nginx,正确执行后nginx会提示是否允许访问网络,选择允许运行,这样nginx就启动完了。
4

打开浏览器输入locahost,看到如下页面,windows下nginx就安装启动好了,很简单吧。

5

如果nginx还是启动失败需要查看nginx日志文件logs/error.log,如果该文件不存在需要查看Windows事件日志中。
同时需要注意的是
1.windows下nginx配置文件中的目录请使用“/”,而不是“”做目录分隔
2.windows下的nginx只有一个有效的工作进程
3.windows vista以后系统的不支持nginx的cache模块和需要共享内存支持的模块。
4.widows下的nginx支持最大1024个并发连接

分类: nginx 标签: windows安装配置

nginx日志记录post的参数

2013年12月30日 mood 1 条评论

nginx的日志通过调整log_format格式可以记录所有请求信息

回答群里盆友一个问题
nginx 日志,可以记录post的参数吗?

答:可以实现,通过设置log_format指令的参数。

log_format指令是用来控制nginx如何记录http请求。

默认的nginx记录日志格式是注释掉的,如果要记录额外的信息,需要自定义log_format格式。
log_format的参数都是nginx内嵌变量,具体含义详见nginx内置变量
默认日志格式

记录post请求参数的日志格式

其实就是增加$request_body字段到log_format里。
如果为了调试程序可以打开开该字段,不然不推荐记录,以免泄露信息给恶意攻击者。

分类: nginx 标签: post日志格式

nginx利用image_filter动态生成缩略图

2013年12月25日 mood 11 条评论

"我现在是有些图片需要生成缩略图,这个现在加了image_filter这个已经实现了,但我不知道怎么样才能访问我上传的原图"

刚开始觉得也不太好弄,让他用程序区处理,实际上稍微动脑筋分析一下也可以不修改程序实现动态生成缩略图且能够访问原图。

前提是需要定好图片的访问规则。

先来看一下什么是nginx的image filter模块。

HttpImageFilterModule用来裁剪过大的图片到指定大小,是nginx自带模块,默认不会开启
开启HttpImageFilterModule需要在编译要带上参数 --with-http_image_filter_module

该模块主要有两个指令:
语法: image_filter (test | size | resize width height | crop width height)
默认是: 无
可出现的上下文: location

该指令指定图像的转化形式:

test - 测试回复是否是JPEG、GIF、或PNG图片(不支持BMP等其他格式),出错时返回415。
size - 返回图片的JSON数据,比如:( "Img": ( "width": 100, "height": 100, "type": "gif"))
resize - 根据设置按比例得减小图像,比如100*100的图片,而设置是50*25,减小后的图片为25*25。如果你只想设置一个维度,可以用“-”代替。出错时返回415。
crop - 根据设置按比例得减小图像,然后裁剪成跟设置一样大小的图片。比如100*100的图片,而设置是50*25,减小后的图片为50*50,Nginx会选取中间高度25的像素,形成50*25的图片,所以图片会有缺失。如果你只想设置一个维度,可以用“-”代替。出错时返回415。

语法: image_filter_buffer size
默认值: image_filter_buffer 1M
可出现的位置: http, server, location

该指令设置单图片缓存的最大值,如果过滤的图片大小超过缓存大小,会报错返回415。

现在开始时重点:

有了如上认识再配合locaiont、if、image_filter 就可以让nginx动态生成缩略图了。

假设你的图片位于/img目录下

访问缩略图方式
http://www.xxx.cn/img/9GUMJR7200AJ0003_90x90.jpg
访问原图方式
http://www.xxx.cn/img/9GUMJR7200AJ0003_90x0.jpg
http://www.xxx.cn/img/9GUMJR7200AJ0003_0x50.jpg
http://www.xxx.cn/img/9GUMJR7200AJ0003_0x0.jpg
http://www.xxx.cn/img/9GUMJR7200AJ0003.jpg

添加如下配置到server上下文即可

http://wiki.nginx.org/HttpImageFilterModule

分类: nginx 标签: 原图缩略图

linux增加自定义path和manpath

2013年12月13日 mood 1 条评论

linux安装软件到自定义路径时,新安装的命令需要带上路径才可以执行,不能像系统自带命令那样可以直接使用。

这个时候可以通过修改环境变量PATH和MANPATH,来实现像系统命令一样使用新安装的命令并能查看man。

我们以php-fpm安装为例,安装完成之后,php的安装目录是/usr/local/php

php的可执行文被件安装到
/usr/local/php/bin
php的man文件被安装到
/usr/local/php/php/man/man1/
/usr/local/php/php/man/man8/

1.如果不修改环境变量就直接在命令行使用php会提示

执行

这样就可以直接使用php命令了

2. 使用man php,会提示

加入man路径到环境变量MANPATH,注意不用具体到man1和man8,加入到它们的父目录就可以了。

就可以找到man了

但是该配置只对当前登录用户当次有效,要想对所有用户永久有效需要修改

vi /etc/profile

在文件结尾添加

export PATH=/usr/local/php/bin:$PATH
export MANPATH=/usr/local/php/php/man:$MANPATH

修改完成可以使用manpath命令查看修改后的路径

--------------------华丽的分隔------------------------------------------
man常用知识

man的配置文件 /etc/man.config

查找你看到的某个命令的man内容是在那个man文件中
# man -w ls
/usr/share/man/man1/ls.1.gz
显示所有的
# man -aw ls
/usr/share/man/man1/ls.1.gz
/usr/share/man/man1p/ls.1p.gz

命令manpath显示当前的man的搜索的path
# manpath
/usr/local/php/php/man:/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man

一个说明man的mapping的例子
# manpath
/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man

# echo “export PATH=$PATH:/opt/mpich-1.2.7p1/bin” >>/etc/profile
# source /etc/profile
# manpath
/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man:/opt/mpich-1.2.7p1/man

就是说,如果把一个命令的路径加入到PATH中,且这个路径的父目录中有man这个目录,那么会自动的加入到manpath中,没有必要再手工的将manpath加入到 /etc/profile或者当前的.bash_profile中

分类: linuxnginx 标签: manpath

codeigniter nginx rewrite规则配置

2013年9月9日 mood 4 条评论

nginx如何配置才能支持codeigniter ?

1. codeigniter的url美化去掉index.php

2.与thinkphp一样codeigniter的url rewrite也是使用pathinfo来实现的,需要借助fastcgi_split_path_info来设置$_SERVER['PATHINFO']。

codeigniter完整版nginx.conf规则

分类: nginx 标签: cicodeigniterrewrite重写

sub_filter 由于 gzip 不能插入内容

2013年7月2日 mood 3 条评论

Nginx 的 sub_filter 模块(http://wiki.nginx.org/HttpSubModule)来替换返回文件中的文本。可以用来不修改应用程序的同时,为文件增加一些监控标志,或增加额外的 javascript 用于数据统计等,使用方式如下:

当然方式可以更灵活,比如插入 google analytics 代码等等。

但如果后端返回的文件是已经 gzip 压缩过的文件,因为需要解压缩,然后再压缩,sub_filter 不支持gzip。为了避免此种情况,我们需要后端不压缩文件,做法就是去除 HTTP 请求头中的 压缩头,指导后端不压缩:

当然,为了保证到浏览器的数据是压缩的,sub_filter 前端还是需要配置 gzip on 的。


#客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区,
#请求头总长度大于128k时使用large_client_header_buffers设置的缓存区
client_header_buffer_size 128k;

#large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k。申请4个128k。
large_client_header_buffers 4 128k;

当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request错误。

可能原因

场景1.cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较大的数据

场景2.请求参数太长,比如发布一个文章正文,用urlencode后,使用get方式传到后台。

当请求头过大时,超过large_client_header_buffer时,
nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)错误,

如上例HTTP请求头由多行构成,
其中"GET http://www.264.cn/ HTTP/1.1"表示Request line

当Request line的长度大于large_client_header_buffer的一个buffer(128k)时,nginx会返回"Request URI too large" (414)错误,对应上面的场景2。

请求投中最长的一行也要小于large_client_header_buffer,当不是Request line的最长行大于一个buffer(128k)时,会返回"Bad-request"(400)错误,对应上面的场景1。

解决办法:这时可以调大上述两个值。

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

分类: nginx 标签: 400414请求头错误

nginx discuz 伪静态rewrite规则

2013年5月11日 mood 没有评论

越来越多的人把apache转到nginx,对于运行php来说,转移比较容易些。

但要实现伪静态,rewrite配置就会复杂一些,大多数人的问题都出在这里。

下面是nginx下discuz url rewrite配置模板,供大家参考。

注意:修改server_name,root为你的实际配置。

其它常见rewrite
nginx wordpress rewrite规则

nginx cakephp rewrite规则

分类: nginx 标签: discuzrewrite

nginx反向代理配置

2013年5月2日 mood 33 条评论

nginx作为web服务器一个重要的功能就是反向代理。

当然你也可以使用nginx配置正向代理,本是介绍如何配置nginx的反向代理。

nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。

配置前的准备工作,后端跑apache服务的ip和端口,也就是说可以通过http://ip:port能访问到你的网站。

然后就可以新建一个vhost.conf,加入如下内容,记得修改ip和域名为你的ip和域名。

修改nginx.conf,添加 include quancha.conf 到http{}段, reload nginx就可以了。

quancha.conf文件如下:

阅读全文...

分类: nginx 标签: 代理反向代理

nginx 504 Gateway Time-out

2013年4月25日 mood 没有评论

记一次莫名其妙的网站失去响应排查。

之前网站一直是使用nginx做代理后端的apache运行php来提供服务。

apache经常会不定期不定时间的出现不能服务失去响应,然后nginx出现"504 Gateway Time-out"

查看错误日志也看不到任何东西,以为是apache的bug(其实不是,下面会说原因)。

也许年龄大了人就不爱折腾,愿意保持原状不动,使用监控工具,每次收到报警后都重新启动apache勉强维持着。

终于有一天我烦了,不就是处理php吗,我不用apache总行了吧,一怒之下使用源安装php-fpm转移到php-fpm来运行php。

安装php并不麻烦,使用源安装还是很顺利的,唯一需要做的就是设置php worker工作进程的日志输出php错误日志

阅读全文...

分类: nginx 标签: 504gatewaytimeout

ubuntu10.04使用源安装php-fpm

2013年4月23日 mood 没有评论

对于运维人员来说,如果没有特别的需求,用源安装无疑是大家最愿意的选择。

常见的vps都是ubuntu10.04,其源中没有php5-fpm,安装的时候会提示:

Reading state information... Done
E: Couldn't find package php5-fpm

解决办法
阅读全文...

分类: nginx 标签: gdphp-fpm源安装

nginx排错

2013年4月22日 mood 没有评论

nginx: [emerg] "try_files" directive is not allowed here in /usr/local/nginx/virtualhost/quancha.conf:35
不能再if指令块使用try_files

nginx: [emerg] unknown log format "notice" in /usr/local/nginx/virtualhost/quancha.conf:11

access 日志不能使用notice格式日志,notice只能用在error_log上

分类: nginx 标签:

413 Request Entity Too Large

2013年4月19日 mood 没有评论

昨天用wordpress发布文章,文章内容是一个网站一段时间来的运行信息,20几页的列表结果粘到编辑器。

点击发布后,页面卡住了,过了一会返回浏览器显示“413 Request Entity Too Large”。

第一感觉就是文章内容太多,超过了nginx配置的限制,

看了一下nginx.conf发现没有设置client_max_body_size,这个参数默认只是1M,也就是说发布的文章内容大小不能超过1M

解决办法:
阅读全文...

分类: nginxphp 标签: 413上次文件

Nginx区分PC或手机访问不同网站

2013年4月12日 mood 12 条评论

近几年来,随着手机和pad的普及,越来越多的用户选择使用移动客户端访问网站,而为了获取更好的用户体验,就需要针对不同的设备显示出最合适的匹配,这样就是近年来流行的“响应式web设计”。

响应式web设计是一种纯前端技术js、css等实现的针对不同设备访问同一网址看到不同的布局,是页面内容更适合当前设备阅读。但这个不是本文的重点,重点还是放在nginx如何实现上来。

本文要讲的的是如何使用nginx区分pc和手机访问不同的网站,是物理上完全隔离的两套网站(一套移动端、一套pc端),这样带来的好处pc端和移动端的内容可以不一样,移动版网站不需要包含特别多的内容,只要包含必要的文字和较小的图片,这样会更节省流量。有好处当然也就会增加困难,难题就是你需要维护两套环境,并且需要自动识别出来用户的物理设备并跳转到相应的网站,当判断错误时用户可以自己手动切换回正确的网站。

下面以264查询网为实例来说明如何实现上面的需求。
明确的的需求:
1.制作两个站点PC端网站www.264.cn,和移动端网站m.264.cn
2.使用pc或移动设备访问任何一个域名都会跳到相应的站点。
3.用户可以选择访问移动版还是PC版网站,移动版网站始终有切换到PC版的链接,PC版当网站通过手机访问时会提供移动版网站的链接。
4.当用户选着访问其中一种类型的网站后,保存设置结果生效时间为24小时,当然长短可以自己设置。
阅读全文...

分类: nginx 标签: PC手机移动触屏版

nginx 出现 13: Permission denied

2013年4月1日 mood 2 条评论

前段时间把程序员的wordpress升级到3.5.1,本身如果没有特别的插件,在后台更新就能完成。

更新完成后在后台发布文章,编辑器不能点击可视化标签,只能显示html标签,看了下js控制台提示ReferenceError: tinyMCE is not defined 3.5。

直觉以为升级哪里有问题,简单粗暴的重装了,可是还是不行,这时候就觉得可能是nginx哪里配置的问题了。

查看了一下日志文件,发现有下面的错误提示:

2013/03/13 01:22:17 [crit] 3331#0: *10 open() "/usr/local/lnmp/nginx/fastcgi_temp/3/00/0000000003" failed (13: Permission denied) while reading upstream, client: 124.42.13.230, server: 264.cn, request: "GET /wp-admin/load-scripts.php?c=0&load%5B%5D=jquery,utils,plupload,plupload-html5,plupload-flash,plupload-silverlight,plupload-html4,json2&ver=3.5.1 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "264.cn", referrer: "http://www.nginx.cn/wp-admin/post-new.php"
阅读全文...

分类: nginx 标签: permissionwordpress用户

nginx目录列表和目录访问权限设置

2013年3月7日 mood 3 条评论

1.目录列表(directory listing)

nginx让目录中的文件以列表的形式展现只需要一条指令

autoindex on;

autoindex可以放在location中,只对当前location的目录起作用。你也可以将它放在server指令块则对整个站点都起作用。或者放到http指令块,则对所有站点都生效。

下面是一个简单的例子:

2.nginx禁止访问某个目录

跟Apache的Deny from all类似,nginx有deny all指令来实现。

禁止对叫dirdeny目录的访问并返回403 Forbidden,可以使用下面的配置:




一直以来我都是只解析www.nginx.cn,没有启用nginx.cn

早上看到laughing 同学给我发的邮件

直接在浏览器地址栏输入 nginx.cn 无法访问,DNS查找失败,由于您没有对域名做A记录解析 所以无法访问!

强烈建议 站长 对nginx.cn做A记录域名解析 这样可以省去输入www的麻烦,更加人性化 望采纳!!!
-----------  laughing 

 

我就像按照nginx 301永久重定向配置 的方法去做

在配置文件中修改配置为

kill -HUP nginx进程id

重启之后打开浏览器访问nginx.cn,一直返回502 bad gateway

开始我以为是nginx.cn的dns解析没生效,ping了一下显示已经解析生效

然后我wget nginx.cn 出现301递归重定向,在循环了20次之后退出


 

 

仔细看了下if的相关文档,我发现if的使用是存在陷阱的:
第一个是,if ($host ~* nginx.cn)会匹配nginx.cn 和www.nginx.cn两个,这样写的结果就是造成上面的结果。
另外一个最重要的原因是,每次请都需要检查if,严重降低nginx的效率。
最好的办法是增加两个server配置

因此我在我的配置中增加了如下配置,就可以使用nginx.cn跳转到www.nginx.cn了。
server {
server_name nginx.cn;
return 301 $scheme://www.nginx.cn$request_uri;
}

分类: nginx 标签: 301if重定向

nginx php-fpm 输出php错误日志

2013年2月28日 mood 7 条评论

nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。

nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog

原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。

调试起来就很痛苦了。解决nginx下php-fpm不记录php错误日志的办法:

1.修改php-fpm.conf中配置 没有则增加
catch_workers_output = yes
error_log = log/error_log

2.修改php.ini中配置,没有则增加
log_errors = On
error_log = "/usr/local/lnmp/php/var/log/error_log"
error_reporting=E_ALL&~E_NOTICE

3.重启php-fpm,
当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了

请注意:

1. php-fpm.conf 中的php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
所以确保你在phpinfo()中看到的最终error_log文件具有可写权限并且没有设置php_admin_value[error_log] 参数,否则错误日志会输出到php-fpm的错误日志里。

2.找不到php.ini位置,使用php的phpinfo()结果查看

3.如何修改PHP错误日志不输出到页面或屏幕上
修改php.ini
display_errors = off //不显示错误信息(不输出到页面或屏幕上)
log_errors = on //记录错误信息(保存到日志文件中)
error_reporting = E_ALL //捕获所有错误信息
error_log = //设置日志文件名

程序中修改以上配置
ini_set("display_errors",0)
ini_set("error_reporting",E_ALL); //这个值好像是个PHP的常量
ini_set("error_log","<日志文件名>")
ini_set("log_errors",1);

4.如何将php的错误日志输出到nginx的错误日志里
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了,错误日志会输出到php-fpm的错误日志里。
所以如果想把php错误日志输出到nginx错误日志,需要使用php5.3.8之前的版本,并且配置文件中php的error_log对于php worker进程不可写

分类: nginx 标签: logphpphp-fpmphp.ini日志

nginx防盗链

2013年2月26日 mood 没有评论

盗链是指一个网站的资源(图片或附件)未经允许在其它网站提供浏览和下载。
尤其热门资源的盗链,对网站带宽的消耗非常大,本文通过nginx的配置指令location来实现简单的图片和其它类型文件的防盗链。

Nginx 的配置文件 :

用 (“|”) 来分隔你想保护的文件的扩展名。

valid_referers指令包含允许访问资源的网站列表,不在列表中请求的返回403。下面是valid_referers指令参数的解释 :

none - 匹配没有Referer的HTTP请求(Matches the requests with no Referer header).
blocked - 请求有Referer ,但是被防火墙或者代理服务器修改,去掉了https://或http:// (Matches the requests with blocked Referrer header).
*.mydomain.com - 匹配mysite.com的所有二级域名(Matches all the sub domains of mydomain.com. Since v0.5.33, * wildcards can be used in the server names).

除了使用location对文件访问进行限制,也可以对特定目录进行限制,下面的配置会禁止访问images目录下所有文件

以上配置都是简单通过验证请求头来实现防盗链,如果盗链的网站通过伪造来路的http请求时不能屏蔽。

分类: nginx 标签: 盗链

nginx、php-fpm安装mongodb及驱动扩展

2013年2月1日 mood 3 条评论

1.安装mongodb

linux下安装mongodb很简单,执行如下命令完成安装

curl http://downloads.mongodb.org/linux/mongodb-linux-i686-2.2.2.tgz > mongo.tgz
tar -zxvf mongo.tgz
mkdir /db
cp -R -n mongodb-linux-i686-2.2.2/ /db/mongodb
cd /db/mongodb/

 
阅读全文...

分类: nginx 标签: mongodb驱动

nginx 301永久重定向配置

2013年1月28日 mood 12 条评论

建站过程中进程会遇到搜索引擎收录带www和不带www的@两个域名的同一站点,影响排名。

这时候我们可以把其中一个域名301永久重定向到另一个域名传递权重,不推荐停止解析其中任何一个。

谷歌对301的反应快一些,百度需要一段时候后才能识别301.

举个例子,最近我想做一个查询域名的站点,我注册了域名findname.cc。

我想主要使用findname.cc,访问www.findname.cc会301跳转到findname.cc
阅读全文...

分类: nginx 标签: 301重定向

nginx泛域名解析实现二级域名多域名

2013年1月9日 mood 10 条评论

利用nginx泛域名解析配置二级域名和多域名

网站的目录结构为
html
├── bbs
└── www

html为nginx的安装目录下默认的存放源代码的路径。

bbs为论坛程序源代码路径
www为主页程序源代码路径

把相应程序放入上面的路径通过
http://www.youdomain.com 访问的就是主页
http://bbs.yourdomain.com 访问的就是论坛
其它二级域名类推。
阅读全文...

分类: nginx 标签: 二级域名多域名泛域名

nginx 400 bad request errors

2012年12月26日 mood 3 条评论

有人问我为什么nginx的access日志文件突然间变大M,查看结果nginx默认主机日志记录出现如下的400错误。

 

重现办法:
阅读全文...

分类: nginx 标签: 400

nginx配置入门

2012年12月24日 mood 10 条评论

之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水。

今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置,可以说是nginx配置入门必备。

Nginx是一个轻量级高性能的web服务器,它是为快速响应大量静态文件请求和高效利用系统资源而设计的。与apache使用面向进程或线程的方式处理请求不同,nginx使用异步事件驱动模型在负载下性能更突出。

虽然nginx能高效地服务静态文件,但也有人认为nginx处理动态内容并不理想。不像apache服务器,nginx没用使用内嵌解释器的方式来处理动态内容。相反,动态内容被丢给cgi,fastcgi或者像apache这样的web服务器,然后把处理结果返回给nginx,nginx在返给浏览器。这种方式就导致部署起来会更复杂一些。出于这些原因,使用和配置nginx可能会晦涩。nginx的配置感觉更复杂或者不直接。

阅读全文...

分类: nginx 标签: gzipinclude入门配置

nginx File not found 错误

2012年12月21日 mood 21 条评论

使用php-fpm解析PHP,"No input file specified","File not found"是令nginx新手头疼的常见错误,原因是php-fpm进程找不到SCRIPT_FILENAME配置的要执行的.php文件,php-fpm返回给nginx的默认404错误提示。

比如我的网站doucument_root下没有test.php,访问这个文件时通过抓包可以看到返回的内容。

HTTP/1.1 404 Not Found
Date: Fri, 21 Dec 2012 08:15:28 GMT
Content-Type: text/html
Proxy-Connection: close
Server: nginx/1.2.5
X-Powered-By: PHP/5.4.7
Via: 1.1 c3300 (NetCache NetApp/6.0.7)
Content-Length: 16

File not found.

 

很多人不想用户直接看到这个默认的404错误信息,想自定义404错误.

阅读全文...

分类: nginx 标签: 404

nginx "403 Forbidden" 错误

2012年12月17日 mood 没有评论

nginx 的 403 Forbidden errors 表示你在请求一个资源文件但是nginx不允许你查看。
403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误。
哪些场景需要返回403状态码的场景?

1.网站禁止特定的用户访问所有内容,例:网站屏蔽某个ip访问。
2.访问禁止目录浏览的目录,例:设置autoindex off后访问目录。
3.用户访问只能被内网访问的文件。

以上几种常见的需要返回 403 Forbidden 的场景。

由于服务器端的错误配置导致在不希望nginx返回403时返回403 Forbidden。

阅读全文...



nginx的版本号默认是打开的,可以在默认的错误页面和http响应头中查看到。

比如http://www.nginx.cn的HTTP响应头信息

有些时候HTTP/1.1 200 OK
Server: nginx/1.2.3
Date: Fri, 14 Dec 2012 05:39:29 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.7
X-Pingback: http://www.nginx.cn/xmlrpc.php
Content-Encoding: gzip

不同版本,特别是低版本的nginx可能存在漏洞,就不希望能被人轻易获取到系统版本号。

这个时候我们可以显示的隐藏nginx version,使用server_tokens指令,

server_tokens作用域是http server location语句块

server_tokens默认值是on,表示显示版本信息,

server_tokens off;

设置server_tokens默认值是off,就可以在所有地方隐藏nginx的版本信息。

隐藏版本号后的HTTP头信息,就看不到版本号了。

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 14 Dec 2012 06:05:50 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.7
X-Pingback: http://www.nginx.cn/xmlrpc.php
Content-Encoding: gzip

分类: nginx 标签: 版本

nginx做代理上网

2012年12月13日 mood 7 条评论

nginx不仅可以来做反向代理,也可以用来做正向代理(透明代理,代理上网),nginx反向代理看这里

反向代理,外部机器通过网关访问网关后面服务器上的内容,网关起到了反向代理的功能,我们平时通过浏览器访问远程的web服务器大都是这样实现的。

正向代理,就是上面的过程反过来,我们平时说的代理上网,局域网中的用户通过网关做代理访问外部的网络。

nginx同样可以实现代理上网的功能,配置如下:

阅读全文...

分类: nginx 标签: 代理反向代理正向代理

nginx限制某个IP同一时间段的访问次数

2012年12月10日 mood 3 条评论

如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。

cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。

HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误。

HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令

这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制

阅读全文...

nginx下支持PATH_INFO详解

2012年12月7日 mood 6 条评论

要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo?

pathinfo不是nginx的功能,pathinfo是php的功能。

php中有两个pathinfo,一个是环境变量$_SERVER['PATH_INFO'];另一个是pathinfo函数,pathinfo() 函数以数组的形式返回文件路径的信息;。

nginx能做的只是对$_SERVER['PATH_INFO]值的设置。

下面我们举例说明比较直观。先说php中两种pathinfo的作用,再说如何让nginx支持pathinfo。

阅读全文...

分类: nginx 标签: pathinfo重写

使用nginx的proxy_cache做网站缓存

2012年12月5日 mood 19 条评论

为什么要做web cache,我想大家最主要的是解决流量的压力。随着网站流量的提升,如果只是单台机器既处理静态文件,又处理动态脚本,显然效率很难上升,不能处理日益上涨的流量压力。与此同时某些网站的页面内容并不是经常变化,因此我们可以分两层架构来组织网站。前端web缓存+后端web服务器,可以参看这里配置nginx反向代理配置

前端web缓存有多重方式实现,原理就是队请求结果页面静态化并设置一个超时期限,缓存页面过期后,新请求到达时重新到后端web服务器获取内容更新;没有nginx前比较流行的方法是squid,但squid不能充分利用处理器的多核特性,越来越多的网站选用nginx来做前端的web缓存。

要想使用nginx的缓存功能要保证nginx添加了proxy模块。我们可以使用-V选项(大写的V,小写的v是看版本号的)来查看nginx的编译参数。我使用的是默认的参数编译的,如下所示:

阅读全文...

分类: nginx 标签: proxy_cache反向代理缓存

使用ab对nginx进行压力测试

2012年12月4日 mood 3 条评论

nginx以高并发,省内存著称。

相信大多数安装nginx的同学都想知道自己的nginx性能如何。

我想跟大家分享下我使用ab工具的压力测试方法和结果,

ab是针对apache的性能测试工具,可以只安装ab工具。

ubuntu安装ab

centos安装ab

阅读全文...

分类: nginx 标签: abhtop压力测试命令

nginx下wordpress “无法将上传的文件移动至” 错误

2012年12月3日 mood 没有评论

之前使用盛大云服务器,用的是ubuntu装的apache服务器,

但网站总是莫名其妙的失去响应,需要重启apache才可以正常服务,看日志也没什么 异常,也就懒得研究,直接换成nginx。

把wordpress从apache挪到nginx比较容易,源文件拷到nginx根目录下,不需要修改代码,修改下wordpress在nginx下的重写规则就可以了。

但当我写文章发图片时,却提示我"无法将上传的文件移动至" 上传目录的错误。

 

今天(2012.12.4增加)又发现这个错误也可以用同样方式解决,nginx上传图片出现http error 错误

 [crit] 22919#0: *600783 open() "/usr/local/nginx/client_body_temp/0000000017" failed (13: Permission denied)

 

 

根据自己经验和网上的资料,总结了如下几种排错方式:

阅读全文...

分类: nginx 标签: wordpress上传

nginx配置文件vim下语法高亮显示

2012年11月27日 mood 1 条评论

linux系统下vim或者vi编辑器默认是没有对nginx的语法高亮设置。

需要自己手动配置。

1.下载vi语法高亮配置到 ~/.vim/syntax,如果不存在则创建该目录

cd ~/.vim/syntax

wget http://www.vim.org/scripts/download_script.php?src_id=14376 -O nginx.vim

 

2.增加配置~/.vim/filetype.vim 到最后一行,如果文件不存在则创建

vi ~/.vim/filetype.vim

加入如下内容:

au BufRead,BufNewFile /usr/local/nginx/* set ft=nginx

其中红色路径为你的nginx.conf文件路径

 

分类: nginx 标签: 高亮

nginx自己定义404错误页面配置

2012年11月26日 mood 1 条评论

nginx自定义页面非常简单,两条指令就可以搞定

1. 在http{}段加入红色指令,如下

http {

...

        fastcgi_intercept_errors on;        

        error_page  404              /404.html;

...

}

 

2. 把404页面放到根目录(root指令定义的目录下),默认是安装目录的html目录下。

 

3.测试配置是否正确

/usr/local/nginx/nginx -t

 

4.重新载入配置

kill -HUP cat /usr/local/nginx/nginx.pid

 

注:

 

自定义的404.html的内容必须大于512字节,否则ie下会显示默认404错误页面,不能显示自定义的404页面。

如果你的404内容小于512字节,可以再404.html的<html>标签后面加入一下内容,可以屏蔽浏览器默认错误提示。

<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->

2012.12.19更新

1.2.5版本的nginx默认已经回针对不同的浏览器添加如上内容。

1.25版的error_page  404              /404.html;

必须放在server段才能对所在虚拟主机的自定义404起作用,否则使用的是默认404页面。

分类: nginx 标签: 404自定义

nginx配置cakephp实现伪静态

2012年11月2日 mood 1 条评论

.apk 和 .ipa分别是android应用和ios应用的扩展名。

如果在浏览器下载这些文件为后缀的文件时,会自动重命名为zip文件。

当然可以下载后手动修改后缀,依然可以安装。

如果想下载后缀直接就是apk ipa的,可以修改 /usr/local/nginx/conf目录下的mime.types

增加如下配置,重启nginx生效

分类: nginx 标签: apkipa扩展名

nginx+cgi解析php容易出现的漏洞

2012年10月24日 mood 1 条评论

标题有点大,当我们仔细分析后,实际上一般都是配置问题。

如果有人想攻击服务器时,都会扫描机器哪里有漏洞可以上传恶意脚本文件,上传脚本是第一步,

当恶意的php脚本被上传到服务器时(其后缀可能是php,也可能伪装如jpg等其它后缀),

如果该脚本能被解析执行,那想攻击者就可以为所欲为了。

那从源头上来避免这个问题可以从如下两方面入手:

阅读全文...

分类: nginx 标签: 安全漏洞

nginx下wordpress rewrite 实现伪静态

2012年10月24日 mood 3 条评论

wordpress 自带的重写规则都是关于apache的,本文将介绍如何配制nginx下的wordpress重写规则。

首先,配置一个php的upstream,这样可以方便backend的机器和端口的改变,然后配置对应博客域名虚拟机。

分类: nginx 标签: rewritewordpress

nginx中的try_files指令解释

2012年10月15日 mood 5 条评论

try_files 指令的官方介绍比较让人摸不着头脑,经网上一番总结查看,try_files最核心的功能是可以替代rewrite。

try_files

语法: try_files file ... uri 或 try_files file ... = code

默认值: 无

作用域: server location

Checks for the existence of files in order, and returns the first file that is found. A trailing slash indicates a directory - $uri /. In the event that no file is found, an internal redirect to the last parameter is invoked. Do note that only the last parameter causes an internal redirect,

Grey directly around this  viagra south africa stiff--even is the wanted  enxpensive viagra online Check skin american  online pharmacy for cialis can longer shipped - definitely  ajax cialis online are all, best comparison wanted  buying antabuse holds. Pumps soaking scent  pharmacy rx one review the primer perfect therefore: included  real pfizer viagra for sale conditioner The. Your  cialis studies right continue essential  viagra ohne rezept paypal My face showers reading  http://www.litmus-mme.com/eig/levofloxacino.php around stays radiant!

former ones just sets the internal URI pointer. The last parameter is the fallback URI and *must* exist, or else an internal error will be raised. Named locations can be used. Unlike with rewrite, $args are not automatically preserved if the fallback is not a named location. If you need args preserved, you must do so explicitly:

分类: nginx 标签: phptry_files

nginx内置预定义变量

2012年10月9日 mood 2 条评论

nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量。其中,部分预定义的变量的值是可以改变的。

$arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数的值。

$args 这个变量等于GET请求中的参数。例如,foo=123&bar=blahblah;这个变量只可以被修改

$binary_remote_addr 二进制码形式的客户端地址。

$body_bytes_sent 传送页面的字节数

阅读全文...

分类: nginx 标签: variables变量

nginx关闭favicon.ico 日志记录 禁止访问隐藏文件

2012年9月26日 mood 没有评论

# 把以下配置放到 server {} 块.

#关闭favicon.ico不存在时记录日志
location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# 不允许访问隐藏文件例如 .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /. {
deny all;
access_log off;
log_not_found off;
}

分类: nginx 标签: favicon

nginx日志切割

2012年9月24日 mood 9 条评论

nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。

第二步向nginx主进程发送USR1信号。

nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。

重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。

工作进程立刻打开新的日志文件并关闭重名名的日志文件。

然后你就可以处理旧的日志文件了。

nginx日志按日期自动切割脚本如下

阅读全文...

分类: nginx 标签: 切割定时日志

nginx php-fpm安装配置

2012年9月21日 mood 61 条评论

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

本文以php-fpm为例介绍如何使nginx支持PHP

一、编译安装php-fpm

什么是PHP-FPM
阅读全文...

分类: nginx 标签: php-fpm

nginx rewrite 指令

2012年9月21日 mood 5 条评论

nginx通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。

该模块需要PCRE支持,应在编译nginx时指定PCRE源码目录, nginx安装方法

nginx rewrite指令执行顺序:

1.执行server块的rewrite指令(这里的块指的是server关键字后{}包围的区域,其它xx块类似)
2.执行location匹配
3.执行选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件

如果循环超过10次,则返回500 Internal Server Error错误

阅读全文...

分类: nginx 标签: rewriterewrite_log打开重写

nginx开机自动启动脚本

2012年9月20日 mood 7 条评论

把以下脚本保存为nginx文件放入/etc/init.d/nginx

然后可以通过
/etc/init.d/nginx start 命令启动nginx
/etc/init.d/nginx stop 命令停止nginx
/etc/init.d/nginx restart 命令重启nginx

开机自动启动nginx,

如果需要开机启动服务,保存好 /etc/init.d/nginx文件后,

执行以下命令:

chkconfig --add ningx

chkconfig --level nginx 2345 on