Ubuntu下使用Nginx+PHP教程

标签: 技术 nginx PHP 运维 | 发表时间:2011-07-30 15:08 | 作者:Giko 三马
出处:http://www.luochunhui.com

Nginx收到了越来越多的欢迎,已经交广泛的取代了Apache的地位。

接下来已Ubuntu为例,写一个Nginx+php fastcgi指引。

1. Ubuntu 11.04

2. 首先卸载apache2,防止80端口冲突:
sudo apt-get remove apache2-mpm-prefork

3. 安装nginx, php-cgi, 顺便安装上php-apc
sudo apt-get install nginx php5-cgi php-apc

4. 建立/etc/default/php-fastcgi文件,设置fastcgi的启动属性 (若没有该文件,则建立)
vi /etc/default/php-fastcgi
START=yes
EXEC_AS_USER=www-data
FCGI_HOST=localhost
FCGI_PORT=9000
PHP_FCGI_CHILDREN=30
PHP_FCGI_MAX_REQUESTS=1000

参数说明:
本启动选线告知启动器,php执行用户为www-data(比较方便的是,保持其和nginx用户一致);监听本地9000端口,开启30个请求。每个cgi进程在响应1000次请求之后,释放其自身资源重新建立。

5. 建立fastcgi.conf文件。
luo@idooee:/etc/nginx$ sudo vi fastcgi.conf
#fastcgi.conf
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

fastcgi_connect_timeout 1800;
fastcgi_send_timeout 600;
fastcgi_read_timeout 1800;
#fastcgi_ignore_client_abort on;

# Vhosts fastcgi config
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;

6. 建立cgi启动文件:
luo@idooee:/etc/init.d/$ sudo vi /etc/init.d/php-fastcgi
#!/bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description: Start and stop php-cgi in external FASTCGI mode
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="php-cgi in external FASTCGI mode"
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/lsb/init-functions
if [ "$START" != "yes" -a "$1" != "stop" ]; then
log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes"
exit 0
fi
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT"
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- $DAEMON_ARGS || return 2
}

do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
:

7. 增加启动文件可执行权限。
luo@idooee:/etc/init.d/$ sudo chmod +x /etc/init.d/php-fastcgi

8. 启动fastcgi,并检查进程.

luo@idooee:/etc/default$ sudo /etc/init.d/php-fastcgi start
* Starting php-cgi in external FASTCGI mode php-fastcgi
...done.
luo@idooee:/etc/default$
luo@idooee:/etc/default$
luo@idooee:/etc/default$ ps aux | grep php
luo 3562 0.0 0.0 33540 3568 pts/2 S+ 14:50 0:00 vi php-fastcgi
www-data 3591 0.6 0.0 181368 8988 ? Ss 14:54 0:00 /usr/bin/php-cgi -q -b localhost:9000
www-data 3593 0.0 0.0 181368 3780 ? S 14:54 0:00 /usr/bin/php-cgi -q -b localhost:9000
www-data 3594 0.0 0.0 181368 3780 ? S 14:54 0:00 /usr/bin/php-cgi -q -b localhost:9000
www-data 3595 0.0 0.0 181368 3780 ? S 14:54 0:00 /usr/bin/php-cgi -q -b localhost:9000

9. 将php fastcgi作为开机自动启动
sudo update-rc.d php-fastcgi defaults

10. 设置站点

server {
listen 80;
server_name www.idooee.com;
root /data/idooee.com;

location / {
index index.html index.php; ## Allow a static html file to be shown first
#.....
}

location ~ .php$ { ## Execute PHP scripts
if ($request_uri ~ /(downloader|report)$){ # no trailing /, redirecting
rewrite ^(.*)$ $1/ permanent;
}
include /etc/nginx/fastcgi.conf;
}
}

11. 重启nginx, 完成。
sudo nginx -t && sudo /etc/init.d/nginx restart

相关 [ubuntu nginx php] 推荐:

