nginx2

来源:互联网 发布:2015全球云计算大会 编辑:程序博客网 时间:2024/06/10 08:29

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日mood1 条评论

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日mood9 条评论

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

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

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

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

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

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

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

2014年1月8日mood4 条评论

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标签:apt, nginx, 卸载, 安装

windows下安装nginx

2014年1月3日mood1 条评论

之前一直有人问如何在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日mood1 条评论

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日mood11 条评论

"我现在是有些图片需要生成缩略图,这个现在加了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日mood1 条评论

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中

分类:linux, nginx标签:man, path

codeigniter nginx rewrite规则配置

2013年9月9日mood4 条评论

nginx如何配置才能支持codeigniter ?

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

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

codeigniter完整版nginx.conf规则

分类:nginx标签:ci, codeigniter, rewrite, 重写

sub_filter 由于 gzip 不能插入内容

2013年7月2日mood3 条评论

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标签:400, 414, 请求头, 错误

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标签:discuz, rewrite

nginx反向代理配置

2013年5月2日mood33 条评论

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标签:504, gateway, timeout

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标签:gd, php-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

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

分类:nginx, php标签:413, 上次文件

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

2013年4月12日mood12 条评论

近几年来,随着手机和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日mood2 条评论

前段时间把程序员的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标签:permission, wordpress, 用户

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

2013年3月7日mood3 条评论

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标签:301, if, 重定向

nginx php-fpm 输出php错误日志

2013年2月28日mood7 条评论

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标签:log, php, php-fpm, php.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日mood3 条评论

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日mood12 条评论

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

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

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

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

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

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

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

2013年1月9日mood10 条评论

利用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日mood3 条评论

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

 

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

分类:nginx标签:400

nginx配置入门

2012年12月24日mood10 条评论

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

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

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

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

阅读全文...

分类:nginx标签:gzip, include, 入门, 配置

nginx File not found 错误

2012年12月21日mood21 条评论

使用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日mood7 条评论

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

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

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

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

阅读全文...

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

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

2012年12月10日mood3 条评论

如何设置能限制某个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标签:cc攻击, limit_conn, limit_req, 并发, 白名单

nginx下支持PATH_INFO详解

2012年12月7日mood6 条评论

要想让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日mood19 条评论

为什么要做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日mood3 条评论

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

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

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

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

ubuntu安装ab

centos安装ab

阅读全文...

分类:nginx标签:ab, htop, 压力测试, 命令

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日mood1 条评论

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日mood1 条评论

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日mood1 条评论

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

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

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

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

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

分类:nginx标签:apk, ipa, 扩展名

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

2012年10月24日mood1 条评论

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

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

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

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

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

阅读全文...

分类:nginx标签:安全, 漏洞

nginx下wordpress rewrite 实现伪静态

2012年10月24日mood3 条评论

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

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

分类:nginx标签:rewrite, wordpress

nginx中的try_files指令解释

2012年10月15日mood5 条评论

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标签:php, try_files

nginx内置预定义变量

2012年10月9日mood2 条评论

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日mood9 条评论

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

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

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

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

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

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

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

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

阅读全文...

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

nginx php-fpm安装配置

2012年9月21日mood61 条评论

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日mood5 条评论

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标签:rewrite, rewrite_log, 打开, 重写

nginx开机自动启动脚本

2012年9月20日mood7 条评论

把以下脚本保存为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

你也可以直接下载nginx启动停止脚本

---------------------分割线下是脚本内容,红色字体需要你修改-------------------------------------------
#! /bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

set -e
[ -x "$DAEMON" ] || exit 0

do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}

do_stop() {
kill -INT cat $PIDFILE || echo -n "nginx not running"
}

do_reload() {
kill -HUP cat $PIDFILE || echo -n "nginx can't reload"
}

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac

exit 0


nginx 只允许某些域名访问 其他一律不能访问 ,是怎么写的?

对于这个问题可以参考官方文档

原文

In catch-all server examples the strange name “_” can be seen:

