Nginx配置相关的一些问题

1.  no input file specified

这个问题其实就是Nginx传给PHP-cgi的文件名,cgi找不到。这个问题一般是由以下原因导致的:

  1. 文件真的不存在……
  2. 文件和目录的权限问题,如果nginx和php-cgi运行的用户对要获取的文件没有读取权限,就会出这个错。
  3. php.ini中的cgi.fix_pathinfo选项,如果你是用SCRIPT_FILENAME获取php文件路径的话,请将此项设为1
  4. 如果在nginx中SCRIPT_FILENAME是用$document_root$fastcgi_script_name;这种方式定义的话,需要保证$document_root在此句之前已被定义。
  5. 还有一种情况比较特殊,就是有些nginx版本的配置文件,会在fastcgi_params文件中重复定义SCRIPT_FILENAME为其它的值,把fastcgi_params中的注释掉就好了。

2. 使用$request_filename判断文件是否存在的时候,$request_filename无法正确定位文件位置

这是因为$request_filename是与server的root有关的,所以需要在server段中定义root来指出此网站所在的物理路径。

为 PHP 安装 OAuth 扩展

最近在弄Evernote的API,想通过Evernote的API将JSON格式的Google Reader分享资料导入到Evernote中。注册了Evernote沙盒账号,下载了SDK,一运行示例代码,结果这玩意儿还需要安装OAuth扩展。

上网找了一下PHP的OAuth扩展的资料,总结分享如下:

OAuth是一个基于HTTP的用户验证协议,可以使应用在无需保存用户的账号密码的情况下为用户提供安全的数据访问。PHP的OAuth扩展为OAuth认证和绑定账号提供所需的支持。

如何安装

最简单的方法就是从PECL上下载了

首先安装pecl

sudo apt-get install php-pear php5-dev make

然后运行

sudo pecl install oauth

如果遇到了/usr/include/php5/ext/pcre/php_pcre.h:29: fatal error: p…的问题,则需要安装libpcre3-dev

sudo apt-get install libpcre3-dev

安装完成后,在 /etc/php5/cgi/php.ini 中添加一行

extension=oauth.ini

但是我用pecl没能安装成功,我是自己编译安装的

首先在PHP官网下载oauth的包

将包解压到随便哪个目录,在那个目录执行

phpize
./configure
make
sudo make install

然后同样是在 /etc/php5/cgi/php.ini中添加

extension=oauth.ini

之后重启phpcgi服务就可以了。

参考资料

http://www.php.net/manual/zh/oauth.setup.php
http://pecl.php.net/package/oauth
http://djpate.com/2010/10/07/how-to-install-oauth-support-for-php-on-ubuntu/

EC2 使用手记

注册EC2服务并创建一个自己的实例

备份Instance

迁移Bundle

使用Command Line

ec2的命令行管理指令需要使用Private key和X.509证书,如果你还没有这2个文件,则可以通过以下步骤获取:

  1. 进入到YOur Account,选择Security Credentials
  2. 找到Access Credentials,切换标签到X.509 Certificates
  3. 点击Create a New Certificate建立新的证书
  4. 下载刚刚生成的Private Key(pk-xxxxx.pem形式的文件)和X.509 Certificate(cert-xxxx.pem形式的文件)

然后将这2个文件上传到ec2服务器上,我是将这2个文件放在了home下的.ec2中。之后在使用ec2的管理命令的时候,就可以通过指定-K your_private_key.pem和-C your_x.509_cert.pem的方式来使用这2个文件了。
如果不想每次都输这两个参数的话,也可以通过以下的方法将这2个文件添加到环境变量中,这样ec2命令在执行的时候则会自行去使用这2个文件:

export EC2_PRIVATE_KEY=~/.ec2/your_private_key.pem
export EC2_CERT=~/.ec2/your_X.509_cert.pem

另外,很多命令在使用的时候都需要指定Region,而这个参数不是必须的,如果不指定这个参数的话,则默认是us-west-1,如果你不是这个Region,则需要通过–region参数来指定。
你可以使用此命令查看当前ec2所在区域:

查看各区域名称及URL命令:

ec2-describe-regions

一些概念

ec2-bundle-image和ec2-bundle-vol的区别:
ec2-bundle-image是从一个loopback file(回环文件?我的理解就是类似ISO的文件)创建AMI。
ec2-bundle-vol是本机(就是你的ec2)的根文件系统创建AMI。

Linux 点滴

1. Ubuntu 的最上方的面板如果被误删之后如何恢复呢?

不用抓狂,三句话解决问题。

gconftool --recursive-unset /apps/panel
rm -rf ~/.gconf/apps/panel
pkill gnome-panel

2. 批量修改文件或目录权限

