日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

centos+nginx+php+mysql(经典架构流程案例)

發(fā)布時(shí)間:2025/1/21 数据库 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 centos+nginx+php+mysql(经典架构流程案例) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

 Nginx ("engine x") 是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。 Nginx 是由 Igor Sysoev 為俄羅斯訪(fǎng)問(wèn)量第二的 Rambler.ru 站點(diǎn)開(kāi)發(fā)的,它已經(jīng)在該站點(diǎn)運(yùn)行超過(guò)三年了。Igor 將源代碼以類(lèi)BSD許可證的形式發(fā)布。

  Nginx 超越 Apache 的高性能和穩(wěn)定性,使得國(guó)內(nèi)使用 Nginx 作為 Web 服務(wù)器的網(wǎng)站也越來(lái)越多,其中包括新浪博客、新浪播客、網(wǎng)易新聞、騰訊網(wǎng)、搜狐博客等門(mén)戶(hù)網(wǎng)站頻道,六間房、56.com等視頻分享網(wǎng)站,Discuz!官方論壇、水木社區(qū)等知名論壇,盛大在線(xiàn)、金山逍遙網(wǎng)等網(wǎng)絡(luò)游戲網(wǎng)站,豆瓣、人人網(wǎng)、YUPOO相冊(cè)、金山愛(ài)詞霸、迅雷在線(xiàn)等新興Web 2.0網(wǎng)站。


  Nginx 的官方中文維基:http://wiki.nginx.org/NginxChs


  在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來(lái)使用。根據(jù)我的測(cè)試結(jié)果,Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬(wàn)以上的并發(fā)連接數(shù),相當(dāng)于同等環(huán)境下Apache的10倍。

  根據(jù)我的經(jīng)驗(yàn),4GB內(nèi)存的服務(wù)器+Apache(prefork模式)一般只能處理3000個(gè)并發(fā)連接,因?yàn)樗鼈儗⒄加?GB以上的內(nèi)存,還得為系統(tǒng)預(yù)留1GB的內(nèi)存。我曾經(jīng)就有兩臺(tái)Apache服務(wù)器,因?yàn)樵谂渲梦募性O(shè)置的MaxClients為4000,當(dāng)Apache并發(fā)連接數(shù)達(dá)到3800時(shí),導(dǎo)致服務(wù)器內(nèi)存和Swap空間用滿(mǎn)而崩潰。

  而這臺(tái) Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 服務(wù)器在3萬(wàn)并發(fā)連接下,開(kāi)啟的10個(gè)Nginx進(jìn)程消耗150M內(nèi)存(15M*10=150M),開(kāi)啟的64個(gè)php-cgi進(jìn)程消耗1280M內(nèi)存(20M*64=1280M),加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB內(nèi)存。如果服務(wù)器內(nèi)存較小,完全可以只開(kāi)啟25個(gè)php-cgi進(jìn)程,這樣php-cgi消耗的總內(nèi)存數(shù)才500M。

  在3萬(wàn)并發(fā)連接下,訪(fǎng)問(wèn)Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 服務(wù)器的PHP程序,仍然速度飛快。下圖為Nginx的狀態(tài)監(jiān)控頁(yè)面,顯示的活動(dòng)連接數(shù)為28457(關(guān)于Nginx的監(jiān)控頁(yè)配置,會(huì)在本文接下來(lái)所給出的Nginx配置文件中寫(xiě)明):

  
點(diǎn)擊查看圖片


  我生產(chǎn)環(huán)境下的兩臺(tái)Nginx + PHP5(FastCGI)服務(wù)器,跑多個(gè)一般復(fù)雜的純PHP動(dòng)態(tài)程序,單臺(tái)Nginx + PHP5(FastCGI)服務(wù)器跑PHP動(dòng)態(tài)程序的處理能力已經(jīng)超過(guò)“700次請(qǐng)求/秒”,相當(dāng)于每天可以承受6000萬(wàn)(700*60*60*24=60480000)的訪(fǎng)問(wèn)量(更多信息見(jiàn)此),而服務(wù)器的系統(tǒng)負(fù)載也不高:

 