Ubuntu下使用Nginx+PHP教程

- 三马 - 大罗(Giko)技术空间
Nginx收到了越来越多的欢迎,已经交广泛的取代了Apache的地位. 接下来已Ubuntu为例,写一个Nginx+php fastcgi指引. 首先卸载apache2,防止80端口冲突:. 安装nginx, php-cgi, 顺便安装上php-apc. 建立/etc/default/php-fastcgi文件,设置fastcgi的启动属性 (若没有该文件,则建立).

ubuntu下nginx安装手记

- - ITeye博客
Nginx是一个高性能的HTTP和反向代理服务器. Nginx 使用 Unix 下常用的 './configure && make && make install' 过程来编译安装. configure 脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法. 然后,它创建 Makefile 文件.

如何正确配置Nginx+PHP

- - 火丁笔记
对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴. 听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出代价. 假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由.

lnmp去掉nginx上传目录的PHP执行权限

- 木頭 - VPS侦探
LNMP有一个缺点就是目录权限设置上不如Apache,有时候网站程序存在上传漏洞或类似pathinfo的漏洞从而导致被上传了php木马,而给网站和服务器带来比较大危险. 建议将网站目录的PHP权限去掉,当访问上传目录下的php文件时就会返回403错误. 下面VPS侦探详细介绍如何把lnmp环境下去掉指定目录的PHP执行权限.

centos 下 编译安装 nginx + mysql + php 服务

- - CSDN博客系统运维推荐文章
1.6、创建nginx启动脚本. 1.7、修改nginx配置文件. 2.2、创建mysql用户. 2.4、解压安装mysql. #执行三条语句 解决 /bin/rm: cannot remove `libtoolT': No such file or directory. 2.5、修改配置文件并启动数据库.

Nginx+keepalived实现负载均衡和高可用性 in ubuntu

- - ITeye博客
使用Nginx已经有很长一段时间,但是最近才去实践利用Nginx做负载均衡和高可用性. 大致思路:根据keepalived的特性,通过一个虚拟ip来实现主从服务器的切换,如果一台服务器宕机,可以自动切换到另一台备份服务器,从而不影响用户的访问. 以下是我的安装配置步骤,请大家参考指正. 准备两台ubuntu虚拟主机服务器,对应的IP分别是 192.168.1.100   192.168.1.200.

nginx缓存html静态文件,解析php及反向代理IIS的配置

- - 开源软件 - ITeye博客
       Nginx缓存html静态文件 解析php及反向代理IIS的配置,供初学的朋友参考. server_name k; #碰到域名为k的 就交给iis来运行. proxy_pass http://k:8080/;#我的IIS上面的站点即为http://k:8080. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ { #指定缓存文件类型.

全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memcache ... ... (LNMP开发

- - 操作系统 - ITeye博客
重新安装系统,在苹果商店下载好OS X Mavericks安装文件,然后准备一支16G的USB3.0 U盘. 制作 OS X Mavericks 全新安装启动U盘. untitled 是你的u盘盘符,根据实际情况来. 看到上面的信息说明启动盘制作成功. 安装起来so easy :). 安装完成系统之后, 暂时还没有去迁移文件,由于本人喜好摄影,有大量RAW格式的原图在Aperture 的照片库中,尼康D800一张RAW文件有40M左右,到时候迁移照片库和照片流希望不要掉坑里了.

PHP导出excel

- syeye - scofield PHP开发-SEO SEM
最近做一个项目,其中涉及到了数据导成excel的功能. 后来使用了 开源的 PHPExcel  http://phpexcel.codeplex.com/ 目前最新版是1.7.6. PHPExcel 可以生成 .xls 和 .xlsx (office2007). 比如设置 excel的title,keywords,description.

PHP框架 Yaf

- Le - 开源中国社区最新软件
Yaf是一个C语言编写的PHP框架,Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用率, 降低内存占用率. 支持全局和局部两种加载规则, 方便类库共享.