There is nothing special about this name, it is just one of a myriad of invalid domain names which never intersect with any real name. Other invalid names like “--” and “!@#” may equally be used.

 

解释:

在这个server段实例可以看到:奇怪的server_name名字“ _ “

其实这个名字没有什么特别的,它仅仅是一个许多无效的域名中的一个代表,与任何真实的名字永远不会相交。其它无效的名称,如“ “ 和” !@# “也可同样使用。
default_server:nginx的虚拟主机是通过HTTP请求中的Host值来找到对应的虚拟主机配置,如果找不到呢?那 nginx就会将请求送到指定了 default_server 的 节点来处理

对于未绑定的域名指向你的服务器时,匹配不到你配置的虚拟主机域名后,会默认使用这个虚拟主机,然后直接返回404。

把这个server段配置添加你的nginx.conf即可

分类:nginx标签:404, 域名

nginx防止sql注入

2012年9月11日mood2 条评论

防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义。

对于简单的情况,比如包含单引号' , 分号;, <, >, 等字符可通过rewrite直接重订向到404页面来避免。

用rewrite有个前提需要知道,一般用rewrite进行正则匹配只能匹配到网页的URI,也就是url中?前部分,?以后部分是请求参数。

问号后面的请求参数,在nginx用$query_string表 示,不能在rewrite中匹配到,需要用if判断

例如,对于参数中带有单引号的'进行匹配然后定向到错误页面,

/plus/list.php?tid=19&mid=1124'

