本文爲實戰操做過程的全程記錄,採用一臺新建立的linode vps(512M內存)環境,操做系統採用centos 6.2,以從源碼編譯的方式安裝配置nginx, php(fast-cgi模式)web環境。php
咱們的目標:配置一臺高性能、安全的web服務器。所需軟件以下:html
Nginx(英文) Nginx(簡體中文) 公認的高性能web服務器[下載 http://nginx.org/en/download.html]node
PHP 應用最普遍的web開發語言[下載 http://www.php.net/downloads.php]mysql
MySQL 普遍應用於web服務器上的數據庫,速度快[下載 http://www.mysql.com/downloads/mysql/]linux
phpMyAdmin 使用php開發的基於web的MySQL管理工具 [下載 http://www.phpmyadmin.net/home_page/downloads.php]nginx
個人這臺vps主機名爲fsvps,有一個普通用戶名爲feng,一般我就使用這個用戶登陸管理,只有須要使用root身份時才su切換到管理員,只要再也不須要使用root權限就退回到普通用戶下。建議你也這樣操做,以避免誤操做形成不可挽回的災難。c++
經過ssh(windows下可使用putty,建議去官方下載英文原版)登陸服務器,確保已經安裝過過以下的必要的軟件(linux下軟件編譯環境)web
咱們先作最簡單的,安裝mysql. 由於咱們不打算本身編譯它,使用centos的yum安裝就能夠了。固然,若是你願意,徹底是能夠的,參看這裏{從源碼編譯並安裝mysql數據庫[本文待寫]}sql
centos下,只須要一條命令就能夠安裝mysql服務器,執行su,按提示輸入root密碼,切換到root身份,而後運行yum install mysql-server數據庫
[feng@fsvps ~]$ su [root@fsvps feng]# yum install mysql-server mysql-devel -y
yum安裝了好幾個包,其中
mysql-server-5.1.61-1.el6_2.1.i686.rpm 纔是咱們平時說的mysql;
mysql-5.1.61-1.el6_2.1.i686.rpm是命令行界面的mysql客戶端,咱們能夠用它在服務器上建立數據庫,管理mysql用戶等,但咱們一般使用更好用的phpMyAdmin;
mysql-devel-5.1.61-1.el6_2.1.i686.rpm則是mysql客戶端源碼的開發頭文件,接下來編譯php時要用的,因此安裝mysql這一步要先作。
yum還安裝好幾個依賴包,如mysql-5.1.61-1.el6_2.1.i686.rpm, openssl-1.0.0-20.el6_2.5.i686.rpm, zlib-devel-1.2.3-27.el6.i686.rpm, openssl-devel-1.0.0-20.el6_2.5.i686.rpm等幾個在php編譯也會用到。
注:這裏的幾個包,你在操做時,其版本號可能不徹底一致,這是由於yum源裏的包會不按期升級,但不影響咱們接下來的編譯過程。
咱們啓動mysql服務,mysqld將完成初始化操做。運行 /etc/init.d/mysqld start 以下
[root@fsvps feng]# /etc/init.d/mysqld start ...../usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h fsvps password 'new-password' ..... [肯定] 正在啓動 mysqld: [肯定]
注意消息裏有如上斜體顯示的部分。這時候,你的mysql的root用戶仍是空密碼的,這很是不安全的,斜體行就是修改root密碼的命令。假設我要把mysql 的 root密碼修改爲 Path8.net ,執行命令以下:
[root@fsvps feng]# /usr/bin/mysqladmin -u root password 'Path8.net'
[tips] 注意,mysql的root用戶與linux系統的root用戶是沒有任何關係的,mysql 的root用戶只用於登陸mysql服務器。最好給他們設置成不一樣的密碼,這樣會安全一點。
試着登陸一下,確認root密碼已修改爲功:
[root@fsvps feng]# mysql -uroot -pPath8.net Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.1.61 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
你沒看錯,mysql -uroot -pPath8.net 這行命令裏, -u 與 -p 後面沒必要要加空格
若是你看到上面最後一行的 mysql> 提示符,說明已經成功登陸。輸入執行 show variables; 感覺一下mysql
mysql> show variables; +-----------------------------------------+------------------+ | Variable_name | Value | +-----------------------------------------+------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | ON | .......(下略)
列出了不少變量,咱們優化MySQL,主要是就是靠修改這些參數實現的。
輸入exit ,退出mysql客戶端。mysql安裝配置至此結束,這一步簡單吧!
接下來編譯Nginx,稍微複雜一點,照着作,確定能夠很順利完成。
[強烈建議]若是你還在使用root用戶,建議你執行exit退出root身份,使用普通用戶的身份繼續操做。
進入該普通用戶的家目錄,建兩個目錄 source 與 build ,分別用於存儲下載的源代碼及做爲編譯的工做目錄。固然放到其它目錄下也能夠,名字也能夠任意取,只要方便使用管理。
[root@fsvps feng]# mkdir source build
你沒看錯,一條命令就建了這兩個目錄。進入build目錄
[root@fsvps feng]# cd build/
由於nginx須要安裝一個叫PCRE的軟件,在centos上可能找不到。筆者的經驗是,就算你經過yum 安裝了這個包,nginx也不認。那咱們就本身編譯安裝它。這個包的編譯安裝很簡單,正好咱們拿它練練手,熟悉熟悉linux編譯安裝軟件的通常過程。
[tips] linux下從源碼編譯安裝軟件通常是三步:配置、編譯、安裝。具體一點說就依次是執行三條命令:configure, make, make install. 很少講理論,實際操做一下就明白了。
在build目錄下建立子目錄pcre
[feng@fsvps build]$ mkdir pcre [feng@fsvps build]$ cd pcre
使用wget 工具從pcre官方下載 pcre 包,下載連接爲 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip,將它解壓縮到pcre目錄下
[feng@fsvps build]$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip
幾秒鐘就能夠下載完成。(若是提示 bash: wget: command not found 那是你尚未安裝wget,切換到root用戶,yum install wget -y 安裝之)
[feng@fsvps pcre]$ ls pcre-8.21.zip
看一下,剛下載的 pcre源碼包,這是個zip包,使用unzip命令解壓縮之
[feng@fsvps pcre]$ unzip pcre-8.21.zip [feng@fsvps pcre]$ ll 總用量 1680 drwxr-xr-x 6 feng feng 4096 12月 12 2011 pcre-8.21 -rw-rw-r-- 1 feng feng 1709377 6月 30 13:50 pcre-8.21.zip [feng@fsvps pcre]$ cd pcre-8.21
進去看看裏面都是些什麼文件,特別注意一下configure文件
[feng@fsvps pcre-8.21]$ ll 總用量 3716 -rwxr-xr-x 1 feng feng 6961 10月 5 2009 132html -rw-r--r-- 1 feng feng 338277 12月 11 2011 aclocal.m4 ........ (略) -rwxr-xr-x 1 feng feng 595700 12月 11 2011 configure ........ (略) -rw-r--r-- 1 feng feng 3460 8月 2 2011 ucp.h
這個configure文件,就是「源碼安裝三步曲」的第一步的configure,它將檢查你的系統是否具有了編譯pcre必要的軟件包,配置出用於編譯pcre的環境,供第二步用。若是缺乏某些軟件,它會給出提示。
[tips] 另外,注意這個目錄裏還有幾個文件README, INSALL,LICENCE,它們都是普通的文本文件,供使用人閱讀,分別是 自述文件,安裝說明,受權協議。一般linux/unix世界的源碼包裏都有這幾個文件(有時做者會把INSTALL併成到README裏),建議閱讀一 下,尤爲是README與INSTALL。
執行第一步 configure
[feng@fsvps pcre-8.21]$ ./configure
注意configure命令前面要帶上 ./ ,由於咱們要執行的是在當前目錄下的configure文件,。
configure過程當中可能出現的幾個報錯,及緣由:
yum install gcc gcc-c++ autoconf make
[root@fsvps nginx-1.2.1]# chown -R feng:feng ./ [root@fsvps nginx-1.2.1]# exit
而後exit退出到普通用戶狀態下。 chown 後的 feng:feng 分別是所使用的普通帳號的用戶名,及其用戶組名。
開始編譯,這步很是簡單,運行make就能夠,可能要花費幾分鐘時間,你能夠乾點其它,好比起身活動一下。
[feng@fsvps pcre-8.21]$ make
完了若是看到下面的消息:make[1]: Leaving directory `/home/feng/build/pcre/pcre-8.21'
說明編譯完成了,那麼開始安裝。安裝很簡單,使用root用戶權限,運行make install 就能夠了。因此su,按提示輸入root密碼,切換到root身份
[feng@fsvps pcre-8.21]$ su
[feng@fsvps pcre-8.21]# make install
完了消息應該是 make[1]: Leaving directory `/home/feng/build/pcre/pcre-8.21'
這樣pcre就安裝好了。而後exit退回到普通用戶狀態下。
接下來纔是真正安裝nginx,過程差很少,但咱們要多配置幾個參數選項。
到 nginx官網上 http://nginx.org/en/download.html 找最新的穩定版的下載連接,寫本文時2012-06-30 最新版本爲 nginx-1.2.1 下載連接爲 http://nginx.org/download/nginx-1.2.1.tar.gz 使用wget 將其下載到vps上。
[root@fsvps build]$ wget http://nginx.org/download/nginx-1.2.1.tar.gz
幾秒鐘就能夠下載完成。(若是提示 bash: wget: command not found 那是你尚未安裝wget,切換到root用戶,yum install wget -y 安裝之)
解壓縮,而後把壓縮包移動到source目錄,以備不時之需。
[root@fsvps build]$ ll 總用量 708 -rw-r--r-- 1 root root 718161 6月 5 14:10 nginx-1.2.1.tar.gz [root@fsvps build]$ tar xf nginx-1.2.1.tar.gz [root@fsvps build]$ ll 總用量 712 drwxr-xr-x 8 1001 1001 4096 6月 5 14:02 nginx-1.2.1 -rw-r--r-- 1 root root 718161 6月 5 14:10 nginx-1.2.1.tar.gz [root@fsvps build]$ mv nginx-1.2.1.tar.gz ../source/
[tips] 文件名很長,打字太累? 試試tab鍵,好比先打出 mv ngi 而後按tab 鍵一次,沒反應,再按一次,看有什麼變化;而後繼續打一個句點,再按一次tab鍵。相信你已經能悟出點什麼了。
進入nginx源碼目錄,瀏覽一下里面的文件
[root@fsvps build]$ cd nginx-1.2.1/ [root@fsvps nginx-1.2.1]$ ll 總用量 560 drwxr-xr-x 6 1001 1001 4096 6月 30 11:39 auto -rw-r--r-- 1 1001 1001 207988 6月 5 14:02 CHANGES -rw-r--r-- 1 1001 1001 317085 6月 5 14:02 CHANGES.ru drwxr-xr-x 2 1001 1001 4096 6月 30 11:39 conf -rwxr-xr-x 1 1001 1001 2345 1月 18 15:07 configure drwxr-xr-x 3 1001 1001 4096 6月 30 11:39 contrib drwxr-xr-x 2 1001 1001 4096 6月 30 11:39 html -rw-r--r-- 1 1001 1001 1365 1月 18 15:07 LICENSE drwxr-xr-x 2 1001 1001 4096 6月 30 11:39 man -rw-r--r-- 1 1001 1001 49 10月 31 2011 README drwxr-xr-x 8 1001 1001 4096 6月 30 11:39 src
運行configure,就是本目錄下的該文件,上面標紅加;目錄是配置nginx的編譯環境,運行以下命令,參數比較長,能夠直接複製帖。
[root@fsvps nginx-1.2.1]$ ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/conf/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_stub_status_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_random_index_module --with-cpu-opt=pentium4
注意configure命令要帶上./ ,上面已經標紅顯示。大體講一下是什麼意思 [注]若是你僅僅想編譯一個web環境用,而不想學習編譯linux程序的通常方法,這部分那能夠跳過不用看。
把參數重排下版,一行一個參數,簡單註釋一下
--prefix=/usr/local/nginx #編譯後安裝到目錄 /usr/local/nginx --sbin-path=/usr/local/sbin/nginx # --conf-path=/usr/local/conf/nginx/nginx.conf #主配置文件路徑 --error-log-path=/var/log/nginx/error.log #錯誤日誌目錄 --pid-path=/var/run/nginx.pid #nginx程序啓用後,自動將其進程號寫到該文件 --lock-path=/var/run/nginx.lock #lock文件路徑 --with-http_stub_status_module #經過web查看nginx運行狀態 --with-http_gzip_static_module #gzip壓縮支持 --with-http_sub_module #加入ngx_http_sub_module模塊 --with-http_flv_module #加入flv模塊 --with-http_mp4_module #mp4模塊 --with-http_random_index_module #http_random_index_module模塊 --with-cpu-opt=pentium4 #針對intel cpu優化
--with-xxxx_module的那些模塊,若是你肯定不須要,那就能夠不要加入。那就這樣指定參數
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/conf/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_stub_status_module --with-http_gzip_static_module
只帶兩個比較有用的模塊。事實上這些參數一個都不指定,也是能夠,這樣就是按nginx的默認配置編譯了。若是你想查看ngix的configure都有哪些參數選項能夠運行 ./configure --help 查看,這裏很少講了。
若是報錯:./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
這是由於沒有找到PCRE包,請檢查是否正確安裝了PCRE包:
不出意外,應該能看到這樣報告消息:
Configuration summary + using system PCRE library + OpenSSL library is not used + md5: using system crypto library + sha1: using system crypto library + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/sbin/nginx" nginx configuration prefix: "/usr/local/conf/nginx" nginx configuration file: "/usr/local/conf/nginx/nginx.conf" nginx pid file: "/var/run/nginx.pid" nginx error log file: "/var/log/nginx/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
有些軟件的configure完成後會給出相似的一個配置報告,供咱們檢查配置選項是否正確。若是有不正確處,或還想改改,那就再運行一次configure --xx --yyy.
確認無誤,開始編譯
[feng@fsvps nginx-1.2.1]$ make
開始編譯,很是快,可能一分鐘就編譯完成,最後消息大體如:make[1]: Leaving directory `/home/feng/build/nginx-1.2.1'
接下來,你應該知道了,切換到root身份,make install 安裝。
下面的操做要在root身份下操做。
我 們測試一下nginx是否正常工做。由於咱們把nginx的二進制執行文件配置安裝在 /usr/local/sbin/nginx (前面的configure參數 --sbin-path=/usr/local/sbin/nginx ),目錄/usr/local/sbin/默認在linux的PATH環境變量裏,因此咱們能夠省略路徑執行它:
[root@fsvps nginx-1.2.1]# nginx
它不會有任何信息顯示。打開瀏覽器,經過IP地址訪問你的nginx站點,若是看到這樣一行大黑字,就證實nginx已經工做了:
Welcome to nginx!
看上去很簡陋,只是由於沒有給它作漂亮的頁面。咱們來簡單配置一下它的運行配置。咱們configure的參數--conf-path=/usr/local/conf/nginx/nginx.conf 這就是它的配置文件。咱們去看看。
[root@fsvps nginx-1.2.1]# cd /usr/local/conf/nginx/ [root@fsvps nginx]# ls fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default fastcgi_params koi-win nginx.conf scgi_params.default win-utf
若是這裏沒有nginx.conf,但有個 nginx.conf.default,咱們用它複製個副本nginx.conf (早期版本默認是沒有nginx.conf的)
用你熟悉的編輯器打開它,推薦使用vim;若是不會用,那可使用nano, 功能簡單,但一看就會用: nano nginx.conf
找到以下的部分,大概在35行,
server { listen 80 default; server_name localhost; root /var/www/html/default; #charset koi8-r; #access_log logs/host.access.log main; location / { # root html; index index.html index.htm; } ................ }
如上紅色加粗顯示部分,作三處修改:
上面的server{....}是定義的一臺虛擬主機,咱們剛加入的一行是定義這個虛假主機的web目錄。listen 行的default是表示這一個server{...}節點是默認的虛假主機(默認站點)
執行 nginx -t 測試剛纔的nginx配置文件是否有語法錯誤:
[root@fsvps nginx]# nginx -t nginx: the configuration file /usr/local/conf/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/conf/nginx/nginx.conf test is successful
顯示沒有錯誤,檢測經過。若是不是這樣,請返回仔細檢查你的配置文件是否哪裏寫錯了,注意行尾要有英文分號。
咱們在硬盤上建立這個目錄:
[root@fsvps nginx]# mkdir -p /var/www/html/default
寫一個html文件index.html 到/var/www/html/default目錄裏,使用你熟悉的編輯器,隨便寫什麼內容、怎麼排版。
而後讓nginx從新加載配置文件,看看剛纔創做的html頁面效果如何。
1) 若是一般訪問時看到仍是 Welcome to nginx! ,請返回檢查,重點在這幾處:
2) 若是看到的是 404 Not Found 或者「找不到該頁面」相似的提示:
3) 若是訪問時,顯示「找不到服務器」、「沒法鏈接到服務器」這樣的錯誤:
[tips] location / {...} 節點裏的 # root html; 一行,不註釋掉也能夠:請把你創造的index.html 放到/var/www/html/default/html目錄下。
至此,咱們的nginx也能夠正常工做了。是否在納悶「nginx怎麼這麼簡陋?只能顯示幾個乾巴巴的頁面」,這是由於咱們尚未給它裝備PHP這個核動力引擎。
建議你稍微休息一下,而後進入下一步的「php安裝」,要作好持久戰的準備,它比前面全部要花費時間都長。
php官方提供了不少版本,咱們照例使用最新穩定版,http://www.php.net/downloads.php
本 文寫做時[2012-07-01],php最新版本有兩個分支,分別是是PHP 5.4.4 (Current stable) 與 PHP 5.3.14 (Old stable),聽說php 5.4分支的改動,會不支持比較舊的php程序,因此咱們選擇php 5.3分支(當前爲php-5.3.14)。雖然仍會有極少數很是古老的程序,必須在更舊版下才能運行,但咱們這裏不遷就它們了,由於咱們要使用 fast-cgi,而5.2版本自己不帶FPM (fast-cgi process manager),要打fpm補丁,會麻煩一些。若有興趣,可參閱張宴的 Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建賽過Apache十倍的Web服務器(第6版) http://blog.s135.com/nginx_php_v6/
從 php官方下載頁面上http://www.php.net/downloads.php 點所選的版本,選擇距離最近的下載鏡像。若是是美國vps,就選個美國的鏡像,這樣更快。我選擇yahoo! inc.鏡像,應該全球訪問速度都比較快(php.net官方彷佛就是yahoo! inc.鏡像)。複製所選下載地址,經過wget下載到build/php目錄下,並解壓縮,而後把原始壓縮包移動到source目錄存檔。
[root@fsvps php]$ wget http://cn.php.net/get/php-5.3.14.tar.bz2/from/www.php.net/mirror [root@fsvps php]$ ll 總用量 11160 -rw-r--r-- 1 root root 11408016 6月 14 16:10 php-5.3.14.tar.bz2 [root@fsvps php]$ tar xf php-5.3.14.tar.bz2 [root@fsvps php]$ mv php-5.3.14.tar.bz2 ../../source [root@fsvps php]$ cd php-5.3.14/
進入php源碼目錄,瀏覽一下,裏面文件至關多,注意裏面也有configure, README等文件,還有其它的幾個大寫文件名的文件,有興趣參閱一下。
[root@fsvps php-5.3.14]$ ll 總用量 4796 -rw-r--r-- 1 101 101 3460 6月 13 08:20 acconfig.h -rw-r--r-- 1 101 101 28 6月 13 08:18 acconfig.h.in -rw-r--r-- 1 101 101 76103 6月 13 08:18 acinclude.m4 -rw-r--r-- 1 101 101 306427 6月 13 08:20 aclocal.m4 drwxr-xr-x 2 101 101 4096 6月 13 08:18 build -rwxr-xr-x 1 101 101 668 6月 13 08:18 buildconf -rw-r--r-- 1 101 101 334 6月 13 08:18 buildconf.bat -rw-r--r-- 1 101 101 11166 6月 13 08:18 CODING_STANDARDS -rw-r--r-- 1 101 101 44892 6月 13 08:18 config.guess -rw-r--r-- 1 101 101 33387 6月 13 08:18 config.sub -rwxr-xr-x 1 101 101 3044114 6月 13 08:20 configure -rw-r--r-- 1 101 101 45450 6月 13 08:18 configure.in -rw-r--r-- 1 101 101 91 6月 13 08:18 CREDITS drwxr-xr-x 79 101 101 4096 6月 13 08:18 ext -rw-r--r-- 1 101 101 24801 6月 13 08:18 EXTENSIONS -rw-r--r-- 1 101 101 137 6月 13 08:18 footer -rw-r--r-- 1 101 101 2233 6月 13 08:20 generated_lists -rwxr-xr-x 1 101 101 486 6月 13 08:18 genfiles -rw-r--r-- 1 101 101 1143 6月 13 08:18 header -rw-r--r-- 1 101 101 93778 6月 13 08:18 INSTALL -rw-r--r-- 1 101 101 0 6月 13 08:20 install-sh -rw-r--r-- 1 101 101 3218 6月 13 08:18 LICENSE -rw-r--r-- 1 101 101 199728 6月 13 08:18 ltmain.sh drwxr-xr-x 3 101 101 4096 6月 13 08:20 main -rwxr-xr-x 1 101 101 3023 6月 13 08:18 makedist -rw-r--r-- 1 101 101 1073 6月 13 08:18 Makefile.frag -rw-r--r-- 1 101 101 2263 6月 13 08:18 Makefile.gcov -rw-r--r-- 1 101 101 5498 6月 13 08:18 Makefile.global -rw-r--r-- 1 101 101 5317 6月 13 08:18 makerpm -rw-r--r-- 1 101 101 0 6月 13 08:20 missing -rw-r--r-- 1 101 101 0 6月 13 08:20 mkinstalldirs drwxr-xr-x 2 101 101 4096 6月 13 08:18 netware -rw-r--r-- 1 101 101 347865 6月 13 08:18 NEWS drwxr-xr-x 2 101 101 4096 6月 13 08:20 pear -rw-r--r-- 1 101 101 1489 6月 13 08:18 php5.spec.in -rw-r--r-- 1 101 101 2523 6月 13 08:18 php.gif -rw-r--r-- 1 101 101 69609 6月 13 08:18 php.ini-development -rw-r--r-- 1 101 101 69631 6月 13 08:18 php.ini-production -rw-r--r-- 1 101 101 1570 6月 13 08:18 README.EXTENSIONS -rw-r--r-- 1 101 101 6249 6月 13 08:18 README.EXT_SKEL -rw-r--r-- 1 101 101 4618 6月 13 08:18 README.GIT-RULES -rw-r--r-- 1 101 101 5954 6月 13 08:18 README.input_filter -rw-r--r-- 1 101 101 3426 6月 13 08:18 README.MAILINGLIST_RULES -rwxr-xr-x 1 101 101 6040 6月 13 08:18 README.namespaces -rw-r--r-- 1 101 101 6848 6月 13 08:18 README.PARAMETER_PARSING_API -rw-r--r-- 1 101 101 4740 6月 13 08:18 README.PHP4-TO-PHP5-THIN-CHANGES -rw-r--r-- 1 101 101 20918 6月 13 08:18 README.REDIST.BINS -rw-r--r-- 1 101 101 11244 6月 13 08:18 README.RELEASE_PROCESS -rw-r--r-- 1 101 101 4698 6月 13 08:18 README.SELF-CONTAINED-EXTENSIONS -rw-r--r-- 1 101 101 15373 6月 13 08:18 README.STREAMS -rw-r--r-- 1 101 101 7605 6月 13 08:18 README.SUBMITTING_PATCH -rw-r--r-- 1 101 101 6677 6月 13 08:18 README.TESTING -rw-r--r-- 1 101 101 4957 6月 13 08:18 README.TESTING2 -rw-r--r-- 1 101 101 4261 6月 13 08:18 README.UNIX-BUILD-SYSTEM -rw-r--r-- 1 101 101 109 6月 13 08:18 README.WIN32-BUILD-SYSTEM -rwxr-xr-x 1 101 101 78241 6月 13 08:18 run-tests.php drwxr-xr-x 24 101 101 4096 6月 13 08:18 sapi drwxr-xr-x 5 101 101 4096 6月 13 08:18 scripts -rwxr-xr-x 1 101 101 2105 6月 13 08:18 server-tests-config.php -rwxr-xr-x 1 101 101 51718 6月 13 08:18 server-tests.php -rwxr-xr-x 1 101 101 108 6月 13 08:18 snapshot -rw-r--r-- 1 101 101 10 6月 13 08:18 stamp-h.in -rw-r--r-- 1 101 101 1 6月 13 08:18 stub.c -rwxr-xr-x 1 101 101 50 6月 13 08:18 svnclean.bat drwxr-xr-x 10 101 101 4096 6月 13 08:18 tests -rw-r--r-- 1 101 101 5109 6月 13 08:18 TODO -rw-r--r-- 1 101 101 163 6月 13 08:18 TODO-5.1 -rw-r--r-- 1 101 101 3746 6月 13 08:18 TODO-PHP5 drwxr-xr-x 2 101 101 4096 6月 13 08:18 TSRM -rwxr-xr-x 1 101 101 23267 6月 13 08:18 UPGRADING -rw-r--r-- 1 101 101 737 6月 13 08:18 UPGRADING.INTERNALS -rwxr-xr-x 1 101 101 297 6月 13 08:18 vcsclean drwxr-xr-x 3 101 101 4096 6月 13 08:18 win32 drwxr-xr-x 4 101 101 4096 6月 13 08:20 Zend
查看configure參數選項,
[root@fsvps php-5.3.14]$ ./configure --help
參數很是多,由於php功能實在太強大了。你熟悉php的話,就知道它有上百個模塊,咱們經常使用大概有幾十個。一般離不開的模塊,是默認被配置進去的,不須要咱們經過configure指定,咱們在configure步驟主要作兩件事:
若是沒有特殊需求,建議你按下面的選項來配置(爲方便閱讀,拆成多行了)
./configure --prefix=/usr/local/php53 --with-config-file-path=/usr/local/etc --with-config-file-scan-dir=/usr/local/etc/php.d --mandir=/usr/local/man --enable-fpm --enable-calendar --with-mcrypt --enable-ftp --with-zlib --with-bz2 --with-curl --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-mysql --with-mysqli --with-pdo-mysql --enable-zip --enable-bcmath --with-bz2
注意其中的 --enable-fpm 就是指定咱們要啓用php的fpm功能,必定要不能省的。
先不要急着運行./configure,如今運行幾乎必定要報錯:
configure: error: xxx not found. Please check your xxx installation.
緣由你應該想到了,咱們的centos中缺乏依賴包。
咱們回過頭來解決依賴包問題。咱們的系統上缺乏哪些包呢?按我在上面的configure 選項,下面幾行命令中的包便是:
[root@fsvps feng]# yum -y install libxml2-devel [root@fsvps feng]# yum -y install bzip2-devel [root@fsvps feng]# yum -y install libcurl-devel [root@fsvps feng]# yum -y install libjpeg-devel libpng-devel
這個依賴列表是怎麼知道的呢?運行configure,看提示什麼錯誤,就安裝相應包,記錄下來這些包名就知道了。或者檢查configure文檔或源碼,也是能夠的,不過這個工做量更龐大。
另外mcrype包centos源裏沒有的,要咱們手工編譯安裝,步驟以下:
cd build/ mkdir mcrypt cd mcrypt wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2 tar xf libmcrypt-2.5.8.tar.bz2 cd libmcrypt-2.5.8 ./configure make make install
其中 sourceforge.net 上的地址,若是不能下載,請點此從本站(path8.net)下載:libmcrypt-2.5.8.tar.bz2.zip [注]本文件是再次zip壓縮的,使用時需先unzip 再tar x]
或者你能夠到http://mcrypt.sourceforge.net/下載,但要注意,咱們須要的是 libmcrypt而不是mcrypt,這裏很容易搞錯。
如今應該對configure很熟悉了吧,用普通用戶執行
[feng@fsvps php-5.3.14]$ ./configure --prefix=/usr/local/php53 --with-config-file-path=/usr/local/etc --with-config-file-scan-dir=/usr/local/etc/php.d --mandir=/usr/local/man --enable-fpm --enable-calendar --with-mcrypt --enable-ftp --with-zlib --with-bz2 --with-curl --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-mysql --with-mysqli --with-pdo-mysql --enable-zip --enable-bcmath --with-bz2
這一步要花幾分鐘時間,不出意外將出現以下消息:
+--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP.
按下來,make,這一步更慢,可能要二十分鐘,耐心等,或者作點其它事情。
看到以下消息,就是完成了。
Build complete. Don't forget to run 'make test'.
能夠執行一下make test 檢測一下,不過通常沒有必要,切換到root身份運行make install安裝。
[feng@fsvps php-5.3.14]$ su 密碼: [root@fsvps php-5.3.14]# make install Installing PHP SAPI module: fpm Installing PHP CLI binary: /usr/local/php53/bin/ Installing PHP CLI man page: /usr/local/man/man1/ Installing PHP FPM binary: /usr/local/php53/sbin/ Installing PHP FPM config: /usr/local/php53/etc/ Installing PHP FPM man page: /usr/local/man/man8/ Installing PHP FPM status page: /usr/local/php53/share/php/fpm/ Installing build environment: /usr/local/php53/lib/php/build/ Installing header files: /usr/local/php53/include/php/ Installing helper programs: /usr/local/php53/bin/ program: phpize program: php-config Installing man pages: /usr/local/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr/local/php53/lib/php/ [PEAR] Archive_Tar - installed: 1.3.7 [PEAR] Console_Getopt - installed: 1.3.0 [PEAR] Structures_Graph- installed: 1.0.4 [PEAR] XML_Util - installed: 1.2.1 [PEAR] PEAR - installed: 1.9.4 Wrote PEAR system config file at: /usr/local/php53/etc/pear.conf You may want to add: /usr/local/php53/lib/php to your php.ini include_path /home/feng/build/php/php-5.3.14/build/shtool install -c ext/phar/phar.phar /usr/local/php53/bin ln -s -f /usr/local/php53/bin/phar.phar /usr/local/php53/bin/phar Installing PDO headers: /usr/local/php53/include/php/ext/pdo/
最好記下來這裏的消息,它是php的幾個重要配置文件的默認路徑,下面用得着。
php-fpm的配置文件位於/usr/local/php53/etc/,這裏有個php-fpm.conf.default,用它複製出php-fpm.conf
[root@fsvps php-5.3.14]# ls -l /usr/local/php53/etc/ 總用量 28 -rw-r--r-- 1 root root 1172 7月 1 07:20 pear.conf -rw-r--r-- 1 root root 20891 7月 1 07:20 php-fpm.conf.default [root@fsvps php-5.3.14]# cp /usr/local/php53/etc/php-fpm.conf{.default,}
修改php-fpm.conf以下幾處:
(約第25行) pid = /var/run/php-fpm.pid
(約第32行) error_log = /var/log/php-fpm.log
(約第190行) pm = static
啓動php-fpm進程
[root@fsvps php-5.3.14]# /usr/local/php53/sbin/php-fpm
執行後,沒有任何輸出。若是有錯誤請查看php-fpm的日誌文件 /var/log/php-fpm.log
執行 ps aux|grep php 將顯示有6個php-fpm進程,其中一個是root用戶,另外5個是nobody用戶。
直到如今,咱們的nginx仍是隻能處理靜態文件,咱們接下來要作的是:讓nginx把對.php文件的請求,轉給php-fpm來處理。
打開nginx配置文件,在server{...}節點裏面,有這樣一行 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 ,下面的 location ...{...}節點取消註釋,改爲以下形式(修改部分使用紅字加粗):
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/default$fastcgi_script_name;
include fastcgi_params;
}
保存,檢查配置nginx -t,無誤後從新加載nginx配置 nginx -s reload
寫一個php程序文件 /var/www/html/default/phpinfo.php 內容爲
<?php phpinfo(); ?>
用瀏覽器經過ip地址訪問phpinfo.php,看到你親自編譯的nginx+php-fpm在工做了吧。
先別過高興,事實尚未完。
有些讀者已經已經發現,phpinfo頁面裏顯示沒有加載php.ini文件,是的,咱們尚未把php.ini文件放到配置路徑裏。在php編譯目錄裏,有兩個,由於是生產環境,咱們使用./php.ini-production
[root@fsvps php-5.3.14]# cp php.ini-production /usr/local/etc/php.ini
若是須要的話,請對php.ini做相應修改配置。發進程信號給php-fpm從新加載配置
kill -SIGUSR2 `cat /var/run/php-fpm.pid`
或者ps aux |grep php-fpm 查出來php-fpm主進程號,而後 kill -SIGUSR2 進程號
php-fpm.conf
(約第200行) pm.max_children = 5
(約第226行) pm.max_requests = 100
(約第325行) pm.status_path = /status.php
pm.max_children這是php-fpm啓動後的php-fpm子進程數,512M內存如下,推薦設置在5左右。設爲5,也說是說,最多接受5個併發的php請求。
pm.max_requests 是一個php-fpm子進程最多處理多少次請求後被關閉回收,小內存的主機,推薦設置小一點(100或者更小),避免處理一個佔用內存大的請求後、進程沒 被回收而長時間佔用內存。可是也不要設置得過小,不然頻繁的建立php-fpm子進程,從而影響效率。
pm.status_path 是用於查看當前php-fpm的狀態。修改保存後,從新加載php-fpm配置,使用瀏覽器打開 http://you-host-address/status.php ,能夠看到一組php-fpm的狀態數據,能夠用來檢查一般php-fpm併發進程數有多大,以及其它一些有用數據。
nginx配置文件 /usr/local/conf/nginx/nginx.conf
worker_processes 1; #nginx子進程數,512M內存如下推薦設置爲1就夠了,nginx併發能力很強 keepalive_timeout 25; #鏈接保持的超時秒數 gzip on; #啓用靜態內容http請求的gzip壓縮
你的站點裏,若是有文件上傳目錄、圖片目錄等,那咱們就不要容許這裏的php文件請求傳遞給php-fpm,或直接拒絕訪問。能夠將下面一段代碼加入到 location ~ \.php$ {....} 節點前面,nginx發現這種請求,就直接deny,而再也不傳給php-fpm了
location ~ ^/(uploads|images)/.*\.php { deny all; }
若是你須要在nginx上綁定多個域名,就把server{...} 節點複製一份,修改裏面server_name(域名)參數、root參數(站點目錄)
server { server_name www.path8.net; root /var/chroot/home/pcobbs/www; ...... }
把多個域名綁定到同一目錄上,就用空格分隔跟在後面,如
server_name host1a.path8.net host2.path8.net;
本文的最新更新將發表於 http://blog.path8.net/archives/6068.html