nginx+phpfastcgi

餘二五發表於2017-11-16

linux  nginx  php fastcgi fpm 編譯安裝

 

軟體列表

eaccelerator-0.9.6.1.tar.bz2

fontconfig-2.6.0.tar.gz

freetype-2.3.7.tar.gz

gd-2.0.33.tar.gz

gettext-0.17.tar.gz

jpegsrc.v6b.tar.gz

libevent-1.4.14b-stable.tar.gz

libmcrypt-2.5.6.tar.gz

libpng-1.2.35.tar.gz

libxml2-2.6.30.tar.gz

mcrypt-2.6.4.tar.gz

memcache-2.2.5.tgz

memcached-1.4.5.tar.gz

mhash-0.9.8.tar.gz

mysql-5.1.32.tar.gz

nginx-0.8.43.tar.gz

pcre-8.10.zip

PDO_MYSQL-1.0.2.tgz

php-5.2.6-fpm-0.5.9.diff.gz

php-5.2.6.tar.gz

ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz

zlib-1.2.3.tar.gz

##############################################install##################################################

tar zxvf libmcrypt-2.5.6.tar.gz

cd libmcrypt-2.5.6/

./configure

make

make install

/sbin/ldconfig

cd libltdl/

./configure –enable-ltdl-install

make

make install

cd ../../

tar zxvf mhash-0.9.8tar.gz

cd mhash-0.9.8/

./configure

make

make install

cd ../

echo “/usr/local/lib/” >> /etc/ld.so.conf

/sbin/ldconfig

安裝mcrypt的時候需要mhash和libmcrypt的lib庫,所以在這裡共享一下

tar zxvf mcrypt-2.6.4.tar.gz

cd mcrypt-2.6.4/

/sbin/ldconfig

./configure

make

make install

cd ../

groupadd mysql                                 //建立組

useradd -g mysql -s /sbin/nologin -M mysql     //新建使用者並新增到mysql組中,拒絕作為本地使用者登陸shell

tar zxf mysql-5.1.32.tar.gz

cd  mysql-5.1.32

./configure –prefix=/app/mysql –with-charset=utf8 –with-extra-charsets=all –with-tcp-port=3306 –with-plugins=all –with-unix-socket-path=/tmp/mysql.sock –with-mysqld-user=mysql –enable-local-infile –with-big-tables

–prefix=/app/mysql                          //mysql的安裝路徑

–with-charset=utf8                          //資料庫字符集使用utf-8

–with-extra-charsets=all                    //支援多言語

–with-tcp-port=3306                         //mysql的通訊埠

–with-plugins=all                           //新增所有資料引擎的支援

–with-unix-socket-path=/tmp/mysql.sock      //mysql的套接字路徑

–with-mysqld-user=mysql                     //指定資料使用者為mysql

–enable-local-infile                        //啟用資料庫的本地負載資訊

–with-big-tables                            //支援4G的表

make

make install

cp mysql-5.1.30/support-files/my-medium.cnf /etc/my.cnf   

//拷貝mysql的模板配置檔案

/app/mysql/bin/mysql_install_db –user=mysql             

//使用mysql使用者初始化mysql資料庫

cd /app/mysql

chown -R root .          //更改mysql目錄下所有目錄的屬主為root使用者

chgrp -R mysql .         //更改mysql目錄下所有目錄的屬組為mysql使用者

cd /app/mysql/var

chown -R  mysql.mysql  .

//更改mysql資料庫資料夾的屬主和屬組為mysql使用者

cp /app/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

//複製mysql的啟動指令碼檔案到init下面

chkconfig –add mysqld

//新增mysqld為系統服務

chkconfig –level 3 mysqld on

//配置mysqld在系統的執行級別3下開機自動啟動

service mysqld start

//啟動mysql服務

mysqladmin -u root password `newpassword`                     

//設定mysql資料庫root的密碼

###############php的支援庫#################

tar -zxf jpegsrc.v6b.tar.gz

cd jpeg-6b

mkdir /app/jpeg6

mkdir /app/jpeg6/bin

mkdir /app/jpeg6/lib

mkdir /app/jpeg6/include

mkdir /app/jpeg6/man