find -type d -exec chmod 745 {} \;
find -type f -exec chmod 644 {} \;
# 或者
find -type d|xargs chmod 745
find -type f|xargs chmod 644

3. 修改服务器时区:

tzselect

如果要修改时区并且马上生效,可以更换/etc/localtime 文件来实现。比如修改时区为中国上海,那么就可以使用如下的命令来使得时区的更改生效。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4. Amazon Linux AMI切换到root的方法:

sudo chroot /

5. 如何在Red hat上安装iostat:
iostat是sysstat内的一个工具,使用下面这个命令安装sysstat

yum install sysstat

6. 使用iostat查看硬盘I/O情况

iostat -x

各字段解释:
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。

7. 一条指令结束同一程序的多个进程

sudo kill -9 `pidof name`

8. 查看某一进程都打开/占用了哪些文件

lsof -c name

or

lsof -p pid

8. 如何查看Mysql数据库文件存放位置
Mysql配置文件(一般的存放位置为 /etc/my.cnf)中的datadir即为数据文件存放位置

WordPress 在 Nginx 中的 Rewrite 规则

查看wordpress设置的时候看到wordpress支持/year/month/article_title这种形式的链接,早就厌烦了URL后带一堆&xxx=nnn的形式,于是决定改成这种“漂亮地址”。
当然,这种链接需要作URL重写,我的Web Server用的Nginx,于是打开Nginx的设置文件nginx.conf,找到此blog的location,加上了

if (-f $request_filename) {
    break;
}
rewrite ^(.*)$ /index.php?$1 last;

修改Wordpress为固定链接形式后重启Nginx,再打开Blog里的文章,变成“漂亮地址”了。
但是用了没多久,就发现了问题:我在登录后并没有转到wordpress的后台,而是提示说文章不存在。仔细一看URL地址,是/wp-admin/,这是wordpress的管理目录,省略了缺省的index.php,因为我用的”-f”(文件是否存在),于是if判断返回的是false,转到了下边的rewrite,把wp-admin当文章处理了。
于是再次修改Rewrite判断为”-e”(文件或目录是否存在)。

if (-e $request_filename) {
    break;
}
rewrite ^(.*)$ /index.php?$1 last;

重启Nginx,再登录后台就没问题了。

使用 nVidia 受限驱动后启动画面分辨率低的解决方法

本文非原创,内容修改自 http://linuxzh.blogbus.com/logs/63350102.html
Ubuntu 10.04, x64 系统。为了使用compiz桌面特效,安装了Nvidia的限制驱动,不过启动画面splash的分辨率由1440*900降低成640*480了。网上看了好多帖子,包括 jorux 的帖子 “解决升级显卡驱动后开机动画低分辨率问题”,一直没有解决问题。
今天终于在英文论坛上找到一个切实可行的办法,并经本人试验,在1440*900的分辨率下确实有效。特与大家分享:
原文地址:http://idyllictux.wordpress.com/2010/04/26/lucidubuntu-10-04-high-resolution-plymouth-virtual-terminal-for-atinvidia-cards-with-proprietaryrestricted-driver/
现简述解决过程:
1. 修改/etc/default/grub文件,使用uvesafb的framebuffer来启动

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# GRUB_GFXMODE=640×480

修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="nomodeset video=uvesafb:mode_option=1440x900-24,mtrr=3,scroll=ywrap"
GRUB_GFXMODE=1440x900

2. 修改/etc/initramfs-tools/modules文件
添加下面这行:

uvesafb mode_option=1440x900-24 mtrr=3 scroll=ywrap

3. 运行下面的命令,启用framebuffer:

echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash

4. 运行下面的命令,更新grub配置文件:

sudo update-grub2
sudo update-initramfs -u

更改 VirtualBox 自动挂载数据空间的位置

Virtualbox 从 4.0 开始支持自动挂载数据空间,在 Linux 为客户机的情况下,Linux 内默认的挂载位置为/media/sf_share (在 Solaris 为 /mnt/sf_share),其中 sf_ 为前缀,share 为共享空间的名称,如果想更改这个默认挂载的位置,可以通过对 /VirtualBox/GuestAdd/SharedFolders/MountPrefix 和 /VirtualBox/GuestAdd/SharedFolders/MountDir 赋予新的值来完成。
以下为更改方法
1. 更改 Virtualbox 自动挂载目录的前缀
sudo VBoxControl guestproperty set /VirtualBox/GuestAdd/SharedFolders/MountPrefix sf_
2. 更改 Virtualbox 的自动挂载位置到home
sudo VBoxControl guestproperty set /VirtualBox/GuestAdd/SharedFolders/MountDir $HOME

我的时间胶囊