查看圖片

  2009年9月3日下午2:30,金山游戲《劍俠情緣網(wǎng)絡(luò)版叁》臨時(shí)維護(hù)1小時(shí)(http://kefu.xoyo.com/gonggao/jx3/2009-09-03/750438.shtml),大量玩家上官網(wǎng),論壇、評(píng)論、客服等動(dòng)態(tài)應(yīng)用Nginx服務(wù)器集群,每臺(tái)服務(wù)器的Nginx活動(dòng)連接數(shù)達(dá)到2.8萬(wàn),這是筆者遇到的Nginx生產(chǎn)環(huán)境最高并發(fā)值。

  
查看圖片


  下面是用100個(gè)并發(fā)連接分別去壓生產(chǎn)環(huán)境中同一負(fù)載均衡器VIP下、提供相同服務(wù)的兩臺(tái)服務(wù)器,一臺(tái)為Nginx,另一臺(tái)為Apache,Nginx每秒處理的請(qǐng)求數(shù)是Apache的兩倍多,Nginx服務(wù)器的系統(tǒng)負(fù)載、CPU使用率遠(yuǎn)低于A(yíng)pache:

  你可以將連接數(shù)開(kāi)到10000~30000,去壓Nginx和Apache上的phpinfo.php,這是用瀏覽器訪(fǎng)問(wèn)Nginx上的phpinfo.php一切正常,而訪(fǎng)問(wèn)Apache服務(wù)器的phpinfo.php,則是該頁(yè)無(wú)法顯示。4G內(nèi)存的服務(wù)器,即使再優(yōu)化,Apache也很難在“webbench -c 30000 -t 60 http://xxx.xxx.xxx.xxx/phpinfo.php”的壓力情況下正常訪(fǎng)問(wèn),而調(diào)整參數(shù)優(yōu)化后的Nginx可以。

  webbench 下載地址:http://blog.s135.com/post/288/

  注意:webbench 做壓力測(cè)試時(shí),該軟件自身也會(huì)消耗CPU和內(nèi)存資源,為了測(cè)試準(zhǔn)確,請(qǐng)將 webbench 安裝在別的服務(wù)器上。

  測(cè)試結(jié)果:##### Nginx + PHP #####
引用
[root@localhost webbench-1.5]# webbench -c 100 -t 30 http://192.168.1.21/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.21/phpinfo.php
100 clients, running 30 sec.

Speed=102450 pages/min, 16490596 bytes/sec.
Requests: 51225 susceed, 0 failed.

top - 14:06:13 up 27 days,??2:25,??2 users,??load average: 14.57, 9.89, 6.51
Tasks: 287 total,?? 4 running, 283 sleeping,?? 0 stopped,?? 0 zombie
Cpu(s): 49.9% us,??6.7% sy,??0.0% ni, 41.4% id,??1.1% wa,??0.1% hi,??0.8% si
Mem:?? 6230016k total,??2959468k used,??3270548k free,?? 635992k buffers
Swap:??2031608k total,???? 3696k used,??2027912k free,??1231444k cached


  測(cè)試結(jié)果:#####??Apache + PHP #####
引用
[root@localhost webbench-1.5]# webbench -c 100 -t 30 http://192.168.1.27/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.27/phpinfo.php
100 clients, running 30 sec.

Speed=42184 pages/min, 31512914 bytes/sec.
Requests: 21092 susceed, 0 failed.

top - 14:06:20 up 27 days,??2:13,??2 users,??load average: 62.15, 26.36, 13.42
Tasks: 318 total,?? 7 running, 310 sleeping,?? 0 stopped,?? 1 zombie
Cpu(s): 80.4% us, 10.6% sy,??0.0% ni,??7.9% id,??0.1% wa,??0.1% hi,??0.9% si
Mem:?? 6230016k total,??3075948k used,??3154068k free,?? 379896k buffers
Swap:??2031608k total,????12592k used,??2019016k free,??1117868k cached

  為什么Nginx的性能要比Apache高得多?這得益于Nginx使用了最新的epoll(Linux 2.6內(nèi)核)和kqueue(freebsd)網(wǎng)絡(luò)I/O模型,而Apache則使用的是傳統(tǒng)的select模型。目前Linux下能夠承受高并發(fā)訪(fǎng)問(wèn)的Squid、Memcached都采用的是epoll網(wǎng)絡(luò)I/O模型。

  處理大量的連接的讀寫(xiě),Apache所采用的select網(wǎng)絡(luò)I/O模型非常低效。下面用一個(gè)比喻來(lái)解析Apache采用的select模型和Nginx采用的epoll模型進(jìn)行之間的區(qū)別:

  假設(shè)你在大學(xué)讀書(shū),住的宿舍樓有很多間房間,你的朋友要來(lái)找你。select版宿管大媽就會(huì)帶著你的朋友挨個(gè)房間去找,直到找到你為止。而epoll版宿管大媽會(huì)先記下每位同學(xué)的房間號(hào),你的朋友來(lái)時(shí),只需告訴你的朋友你住在哪個(gè)房間即可,不用親自帶著你的朋友滿(mǎn)大樓找人。如果來(lái)了10000個(gè)人,都要找自己住這棟樓的同學(xué)時(shí),select版和epoll版宿管大媽,誰(shuí)的效率更高,不言自明。同理,在高并發(fā)服務(wù)器中,輪詢(xún)I/O是最耗時(shí)間的操作之一,select和epoll的性能誰(shuí)的性能更高,同樣十分明了。

下載相關(guān)的安裝包


  安裝步驟:
  (系統(tǒng)要求:Linux 2.6+ 內(nèi)核,本文中的Linux操作系統(tǒng)為CentOS 5.3,另在RedHat AS4上也安裝成功)

  一、獲取相關(guān)開(kāi)源程序:
  1、【適用CentOS操作系統(tǒng)】利用CentOS Linux系統(tǒng)自帶的yum命令安裝、升級(jí)所需的程序庫(kù)(RedHat等其他Linux發(fā)行版可從安裝光盤(pán)中找到這些程序庫(kù)的RPM包,進(jìn)行安裝):
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

  2、【適用RedHat操作系統(tǒng)】RedHat等其他Linux發(fā)行版可從安裝光盤(pán)中找到這些程序庫(kù)的RPM包(事先可通過(guò)類(lèi)似“rpm -qa | grep libjpeg”的命令查看所需的RPM包是否存在,通常是“xxx-devel”不存在,需要安裝)。RedHat可以直接利用CentOS的RPM包安裝,以下是RPM包下載網(wǎng)址:
  ①、RedHat AS4 & CentOS 4
  http://mirrors.163.com/centos/4/os/i386/CentOS/RPMS/
  http://mirrors.163.com/centos/4/os/x86_64/CentOS/RPMS/

  ②、RedHat AS5 & CentOS 5
  http://mirrors.163.com/centos/5/os/i386/CentOS/
  http://mirrors.163.com/centos/5/os/x86_64/CentOS/

  ③、RPM包搜索網(wǎng)站
  http://rpm.pbone.net/
  http://www.rpmfind.net/

  ④、RedHat AS4 系統(tǒng)環(huán)境,通常情況下缺少的支持包安裝:
  Ⅰ、i386 系統(tǒng)
wget http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libjpeg-devel-6b-33.i386.rpm
rpm -ivh libjpeg-devel-6b-33.i386.rpm
wget http://blog.s135.com/soft/linux/nginx_php/rpm/i386/freetype-devel-2.1.9-1.i386.rpm
rpm -ivh freetype-devel-2.1.9-1.i386.rpm
wget http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libpng-devel-1.2.7-1.i386.rpm
rpm -ivh libpng-devel-1.2.7-1.i386.rpm

  Ⅱ、x86_64 系統(tǒng)
wget http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libjpeg-devel-6b-33.x86_64.rpm
rpm -ivh libjpeg-devel-6b-33.x86_64.rpm
wget http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/freetype-devel-2.1.9-1.x86_64.rpm
rpm -ivh freetype-devel-2.1.9-1.x86_64.rpm
wget http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libpng-devel-1.2.7-1.x86_64.rpm
rpm -ivh libpng-devel-1.2.7-1.x86_64.rpm


  3、【適用CentOS、RedHat及其它Linux操作系統(tǒng)】下載程序源碼包:
  本文中提到的所有開(kāi)源軟件為截止到2010年07月26日的最新穩(wěn)定版。
  ①、從軟件的官方網(wǎng)站下載:
mkdir -p /data0/software
cd /data0/software
wget http://sysoev.ru/nginx/nginx-0.8.46.tar.gz
wget http://www.php.net/get/php-5.2.14.tar.gz/from/this/mirror
wget http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.3-m3.tar.gz/from/http://mysql.he.net/
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"
wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"
wget http://pecl.php.net/get/memcache-2.2.5.tgz
wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget http://pecl.php.net/get/imagick-2.3.0.tgz

  ②、從blog.s135.com下載(比較穩(wěn)定,只允許在本站,或者在Linux/Unix下通過(guò)Wget、Curl等命令下載以下軟件):
mkdir -p /data0/software
cd /data0/software
wget http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.14.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.14-fpm-0.5.14.diff.gz
wget http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.3-m3.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.1.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
wget http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
wget http://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.3.0.tgz
?

安裝php的支持庫(kù)



  二、安裝PHP 5.2.14(FastCGI模式)
  1、編譯安裝PHP 5.2.14所需的支持庫(kù):
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
make
make install
cd ../

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../

tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install
cd ../

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

tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure (此處如果保錯(cuò),configure: error: *** libmcrypt was not found,可執(zhí)行 export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH 來(lái)解決問(wèn)題)
make
make install
cd ../
?

安裝mysql數(shù)據(jù)庫(kù)



  2、編譯安裝MySQL 5.5.3-m3
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
tar zxvf mysql-5.5.3-m3.tar.gz
cd mysql-5.5.3-m3/
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg
make && make install
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
cd ../


  附:以下為附加步驟,如果你想在這臺(tái)服務(wù)器上運(yùn)行MySQL數(shù)據(jù)庫(kù),則執(zhí)行以下幾步。如果你只是希望讓PHP支持MySQL擴(kuò)展庫(kù),能夠連接其他服務(wù)器上的MySQL數(shù)據(jù)庫(kù),那么,以下兩步無(wú)需執(zhí)行。

  ①、創(chuàng)建MySQL數(shù)據(jù)庫(kù)存放目錄
mkdir -p /data0/mysql/3306/data/
mkdir -p /data0/mysql/3306/binlog/
mkdir -p /data0/mysql/3306/relaylog/
chown -R mysql:mysql /data0/mysql/
  ②、以mysql用戶(hù)帳號(hào)的身份建立數(shù)據(jù)表:
/usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data0/mysql/3306/data --user=mysql
  ③、創(chuàng)建my.cnf配置文件:
vi /data0/mysql/3306/my.cnf
  輸入以下內(nèi)容:
引用
[client]
character-set-server = utf8
port????= 3306
socket??= /tmp/mysql.sock

[mysqld]
character-set-server = utf8
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
user????= mysql
port????= 3306
socket??= /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data0/mysql/3306/data
log-error = /data0/mysql/3306/mysql_error.log
pid-file = /data0/mysql/3306/mysql.pid
open_files_limit????= 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 512M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 246M
max_heap_table_size = 246M
long_query_time = 3
log-slave-updates
log-bin = /data0/mysql/3306/binlog/binlog
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 1G
relay-log-index = /data0/mysql/3306/relaylog/relaylog
relay-log-info-file = /data0/mysql/3306/relaylog/relaylog
relay-log = /data0/mysql/3306/relaylog/relaylog
expire_logs_days = 30
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
interactive_timeout = 120
wait_timeout = 120
skip-name-resolve
#master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
#master-host???? =?? 192.168.1.2
#master-user???? =?? username
#master-password =?? password
#master-port???? =??3306
server-id = 1

innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:256M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0

#log-slow-queries = /data0/mysql/3306/slow.log
#long_query_time = 10

[mysqldump]
quick
max_allowed_packet = 32M

  ④、創(chuàng)建管理MySQL數(shù)據(jù)庫(kù)的shell腳本:
vi /data0/mysql/3306/mysql
  輸入以下內(nèi)容(這里的用戶(hù)名admin和密碼12345678接下來(lái)的步驟會(huì)創(chuàng)建):
#!/bin/sh

mysql_port=3306
mysql_username="admin"
mysql_password="12345678"
function_start_mysql()
{
????printf "Starting MySQL...\n"
????/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/data0/mysql/${mysql_port}/my.cnf 2>&1 > /dev/null &
}

function_stop_mysql()
{
????printf "Stoping MySQL...\n"
????/usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown
}

function_restart_mysql()
{
????printf "Restarting MySQL...\n"
????function_stop_mysql
????sleep 5
????function_start_mysql
}

function_kill_mysql()
{
????kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
????kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}

if [ "$1" = "start" ]; then
????function_start_mysql
elif [ "$1" = "stop" ]; then
????function_stop_mysql
elif [ "$1" = "restart" ]; then
function_restart_mysql
elif [ "$1" = "kill" ]; then
function_kill_mysql
else
????printf "Usage: /data0/mysql/${mysql_port}/mysql {start|stop|restart|kill}\n"
fi

  ⑤、賦予shell腳本可執(zhí)行權(quán)限:
chmod +x /data0/mysql/3306/mysql
  ⑥、啟動(dòng)MySQL:
/data0/mysql/3306/mysql start
  ⑦、通過(guò)命令行登錄管理MySQL服務(wù)器(提示輸入密碼時(shí)直接回車(chē)):
/usr/local/webserver/mysql/bin/mysql -u root -p -S /tmp/mysql.sock
  ⑧、輸入以下SQL語(yǔ)句,創(chuàng)建一個(gè)具有root權(quán)限的用戶(hù)(admin)和密碼(12345678):
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '12345678';
  ⑨、(可選)停止MySQL:
/data0/mysql/3306/mysql stop
?

安裝php,可下載安裝php5.3,不用在打補(bǔ)丁


  3、編譯安裝PHP(FastCGI模式)
tar zxvf php-5.2.14.tar.gz
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/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/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'
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../

  4、編譯安裝PHP5擴(kuò)展模塊
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../

tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.5.1-2/
./configure
make
make install
cd ../

tar zxvf imagick-2.3.0.tgz
cd imagick-2.3.0/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

  5、修改php.ini文件
  手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
  修改為extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
  并在此行后增加以下幾行,然后保存:
  extension = "memcache.so" (在php5.3可能會(huì)報(bào)無(wú)法加載模塊錯(cuò)誤,此處需要輸入絕對(duì)路徑!)
  extension = "pdo_mysql.so"
  extension = "imagick.so
  再查找output_buffering = Off
  修改為output_buffering = On

  再查找; cgi.fix_pathinfo=0
  修改為cgi.fix_pathinfo=0,防止Nginx文件類(lèi)型錯(cuò)誤解析漏洞。

  自動(dòng)修改:若嫌手工修改麻煩,可執(zhí)行以下shell命令,自動(dòng)完成對(duì)php.ini文件的修改:
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\nextension = "pdo_mysql.so"\nextension = "imagick.so"\n#' /usr/local/webserver/php/etc/php.ini
sed -i 's#output_buffering = Off#output_buffering = On#' /usr/local/webserver/php/etc/php.ini
sed -i "s#; always_populate_raw_post_data = On#always_populate_raw_post_data = On#g" /usr/local/webserver/php/etc/php.ini
sed -i "s#; cgi.fix_pathinfo=0#cgi.fix_pathinfo=0#g" /usr/local/webserver/php/etc/php.ini
  6、配置eAccelerator加速PHP:
mkdir -p /usr/local/webserver/eaccelerator_cache
vi /usr/local/webserver/php/etc/php.ini

  按shift+g鍵跳到配置文件的最末尾,加上以下配置信息:
引用
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/webserver/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"

  7、創(chuàng)建www用戶(hù)和組,以及供blog.s135.com和www.s135.com兩個(gè)虛擬主機(jī)使用的目錄:
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
mkdir -p /data0/htdocs/blog
chmod +w /data0/htdocs/blog
chown -R www:www /data0/htdocs/blog
mkdir -p /data0/htdocs/www
chmod +w /data0/htdocs/www
chown -R www:www /data0/htdocs/www

  8、創(chuàng)建php-fpm配置文件(php-fpm是為PHP打的一個(gè)FastCGI管理補(bǔ)丁,可以平滑變更php.ini配置而無(wú)需重啟php-cgi):
  在/usr/local/webserver/php/etc/目錄中創(chuàng)建php-fpm.conf文件:
rm -f /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf

  輸入以下內(nèi)容(如果您安裝 Nginx + PHP 用于程序調(diào)試,請(qǐng)將以下的0改為1,以便顯示PHP錯(cuò)誤信息,否則,Nginx 會(huì)報(bào)狀態(tài)為500的空白錯(cuò)誤頁(yè)):



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

??

????Pid file
????/usr/local/webserver/php/logs/php-fpm.pid

????Error log file
????/usr/local/webserver/php/logs/php-fpm.log

????Log level
????notice

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

????... 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.
????1m

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

????Set to 'no' to debug fpm
????yes

??

??

????

??????Name of pool. Used in logs and stats.
??????default

??????Address to accept fastcgi requests on.
??????Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
??????127.0.0.1:9000
??????
????????Set listen(2) backlog
????????-1

????????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.
????????
????????
????????0666
??????

??????Additional php.ini defines, specific to this pool of workers.
??????
????????/usr/sbin/sendmail -t -i
????????0
??????

??????Unix user of processes
??????www
??????Unix group of processes
??????www

??????Process manager settings
??????

????????Sets style of controling worker process count.
????????Valid values are 'static' and 'apache-like'
????????static

????????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.
????????128
????????Settings group for 'apache-like' pm style
????????
??????????Sets the number of server processes created on startup.
??????????Used only when 'apache-like' pm_style is selected
??????????20
??????????Sets the desired minimum number of idle server processes.
??????????Used only when 'apache-like' pm_style is selected
??????????5
??????????Sets the desired maximum number of idle server processes.
??????????Used only when 'apache-like' pm_style is selected
??????????35
????????
??????
??????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'
??????0s
??????The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
??????'0s' means 'off'
??????0s
??????The log file for slow requests
??????logs/slow.log
??????Set open file desc rlimit
??????65535
??????Set max core size rlimit
??????0

??????Chroot to this directory at the start, absolute path
??????

??????Chdir to this directory at the start, absolute path
??????

??????Redirect workers' stdout and stderr into main error log.
??????If not set, they will be redirected to /dev/null, according to FastCGI specs
??????yes

??????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
??????1024

??????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.
??????127.0.0.1

??????Pass environment variables like LD_LIBRARY_PATH
??????All $VARIABLEs are taken from current environment
??????
????????$HOSTNAME
????????/usr/local/bin:/usr/bin:/bin
????????/tmp
????????/tmp
????????/tmp
????????$OSTYPE
????????$MACHTYPE
????????2
??????

????

??


  9、啟動(dòng)php-cgi進(jìn)程,監(jiān)聽(tīng)127.0.0.1的9000端口,進(jìn)程數(shù)為128(如果服務(wù)器內(nèi)存小于3GB,可以只開(kāi)啟64個(gè)進(jìn)程),用戶(hù)為www:
ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm start

  注:/usr/local/webserver/php/sbin/php-fpm還有其他參數(shù),包括:start|stop|quit|restart|reload|logrotate,修改php.ini后不重啟php-cgi,重新加載配置文件使用reload。
?

安裝nginx



  三、安裝Nginx 0.8.46
  1、安裝Nginx所需的pcre庫(kù):
tar zxvf pcre-8.10.tar.gz
cd pcre-8.10/
./configure
make && make install
cd ../

  2、安裝Nginx
tar zxvf nginx-0.8.46.tar.gz
cd nginx-0.8.46/
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../

  3、創(chuàng)建Nginx日志目錄
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs

?? 4、創(chuàng)建Nginx配置文件
  ①、在/usr/local/webserver/nginx/conf/目錄中創(chuàng)建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf

  輸入以下內(nèi)容:
引用
user??www www;

worker_processes 8;

error_log??/data1/logs/nginx_error.log??crit;

pid????????/usr/local/webserver/nginx/nginx.pid;

#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??blog.s135.com;
????index index.html index.htm index.php;
????root??/data0/htdocs/blog;

????#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;
????}
????
????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??/data1/logs/access.log??access;
??????}

