www.nginx.cnsitemap

存档

2013年12月 的存档

nginx日志记录post的参数

2013年12月30日 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 标签: , ,

nginx利用image_filter动态生成缩略图

2013年12月25日 10 条评论

"我现在是有些图片需要生成缩略图,这个现在加了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 标签: ,

smarty变量赋值给js

2013年12月25日 1 条评论

最新给朋友搞一个新项目
http://www.264.cn

这类网站查询远远大于写入,所以希望能够灵活修改模板,支持大的并发读操作。

采用的方案是php+smarty
服务器架构是lnmp

最近遇到一个问题就是把smarty的变量赋值给js时,总是解析不正确,其中有两个原因。
阅读全文...

分类: js 标签: , ,

使用php连接oracle

2013年12月22日 2 条评论

要使用php连接oracle,基本条件是
1.需要你安装了php、
2.安装了oracle、
3.配置了tnsname.ora。
本地命令行使用sqlplus能够连接到oracle。

根据你机器的版本选对64bit或者32bit的php程序,我们使用php的oci8扩展连接oracle

安装好php后,打开oci8扩展,

写一段连接oracle的ora.php代码
阅读全文...

分类: oracle, php 标签: , ,

安装好php后找不到php.ini

2013年12月13日 没有评论

很多同学在安装完php后找不到php.ini而烦恼。

通常php.ini的位置在:

/etc目录下或/usr/local/lib目录下。

如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:

1.新建php文件,写入如下代码

然后在浏览器访问该页面,搜索php.ini,

2.
执行,(需要修改php为你自己的路径)
/usr/local/php/bin/php --ini
会显示php.ini所在路径,路径下没有php.ini文件,
Configuration File (php.ini) Path: /usr/local/php/lib
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)

php.ini位置修改方法如下: php.ini文件缺省放在/usr/local/lib上面,

可以在编译的时候使用--with-config-file-path参数来修改php.ini的存放位置。

例如,
你可以使用--with-config-file-path=/etc
把php.ini存放到/etc下面,然后可以从源码包中拷贝php.ini-dist到/etc/php.ini。

分类: php 标签: ,

linux增加自定义path和manpath

2013年12月13日 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中

分类: linux, nginx 标签: ,