天天看点

LEMP+memcached

               LEMP

一、编译安装nginx

1.安装辅助包

 # yum groupinstall "Development Libraries" "Development Tools"

 # yum install gcc openssl-devel pcre pcre-devel zlib-devel

2.安装nginx

创建用户和组

# groupadd nginx

# useradd -g nginx -s /bin/false -M nginx

# tar xvf nginx-1.1.3.tar.gz

# cd nginx-1.1.3

# ./configure   --prefix=/usr   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/lock/nginx.lock   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --with-pcre

# make && make install

# vim /etc/init.d/nginx

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

# chkconfig:   - 85 15 

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

   # make required directories

   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`

   options=`$nginx -V 2>&1 | grep 'configure arguments:'`

   for opt in $options; do

       if [ `echo $opt | grep '.*-temp-path'` ]; then

           value=`echo $opt | cut -d "=" -f 2`

           if [ ! -d "$value" ]; then

               # echo "creating" $value

               mkdir -p $value && chown -R $user $value

           fi

       fi

   done

}

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    make_dirs

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    [ $retval -eq 0 ] && rm -f $lockfile

restart() {

    configtest || return $?

    stop

    sleep 1

    start

reload() {

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

force_reload() {

    restart

configtest() {

  $nginx -t -c $NGINX_CONF_FILE

rh_status() {

    status $prog

rh_status_q() {

    rh_status >/dev/null 2>&1

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

    restart|configtest)

    reload)

        rh_status_q || exit 7

    force-reload)

        force_reload

    status)

        rh_status

    condrestart|try-restart)

            ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

        exit 2

esac

# chmod +x /etc/init.d/nginx

二、安装mysql(二进制安装)

# tar xvf mysql-5.1.46-linux-i686-glibc23.tar.gz -C /usr/local/

# cd /usr/local/

# ln -sv mysql-5.1.46-linux-i686-glibc23 mysql

# cd mysql

# groupadd mysql

# useradd -g mysql -s /sbin/nologin -M -r mysql

# mkdir /data

# chown -R mysql:mysql /data

# chown mysql:mysql . -R 

# scripts/mysql_install_db --user=mysql --datadir=/data

# chown root . -R  

# cp support-files/my-large.cnf /etc/my.cnf

# vim /etc/my.cnf 

          datadir = /data

#  bin/mysqld_safe --user=mysql &

#  netstat -tnlp

#  vim /etc/profile

     PATH=$PATH:/usr/local/mysql/bin

# . /etc/profile

#  vim /etc/ld.so.conf.d/mysql.conf

    /usr/local/mysql/lib

#  ldconfig -v

#  ln -sv /usr/local/mysql/include/ /usr/include/mysql

#  cp support-files/mysql.server /etc/init.d/mysqld

#  chkconfig --add mysqld

#  chkconfig mysqld on

#  service mysqld restart

三、编译安装php (fastcgi模式)

1、编译安装PHP 5.2.14所需的支持库

# tar xvf libiconv-1.13.1.tar.gz

# cd libiconv-1.13.1  

# ./configure --prefix=/usr/local

# tar xvf libevent-1.4.14b-stable.tar.gz 

# cd libevent-1.4.14b-stable

# ./configure 

# make && make isntall

# tar xvf libmcrypt-2.5.8.tar.gz 

# cd libmcrypt-2.5.8

# ldconfig -v

# cd libltdl/

# ./configure --enable-ltdl-install

# make && make install  

# tar xvf mhash-0.9.9.9.tar.bz2 

# cd mhash-0.9.9.9

# ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la

# ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so

# ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4

# ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8

# ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a

# ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la

# ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so

# ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

# ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

# ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config

2.编译安装php(fastcgi模式)

# tar xvf php-5.2.14.tar.bz2 

yum install libxml2-devel

# gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1

# cd php-5.2.14  

# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap

# make ZEND_EXTRA_LIBS='-liconv'  ##可能是因为机器没有安装libiconv之类的库,怕编译出错,所以不为php加入iconv模块吧。

# make install

# cp php.ini-dist /usr/local/php/etc/php.ini

3.安装php的一些扩展模块儿

# tar xvf mcrypt-2.6.8.tar.gz 

# cd mcrypt-2.6.8

# /sbin/ldconfig 

# tar zxvf memcache-2.2.5.tgz

# cd memcache-2.2.5/

# /usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config

# make

# tar jxvf eaccelerator-0.9.6.1.tar.bz2

# cd eaccelerator-0.9.6.1/

# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config

# tar zxvf PDO_MYSQL-1.0.2.tgz

# cd PDO_MYSQL-1.0.2/

# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql

# tar xvf ImageMagick-6.5.1-2.tar.bz2 

# cd ImageMagick-6.5.1-2/

# ./configure

# tar zxvf imagick-2.3.0.tgz

# cd imagick-2.3.0/

4.修改php.ini文件

# vim /usr/local/php/etc/php.ini

   查找    extension_dir = "./"

修改为  extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

并在此行后增加以下几行,然后保存:

extension = "memcache.so"

extension = "pdo_mysql.so"

extension = "imagick.so"

  再查找   output_buffering = Off

修改为   output_buffering = On

  再查找   ;cgi.fix_pathinfo=0

修改为   cgi.fix_pathinfo=0    防止Nginx文件类型错误解析漏洞。

5、配置eAccelerator加速PHP

# mkdir -p /usr/local/eaccelerator_cache

 在最后添加以下内容

[eaccelerator]

zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/usr/local/eaccelerator_cache"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

6. 创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):

# mv /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php-fpm.conf.bak

# vim /usr/local/php/etc/php-fpm.conf

<?xml version="1.0" ?>

<configuration>

  All relative paths in this config are relative to php's install prefix

  <section name="global_options">

    Pid file

    <value name="pid_file">/usr/local/php/logs/php-fpm.pid</value>

    Error log file

    <value name="error_log">/usr/local/php/logs/php-fpm.log</value>

    Log level

    <value name="log_level">notice</value>

    When this amount of php processes exited with SIGSEGV or SIGBUS ...

    <value name="emergency_restart_threshold">10</value>

    ... in a less than this interval of time, a graceful restart will be initiated.

    Useful to work around accidental curruptions in accelerator's shared memory.

    <value name="emergency_restart_interval">1m</value>

    Time limit on waiting child's reaction on signals from master

    <value name="process_control_timeout">5s</value>

    Set to 'no' to debug fpm

    <value name="daemonize">yes</value>

  </section>

  <workers>

    <section name="pool">

      Name of pool. Used in logs and stats.

      <value name="name">default</value>

      Address to accept fastcgi requests on.

      Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'

      <value name="listen_address">127.0.0.1:9000</value>

      <value name="listen_options">

        Set listen(2) backlog

        <value name="backlog">-1</value>

        Set permissions for unix socket, if one used.

        In Linux read/write permissions must be set in order to allow connections from web server.

        Many BSD-derrived systems allow connections regardless of permissions.

        <value name="owner"></value>

        <value name="group"></value>

        <value name="mode">0666</value>

      </value>

      Additional php.ini defines, specific to this pool of workers.

      <value name="php_defines">

        <value name="sendmail_path">/usr/sbin/sendmail -t -i</value>

        <value name="display_errors">0</value>

      Unix user of processes

      <value name="user">nginx</value>

      Unix group of processes

      <value name="group">nginx</value>

      Process manager settings

      <value name="pm">

        Sets style of controling worker process count.

        Valid values are 'static' and 'apache-like'

        <value name="style">static</value>

        Sets the limit on the number of simultaneous requests that will be served.

        Equivalent to Apache MaxClients directive.

        Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi

        Used with any pm_style.

        <value name="max_children">64</value>

        Settings group for 'apache-like' pm style

        <value name="apache_like">

          Sets the number of server processes created on startup.

          Used only when 'apache-like' pm_style is selected

          <value name="StartServers">20</value>

          Sets the desired minimum number of idle server processes.

          <value name="MinSpareServers">5</value>

          Sets the desired maximum number of idle server processes.

          <value name="MaxSpareServers">35</value>

        </value>

      The timeout (in seconds) for serving a single request after which the worker process will be terminated

      Should be used when 'max_execution_time' ini option does not stop script execution for some reason

      '0s' means 'off'

      <value name="request_terminate_timeout">0s</value>

      The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file

      <value name="request_slowlog_timeout">0s</value>

      The log file for slow requests

      <value name="slowlog">logs/slow.log</value>

      Set open file desc rlimit

      <value name="rlimit_files">65535</value>

      Set max core size rlimit

      <value name="rlimit_core">0</value>

      Chroot to this directory at the start, absolute path

      <value name="chroot"></value>

      Chdir to this directory at the start, absolute path

      <value name="chdir"></value>

      Redirect workers' stdout and stderr into main error log.

      If not set, they will be redirected to /dev/null, according to FastCGI specs

      <value name="catch_workers_output">yes</value>

      How much requests each process should execute before respawn.

      Useful to work around memory leaks in 3rd party libraries.

      For endless request processing please specify 0

      Equivalent to PHP_FCGI_MAX_REQUESTS

      <value name="max_requests">1024</value>

      Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.

      Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)

      Makes sense only with AF_INET listening socket.

      <value name="allowed_clients">127.0.0.1</value>

      Pass environment variables like LD_LIBRARY_PATH

      All $VARIABLEs are taken from current environment

      <value name="environment">

        <value name="HOSTNAME">$HOSTNAME</value>

        <value name="PATH">/usr/local/bin:/usr/bin:/bin</value>

        <value name="TMP">/tmp</value>

        <value name="TMPDIR">/tmp</value>

        <value name="TEMP">/tmp</value>

        <value name="OSTYPE">$OSTYPE</value>

        <value name="MACHTYPE">$MACHTYPE</value>

        <value name="MALLOC_CHECK_">2</value>

    </section>

  </workers>

</configuration>

7.启动php-cgi进程,监听127.0.0.1的9000端口,进程数为64(如果服务器内存大于3GB,可以只开启128个进程或者更高,这个根据自己的配置来修改)

# ulimit -SHn 65535

# /usr/local/php/sbin/php-fpm start

# vim /etc/nginx/fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

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;

# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param  REDIRECT_STATUS    200;

四、配置nginx以提供服务

编辑配置文件

# vim /etc/nginx/nginx.conf

#####以下是本人的配置文档,仅供参考

#user  nobody;

worker_processes 4;

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events 

{

  worker_connections 51200;

http 

  include       mime.types;

  default_type  application/octet-stream;

  #charset  gb2312;

  server_names_hash_bucket_size 128;

  client_header_buffer_size 32k;

  large_client_header_buffers 4 32k;

  client_max_body_size 8m;

  sendfile on;

  tcp_nopush     on;

  keepalive_timeout 60;

  tcp_nodelay on;

  fastcgi_connect_timeout 300;

  fastcgi_send_timeout 300;

  fastcgi_read_timeout 300;

  fastcgi_buffer_size 64k;

  fastcgi_buffers 4 64k;

  fastcgi_busy_buffers_size 128k;

  fastcgi_temp_file_write_size 128k;

  gzip on;

  gzip_min_length  1k;

  gzip_buffers     4 16k;

  gzip_http_version 1.0;

  gzip_comp_level 2;

  gzip_types       text/plain application/x-javascript text/css application/xml;

  gzip_vary on;

  #limit_zone  crawler  $binary_remote_addr  10m;

  server

  {

    listen       80;

    server_name  192.168.0.90;

    index index.html index.htm index.php;

    root  /nginx;

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fastcgi.conf;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

      expires      30d;

    location ~ .*\.(js|css)?$

      expires      1h;

    }   

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

              '$status $body_bytes_sent "$http_referer" '

              '"$http_user_agent" $http_x_forwarded_for';

    access_log  /nginx/logs/access.log  access;

      }

创建日志目录

# mkdir -pv /nginx/logs

# mkdir /var/tmp/nginx/nginx.conf -pv

编辑php测试页

# cd /nginx

# vim index.php

  <?php

  phpinfo();

  ?>  

启动nginx

# service nginx restart

测试

<a href="http://192.168.0.177/">http://192.168.0.177</a>

OK 完美的显示

本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/670348,如需转载请自行联系原作者

继续阅读