mkdir /app/jpeg6/man/man1

64位的系統需要拷貝兩個檔案

在jpeg6的原始碼目錄下操作

cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .



./configure –prefix=/app/jpeg6/ –enable-shared –enable-static

Make

Make install

tar -zxf libpng-1.2.33.tar.gz

cd libpng-1.2.33

./configure –prefix=/app/libpng

make

make install

tar -zxf freetype-2.3.5.tar.gz

cd freetype-2.3.5

./configure –prefix=/app/freetype

make

make install

tar -zxf fontconfig-2.6.0.tar.gz

cd fontconfig-2.6.0

./configure–prefix=/app/fontconfig–enable-libxml2–with-freetype-config=/app/freetype/bin/freetype-config

Make

Make install

tar -zxf gd-2.0.33.tar.gz

cd gd-2.0.33

./configure –prefix=/app/gd2 –with-png=/app/libpng/ –with-freetype=/app/freetype/ –with-fontconfig=/app/fontconfig/ –with-jpeg=/app/jpeg6/

** Configuration summary for gd 2.0.33:   

   Support for PNG library:             yes

   Support for JPEG library:            yes

   Support for Freetype 2.x library:    yes

   Support for Fontconfig library:      yes

   Support for Xpm library:             no

   Support for pthreads:                yes

vi gd_png.c

修改#include “png.h” 成#include “/app/libpng/include/png.h” linpng的絕對路徑

Make

Make install

tar -zxf zlib-1.2.3.tar.gz

cd zlib-1.2.3

64位的系統需要以下方法編譯

CFLAGS=”-O3 -fPIC” ./configure   //使用64位元的方法進行編譯

32位的



./configure –prefix=/app/zlib

Make

Make install

tar -zxf libxml2-2.6.30.tar.gz

cd libxml2-2.6.30

./configure –prefix=/app/libxml –with-zlib=/app/zlib/

Make

Make install

tar -zxf gettext-0.17.tar.gz

cd gettext-0.17

./configure –prefix=/app/gettext –with-libxml2-prefix=/app/libxml/

Make

Make install

tar zxf php-5.2.6.tar.gz

gzip -cd php-5.2.6-fpm-0.5.9.diff.gz | patch -d php-5.2.6 -p1

//給php打上fpm的補丁,補丁程式下載的時候最好能和php的版本對應上,fpm是php的fastcgi的管理工具

cd php-5.2.6

./configure –prefix=/app/php –with-config-file-path=/etc/ –with-mysql=/app/mysql/ –with-gd=/app/gd2/ –with-libxml-dir=/app/libxml/include/libxml2/libxml/ –with-gettext=/app/gettext/ –with-freetype-dir=/app/freetype/ –with-zlib-dir=/app/zlib –with-jpeg-dir=/app/jpeg6/ –with-png-dir=/app/libpng/ –with-mysql-sock=/tmp/mysql.sock –enable-zend-multibyte –enable-mbstring –enable-sockets –enable-ftp –with-bz2 –enable-soap –enable-fastcgi –enable-fpm –enable-force-cgi-redirect –with-mcrypt –with-mhash

cp php.ini-dist /etc/php.ini

tar zxf libevent-1.4.14b-stable.tar.gz 

cd libevent-1.4.14b-stable

./configure –prefix=/app/libevent

make 

make install

tar zxf memcached-1.4.5.tar.gz 

cd memcached-1.4.5

./configure –prefix=/app/memcached –with-libevent=/app/libevent/

make

make install

/app/memcached/bin/memcached -d -m 128 -u root -l 172.16.6.165 -p 1111 -c 256 -P /tmp/memcached.pid

-d選項是啟動一個守護程式,

-m是分配給Memcache使用的記憶體數量,單位是MB,我這裡是128MB,

-u是執行Memcache的使用者,我這裡是root,

-l是監聽的伺服器IP地址,如果有多個地址的話,我這裡指定了伺服器的IP地址192.168.1.9,

-p是設定Memcache監聽的埠,我這裡設定了1111,最好是1024以上的埠,

-c選項是最大執行的併發連線數,預設是1024,我這裡設定了256,按照你伺服器的負載量來設定,