??server
??{
????listen?????? 80;
????server_name??www.s135.com;
????index index.html index.htm index.php;
????root??/data0/htdocs/www;

????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??wwwlogs??'$remote_addr - $remote_user [$time_local] "$request" '
?????????????? '$status $body_bytes_sent "$http_referer" '
?????????????? '"$http_user_agent" $http_x_forwarded_for';
????access_log??/data1/logs/wwwlogs.log??wwwlogs;
??}

??server
??{
????listen??80;
????server_name??status.blog.s135.com;

????location / {
????stub_status on;
????access_log?? off;
????}
??}
}

  ②、在/usr/local/webserver/nginx/conf/目錄中創(chuàng)建fcgi.conf文件:
vi /usr/local/webserver/nginx/conf/fcgi.conf

  輸入以下內(nèi)容:
引用
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;

  5、啟動(dòng)Nginx
ulimit -SHn 65535
/usr/local/webserver/nginx/sbin/nginx
  四、配置開(kāi)機(jī)自動(dòng)啟動(dòng)Nginx + PHP
vi /etc/rc.local

  在末尾增加以下內(nèi)容:
引用
ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm start
/usr/local/webserver/nginx/sbin/nginx

?

內(nèi)核優(yōu)化


  五、優(yōu)化Linux內(nèi)核參數(shù)
