博采众长,精于一技。Live for love, work for dream.

Ubuntu下安装Nginx + PHP-FPM +MySQL

本文主要参考http://interfacelab.com/nginx-php-fpm-apc-awesome/,部分地方有改动。

Nginx


Nginx一定比Apache好吗?也不能这么说,各有各的优点。

PHP-FPM?

有些人或许会喜欢用Lighttpd中的spawn-fcgi,其实php-fpm比它更优越,详细介绍:http://syre.blogbus.com/logs/20092011.html

Let's go !

我正在使用新的Ubuntu 9.10, 如果你使用的是CentOS,也只需稍微修改一下即可。

第一件事首先,我们安装所有依赖:

sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev

万事俱备,只欠东风。

安装MySQL


由于MySQL源码编译很耗时间,于是采用二进制包安装,方便快捷。
sudo apt-get install mysql-server

然后用新立得软件管理器再安装一个包
libmysqlclient15-dev,用于下面安装支持php连接mysqli。

编译PHP

我们将下载的PHP 5.3.0源,以及PHP的补丁,php-5.3.0-fpm。 然后,我们将给php打上补丁并编译。

cd /usr/local/src/
sudo wget http://cn.php.net/get/php-5.3.0.tar.bz2/from/cn2.php.net/mirror
sudo tar jxvf php-5.3.0.tar.bz2 
sudo wget http://php-fpm.org/downloads/php-5.3.0-fpm-0.5.12.diff.gz
sudo gzip -cd php-5.3.0-fpm-0.5.12.diff.gz | sudo patch -d php-5.3.0 -p1
cd php-5.3.0/
sudo ./configure --enable-fastcgi --enable-force-cgi-redirect --enable-fpm --with-mysql=/usr/bin/mysql --with-mysqli=/usr/bin/mysql_config --enable-session --disable-all
sudo  make all install
sudo  strip /usr/local/bin/php-cgi

以上编译参数可能不适用于正式环境,我为了避免安装一些不必要的包,而精简了编译参数。如果需要安装额外的包,重新编译php也不是很耗时间。(当然,如果你手头上管理几十台机器以上的,不建议这么做,或许你可以尝试一下pecl)

复制php.ini:

sudo cp /usr/local/src/php-5.3.0/php.ini-production /usr/local/lib/php.ini

设置的符号链接,使东西更容易找到:

sudo mkdir /etc/php/
sudo ln -s /usr/local/lib/php.ini /etc/php/php.ini
sudo ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf

编辑/etc/php/php-fpm.conf

<value name="owner">www-data</value>
<value name="group">www-data</value>
#取消以下两行的注释,并修改
<value name="user">www-data</value>
<value name="group">www-data</value>

做完!

安装Nginx

cd ..
sudo wget http://sysoev.ru/nginx/nginx-0.8.21.tar.gz
sudo tar zxvf nginx-0.8.21.tar.gz 
sudo rm -f nginx-0.8.21.tar.gz 
cd nginx-0.8.21
sudo ./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module
sudo make && sudo make install

建立链接:

sudo ln -s /usr/local/nginx/conf /etc/nginx

设置Nginx:

user  www-data;
worker_processes  6;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  10 10;

    gzip  on;
    gzip_comp_level 1;
    gzip_proxied any;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        log_format main '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status  $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx_access.log  main;

        error_log  /var/log/nginx_error.log debug;

        include /usr/local/nginx/sites-enabled/*;
}

设置FastCGI的参数,让PHP不出现死进程,避免503 Nginx的错误。 打开/etc/nginx/fastcgi_params并加入以下内容:
fastcgi_param  SCRIPT_FILENAME    $document_root/$fastcgi_script_name;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

最后创建一个Nginx启动的shell,新建一个文件/etc/init.d/nginx,输入以下代码:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0


不要忘记设置它可执行权限!

设置您的网站

sudo mkdir /usr/local/nginx/sites-enabled
sudo ln -s /usr/local/nginx/sites-enabled /etc/sites

添加/etc/sites/default.conf为默认站点conf文件。 内容:

server {
        listen *:80;

        location / {
                root   /var/www/default/pub;
                index index.php;

                # if file exists return it right away
                if (-f $request_filename) {
                        break;
                }

                # otherwise rewrite the fucker
                if (!-e $request_filename) {
                        rewrite ^(.+)$ /index.php$1 last;
                        break;
                }

        }

        # if the request starts with our frontcontroller, pass it on to fastcgi
        location ~ ^/index.php
        {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME /var/www/default/pub$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                include /usr/local/nginx/conf/fastcgi_params;
        }
}

启动Web Server

sudo php-fpm start
sudo /etc/init.d/nginx start

EOF

日志信息 »

该日志于2009-11-01 01:35由 Rebill 发表在操作系统,运维管理分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过评论 RSS订阅这个日志的所有评论。

相关日志 »

赞助链接 »

仅有一条评论 »

  1. 刚接触nginx,跟apache相比,真麻烦啊。。。

添加新评论 »

返回顶部
无觅相关文章插件,快速提升流量