-P是設定儲存Memcache的pid檔案,我這裡是儲存在 /tmp/memcached.pid,

tar zxf memcache-2.2.5.tgz 

cd memcache-2.2.5

/app/php/bin/phpize 

./configure –with-php-config=/app/php/bin/php-config 

make

make test

make install

tar jxf eaccelerator-0.9.6.1.tar.bz2 

cd eaccelerator-0.9.6.1

/app/php/bin/phpize 

./configure –enable-eaccelerator=shared –with-php-config=/app/php/bin/php-config 

make

make install

tar zxf PDO_MYSQL-1.0.2.tgz 

cd PDO_MYSQL-1.0.2

/app/php/bin/phpize 

./configure –with-php-config=/app/php/bin/php-config –with-pdo-mysql=/app/mysql/

make

make install

groupadd www

useradd -g www -s /sbin/nologin www

chown -R www.www /opt/www/

unzip pcre-8.10.zip

cd pcre-8.10

./configure –prefix=/app/pcre –enable-utf8

make

make install

tar zxf nginx-0.8.43.tar.gz 

cd nginx-0.8.43

./configure –prefix=/app/nginx –user=www –group=www –with-http_stub_status_module –with-http_ssl_module –with-pcre=/back/pcre-8.10

安裝nginx的時候注意一下pcre的路徑是解壓的目錄而不是安裝目錄別搞錯了,如果你不加–with-pcre的引數,預設會找到系統自帶的pcre

make

make install

#####################################################configure############################################

修改php.ini檔案

手工修改:查詢/etc/php.ini中的extension_dir = “./”

修改為extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”

並在此行後增加以下幾行,然後儲存:

extension = “memcache.so”

extension = “pdo_mysql.so”

再查詢output_buffering = Off

修改為output_buffering = On

再查詢; cgi.fix_pathinfo=0

修改為cgi.fix_pathinfo=0,防止Nginx檔案型別錯誤解析漏洞。

[eaccelerator]

zend_extension=”/app/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”

eaccelerator.shm_size=”30″                                

#這個值對應系統的/proc/sys/kernel/shmmax 檔案,是允許使用的共享記憶體總量,該檔案表示核心所允許的最大共享記憶體段的大小(bytes)。

#預設設定:33554432

#建議設定:實體記憶體 * 50%

eaccelerator.cache_dir=”/app/php/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″

vi /app/php/etc/php-fpm.conf修改fpm的配置檔案

<value name=”listen_address”>127.0.0.1:9000</value>   這行是fpm的監聽地址和埠

<value name=”display_errors”>0</value>                顯示錯誤資訊

<value name=”user”>www</value>                        啟動fpm的使用者

<value name=”group”>www</value>                       啟動fpm的組

<value name=”max_children”>10</value>                 啟動的fast-cgi程式數

vi /app/nginx/conf/nginx.conf

user www www;

worker_processes 4;

error_log  /var/log/nginx_error.log  crit;

#Specifies the value for maximum file descriptors that can be opened by this process.

worker_rlimit_nofile 65535;

events

{

  use epoll;

  worker_connections 65535;

}

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  172.16.6.165;

    index index.php;

    root  /opt/www;

    #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 fcgi.conf;

    }

    

    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  /var/log/access.log  access;

      }

}

vi /app/nginx/conf/fcgi.conf 

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

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_FILENAME    $document_root$fastcgi_script_name;

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  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;

/app/nginx/sbin/nginx -t    測試nginx的配置是否有問題 

/app/nginx/sbin/nginx       啟動nginx服務

/app/php/sbin/php-fpm start 啟動fpm

vi /etc/sysctl.conf

新增以下內容,作為系統的優化引數

net.ipv4.tcp_max_syn_backlog = 65536

net.core.netdev_max_backlog =  32768

net.core.somaxconn = 32768

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1

#net.ipv4.tcp_tw_len = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30

#net.ipv4.tcp_keepalive_time = 120

net.ipv4.ip_local_port_range = 1024  65535

sysctl -p    配置檔案立即生效

本文轉自 走在右邊 51CTO部落格,原文連結:http://blog.51cto.com/gsliuyang/414649,如需轉載請自行聯絡原作者