vi /etc/sysctl.conf

  在末尾增加以下內(nèi)容:
引用
# Add
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

  使配置立即生效:
/sbin/sysctl -p

  六、在不停止Nginx服務(wù)的情況下平滑變更Nginx配置
  1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,請(qǐng)執(zhí)行以下命令檢查配置文件是否正確:
/usr/local/webserver/nginx/sbin/nginx -t

  如果屏幕顯示以下兩行信息,說(shuō)明配置文件正確:
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully

  2、平滑重啟:
  ①、對(duì)于Nginx 0.8.x版本,現(xiàn)在平滑重啟Nginx配置非常簡(jiǎn)單,執(zhí)行以下命令即可:
/usr/local/webserver/nginx/sbin/nginx -s reload


  ②、對(duì)于Nginx 0.8.x之前的版本,平滑重啟稍微麻煩一些,按照以下步驟進(jìn)行即可。輸入以下命令查看Nginx主進(jìn)程號(hào):
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

  屏幕顯示的即為Nginx主進(jìn)程號(hào),例如:
  6302
  這時(shí),執(zhí)行以下命令即可使修改過(guò)的Nginx配置文件生效:
kill -HUP 6302

  或者無(wú)需這么麻煩,找到Nginx的Pid文件:
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`

  七、編寫(xiě)每天定時(shí)切割Nginx日志的腳本
  1、創(chuàng)建腳本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
  輸入以下內(nèi)容:
引用
#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
  2、設(shè)置crontab,每天凌晨00:00切割nginx訪(fǎng)問(wèn)日志
crontab -e

  輸入以下內(nèi)容:
引用
00 00 * * * /bin/bash??/usr/local/webserver/nginx/sbin/cut_nginx_log.sh



  本文若有小的修改,會(huì)第一時(shí)間在以下網(wǎng)址發(fā)布:
  http://blog.s135.com/nginx_php_v6/
?

轉(zhuǎn)載于:https://blog.51cto.com/daniang/846809

總結(jié)

以上是生活随笔為你收集整理的centos+nginx+php+mysql(经典架构流程案例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。