rewrite ^.*([;'<>]).* /error.html break;

直接写这样的一条重写肯定不会正确匹配,因为rewrite参数只会匹配请求的uri,也就是/plus/list.php部分。

需要使用$query_string 借助if进行判断,如果查询串种包含特殊字符,返回404。

if ( $query_string ~* ".*[;'<>].*" ){
return 404;
}

 

 

分类:nginx标签:rewrite, sql注入

nginx禁止访问某个文件和目录(文件夹)

2012年8月29日mood8 条评论

nginx禁止访问所有.开头的隐藏文件设置

location ~* /.* {
deny all;
}

nginx禁止访问目录,

例如:禁止访问path目录

location ^~ /path {
deny all;
}
阅读全文...

分类:nginx标签:区别, 目录, 禁止访问, 隐藏文件

nginx location匹配规则

2012年8月29日mood28 条评论

location匹配命令

~      #波浪线表示执行一个正则匹配,区分大小写
~*    #表示执行一个正则匹配,不区分大小写
^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
=      #进行普通字符精确匹配
@     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

阅读全文...

分类:nginx标签:location, rewrite, 匹配

nginx+php-fpm出现502 bad gateway错误解决方法

2012年8月22日mood8 条评论

502错误是所有用nginx跑php的运维人员不愿意看见的

nginx出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端php-fpm处理有问题,nginx将正确的客户端请求发给了后端的php-fpm进程,但是因为php-fpm进程的问题导致不能正确解析php代码,最终返回给了客户端502错误。

服务器出现502的原因是连接超时 我们向服务器发送请求 由于服务器当前链接太多,导致服务器方面无法给于正常的响应,产生此类报错

因此如果你服务器并发量非常大,那只能先增加机器,然后按以下方式优化会取得更好效果;但如果你并发不大却出现502,一般都可以归结为配置问题,脚本超时问题。

1.php-fpm进程数不够用

使用 netstat -napo |grep "php-fpm" | wc -l 查看一下当前fastcgi进程个数,如果个数接近conf里配置的上限,就需要调高进程数。

但也不能无休止调高,可以根据服务器内存情况,可以把php-fpm子进程数调到100或以上,在4G内存的服务器上200就可以。

阅读全文...

分类:nginx标签:502, fastcgi, php-fpm, timeout, 多说, 超时

apache rewrite规则转nginx rewrite配置

2012年8月15日mood没有评论

不知道怎么把apache rewrite 规则转换成nginx rewrite配置的童鞋有喜啦。

一个自动化的linux命令行工具apache2nginx

能将apache的配置文件转换成相应的nginx的配置文件。 源代码在github上,文档,二进制文件也可以从github上获得。

使用方法:apache2nginx -f /etc/httpd/conf/httpd.conf  将生成 nginx.conf

https://github.com/nhnc-nginx/apache2nginx

另外一个选择是在线直接生产。

也可以使用在线转换工具把配置文件httpd.conf自动转换成nginx配置文件nginx.conf,规则转换网址

http://www.anilcetin.com/convert-apache-htaccess-to-nginx/

 

分类:nginx标签:apache

puppet批量部署lnmp模块

2012年8月8日mood4 条评论

批量部署mysql nginx php

puppet批量部署lnmp模块

作者:少波

分类:nginx标签:puppet

nginx负载均衡配置

2012年7月26日mood7 条评论

使用负载均衡的话,可以修改配置http节点如下:

分类:nginx标签:负载均衡

nginx基本配置与参数说明

2012年7月26日mood29 条评论

分类:nginx标签:nginx基本配置, 参数, 配置

Nginx不间断服务的平滑升级方法

2012年7月24日mood没有评论

版本是从正在服役的1.0.12升级到1.0.15。

第一步:备份旧版的Nginx和配置文件

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/bak_nginx //备份旧版程序

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/bak_nginx.conf //备份配置文件

第二步:编译新版的Nginx

tar zxvf ./nginx-1.0.15.tar.gz

cd nginx-1.0.15

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --user=www --group=www

make

make install

第三步:检查新版是否正常

/usr/local/nginx/sbin/nginx -V //检查版本信息是否正确

/usr/local/nginx/sbin/nginx -t //测试新版本Nginx配置是否正常,如看到xxxxxx test is successful的提示,说明配置正常

第四步:切换新旧版工作进程

kill -USR2 cat /usr/local/nginx/logs/nginx.pid

kill -QUIT cat /usr/local/nginx/logs/nginx.pid.oldbin






作者72xit 互联网博客 http://www.72xit.com/2067.jsp

分类:nginx标签:测试

NginxChsVirtualHostExample

2012年7月20日mood4 条评论

两个虚拟主机(纯静态-html 支持) - Two Virtual Hosts, Serving Static Files

 

 

虚拟主机标准配置(简化) - A Default Catchall Virtual Host

 

 

在父文件夹中建立子文件夹以指向子域名 - Wildcard Subdomains in a Parent Folder

这是一个添加子域名(或是当DNS已指向服务器时添加一个新域名)的简单方法。需要注意的是,我已经将FCGI配置进该文件了。如果你只想使服务器为静态文件服务,可以直接将FCGI配置信息注释掉,然后将默认主页文件变成index.html。

这个简单的方法比起为每一个域名建立一个 vhost.conf 配置文件来讲,只需要在现有的配置文件中增加如下内容:

This is just a really easy way to keep adding new subdomains, or to add new domains automatically when DNS records are pointed at the server. Note that I have included FCGI here as well. If you want to just serve static files, strip out the FCGI config and change the default document to index.html. Rather than creating a new vhost.conf file for every domain, just create one of these:

 













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

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

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

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

本文的前提是你使用nginx安装来安装nginx,如果你使用其它方法或者系统自带包安装,那么你的配置文件的位置和下面讲的配置文件位置可能不同。

nginx的强大都是靠配置文件来实现,nginx就是一个二进制文件nginx读入一个配置文件nginx.conf(nginx.conf可能include包含若干子配置文件)来实现各种各样的功能。

 管理配置文件

nginx使用嵌套的花括号语法来定义选项。安装完成后nginx的主配置文件被放在/usr/local/nginx/nginx.conf。同时一个默认的备份配置文件存在/usr/local/nginx/nginx.conf.default。其它子配置文件同样有一个.default结尾的备份配置文件。.default的作用是当你修改配置文件错误的时候,你可以快速回到上一个好用的状态。建议大家经常对配置好的功能的配置文件做备份,可以以日期文件做结尾。比如你可以使用如下指令完成,修改日期为你所备份的日期。

每次修改完nginx.conf都要重新加载配置文件

全局配置

我们分片段一点点的介绍默认的配置文件

这些是配置文件开始的默认行。通常的环境下,你不需要修改这些选项。这一部分有几个方面需要我们注意:

  • 所有以#号开的行是注释,nginx不会解析。默认的配置文件有许多说明解释的注释块
  • 指令是以一个变量名开头(例如,worker_processes或pid),然后包含一个参数(例如,1或 logs/nginx.pid)或者多个参数(例如,"logs/error.log notice")
  • 所有指令以分号结尾
  • 某些指令,像上面的events可以包含多个子指令作为参数。这些子指令以花括号包围。
  • 虽然nginx不解析空白符(例如tab,空格,和换行符),但是良好的缩进能提高你维护长期运行配置文件的效率。良好的缩进使配置文件读起来更流畅,能让你很容易明白配置的策略,即使几个月前。

下面我们继续读配置文件

"http { }"块的开头像配置文件的开头一样都是标准配置不需要修改。这里我们需要把注意力放在这些元素上:

  • 这部分内容的开始"include"语句包含/usr/loca/nginx/mime.types文件到nginx.conf文件include语句所在位置。include对ningx.conf文件的可读性和组织性很有用。
  • 不能过多使用include,如果太多递归地include文件会产生混乱,所以需要合理有限制地使用include来保证配置文件的清晰和可管理。
  • 你可以去掉log_format指令前的注释并修改这几行设置的变量为你想记录的信息。
  • gzip指令告诉nginx使用gzip压缩的方式来降低带宽使用和加快传输速度。如果想使用gzip压缩,需要添加如下配置到配置文件的gzip位置。

使用gizp压缩并不是没有代价的。在降低带宽的同时也增加了CPU的使用。gzip_cop_level的参数取值范围1-9,9代表最用CPU和1代表最少用CPU,其默认值是1.

 

另外,请注意上面的片段 "http { " 是http的前半部分,其余部分解下面继续,直到匹配的"}"。

虚拟机server配置

我们家是nginx.conf接下来的配置文件是这样

我们可以看到http{ }块到此结束。

server指令块,像上面例子中那个一样,是我们nginx用户主要配置自己虚拟主机的地方。在server块里有许多重要的指令。listen指令告诉nginx在一个特定的hostname,ip或者tcp端口监听连接。默认,http服务运行在80端口。一下这些listen指令都是有效的:

在这些例子中,我们可以看到很多不同表达方式:

  • 第一组2个指令指明服务器监听在127.0.0.1或localhost的80端口,localhost通常定义在/etc/hosts指向127.0.0.1
  • 第二组除了端口号监听在8080而不是80外,与第一组相同。
  • 第三组例子定义服务器监听在192.168.3.105的80和8080端口
  • 第四组例子是在所有地址上监听特定的端口。listen 80与listen *:80相同,listen 8080与listen *:80相同。
  • 最后一组例子设置服务器只监听在12.34.56.77/78/79的80端口上的请求。

server_name指令可以设置基于域名的虚拟主机,根据请求头部的内容,一个ip的服务器可以配置多个域名。下面这些server_name的参数是有效的:

多个域名之间以空格分隔。nginx允许一个虚拟主机有一个或多个名字,也可以使用通配符"*"来设置虚拟主机的名字。上面的例子我们看到了很多特殊的地方:

  • 第一组例子,首先定义server_name为nginx.cn,那么来自http://nginx.cn的请求就会发到该主机上。第二个例子配置了nginx.cn和www.nginx.cn,那么http://nginx.cn和http://www.nginx.cn的请求会发到这个主机上。
  • *.nginx.cn和.nginx.cn是等同的配置,设置该主机处理所有来自nginx.cn的子域名,比如www.nginx.cn,blog.nginx.cn等
  • 第二组server_name配置nginx.*,配置服务器处理所有以nginx.开头的请求。例如,nginx.com,nginx.cn,nginx.net,nginx.baidu.com
  • 接下来一组第一个server_name配置,设置主机处理来自三个域名的请求。nginx允许设置不是有效域名的名字。比如接下来这个配置我们可以看到三个不是有效域名的例子,localhost,litchfiled和bledington。nginx只查找请求的HTTP头中的域名但并不判断域名是否有效,这个例子中这些主机名可以配制在/etc/hosts中。当你在本机调试时使用非域名的主机名有时候更适合些。
  • 最后一组例子,server_name设置为空的双引号,它告诉nginx捕捉所有没有hostname的请求,或者hostname没有在其它server_name中指定的。

 

我们继续分析接下来的server指令块,看看access_log指令。

第一个例子,日志使用相对路径,log文件放在与配置文件同级的目录中,也就是日志存储在/usr/local/nginx/logs/nginx.access.log;接下来的两个例子定义了完整的绝对路径;最后一个例子是关闭access log,不会记录访问日志到文件。

server块的最后部分是location指令块,对于client的不同请求目标,location是用来配置服务器的不同响应。

就像server_name指令配置nginx处理请求使用包含在请求中的信息一样,location指令配置如何响应不同位置资源的请求。例如:

前五个例子是按字面逐字匹配,匹配请求url域名后面开始的部分。假设一个请求http://www.nginx.cn,我们假设server_name已经匹配www.nginx.cn,那么"location /"指令将捕获这个请求。nginx使用匹配度最高的location。比如http://ducklington.org/planet/blog/和http://ducklington.org/planet/blog/about/会匹配"location /planet/blog",而不是"location /planet/"

 location配置

对于特定的请求,一旦nginx匹配一个location来处理。那么这个请求的响应内容就会由这个location块中的指令决定。我们先来看一个最基本的locaiton配置块。

在这个例子中文档根(doucument root)位于html/目录。根据nginx的安装目录/usr/local/nginx,这个location的完整路径是/usr/local/nginx/html。假设一个请求访问位于/blog/includes/styles.css文件同时没有别的location块匹配,那么nginx会用位于文件系统的/usr/local/nginx/html/blog/includes/styles.css响应。当然你也可以用绝对路径设置root指令。

index指令会告诉nginx使用哪个资源如果请求中没有文件名。因此,如果请求http://.ducklington.org/将会补全资源位置为/usr/local/nginx/html/index.html。如果index配置了多个文件,nginx会按顺序处理直到找到第一个存在的补全资源。如果index.html在相关目录中没有,那么将使用index.htm。如果两个都不存在,会返回404错误。

让我们看另外一个location指令的例子,这些location指令都在ducklington.org的server指令块里。

在这个例子中,所有以.php结尾的请求都被第二个location块处理。第二个语句块对所有请求指定了一个fastcgi句柄。其它的请求,nginx会使用第一个location块来处理。

请求http://ducklington.org/将会返回/srv/www/ducklington.org/public_html/index.html如果存在的话,如果不存在这返回/srv/www/ducklington.org/public_html/index.htm,如果两个都不存在则返回404错误。

请求 http://ducklington.org/blog/将会返回/srv/www/ducklington.org/public_html/blog/index.html如果存在的话,如果不存在则返回/srv/www/ducklington.org/public_html/blog/index.htm,如果两个都不存在则返回404错误。

请求http://ducklington.org/tasks.php将会被发给fastcgi去执行位于/srv/www/ducklington.org/public_html/tasks.php的文件

请求 http://ducklington.org/squire/roster.php也将使用fastcgi句柄执行位于 /srv/www/ducklington.org/public_html/squire/roster.pl的文件,并返回结果。

具体的location匹配规则这就不说了,不明白的可以看这里nginx location匹配

最佳实践

上面这些例子和解释应该足够让你能够配置自己的nginx server了。下面列出配置nginx server最佳实践。

首先,把具体某一个要配置的server指令块的所有指令放在一个文件中,然后使用include语句把它包含到配置文件中。

例如绑定ducklington.org域名,首先把ducklington.org的 server指令块配置放在/srv/www/ducklington.org/nginx.conf。然后增加指令include /srv/www/ducklington.org/nginx.conf;到配置文件的http块中。像这样:

原创粉丝点击