配置nginx對php的支援

技術小胖子發表於2017-11-02

配置nginx對php的支援


案例宣告:本次案例所有軟體包用的都是原始碼包

一、基本環境:


 因為nginx與httpd服務用的是同一個埠,所以在安裝nginx之前必須要停止apache服務,釋放80埠;

 安裝php需要用到雜湊函式庫,字元編碼的轉換和加密等,需要編譯gcc等的支援,建議先把開發工具和開發庫安裝好,方便後續操作。

[root@localhost ~]# service httpd stop

[root@localhost ~]# yum -y groupinstall “Development

libraries” “Development tools” “X Software Development“

[root@localhost ~]# yum -y install gcc openssl-devel pcre-

devel zlib-devel


這裡我們一會在配置nginx的時候指定的user和group是www,所有提前新增www使用者和組,也可以自己定義,不過必須要和配置選項中指定的一致

[root@localhost ~]# groupadd www

[root@localhost ~]# useradd -g www www


二、安裝nginx服務


[root@localhost ~]# tar -zxvf nginx-1.2.0.tar.gz    解壓

[root@localhost ~]# cd nginx-1.2.0

[root@localhost nginx-1.2.0]# ./configure         配置

> –prefix=/usr/local/nginx 指定安裝路徑

> –pid-path=/usr/local/nginx/nginx.pid       指定pid檔案

> –user=www –group=www 指定所有者/組

> –with-http_ssl_module 使支援https請求,需已安裝openssl

–with-http_flv_module

提供尋求記憶體使用基於時間的偏移量檔案

> –with-http_stub_status_module 獲取nginx自上次啟動以來的工作狀態

> –with-http_gzip_static_module 線上實時壓縮輸出資料流

> –http-client-body-temp-path=/usr/local/nginx/client

  設定http客戶端請求臨時檔案路徑

> –http-proxy-temp-path=/usr/local/nginx/proxy

  設定http代理臨時檔案路徑

> –http-fastcgi-temp-path=/usr/local/nginx/fcgi

  設定http fastcgi臨時檔案路徑

> –http-uwsgi-temp-path=/usr/local/nginx/uwsgi

  設定http uwsgi臨時檔案路徑

> –http-scgi-temp-path=/usr/local/nginx/scgi

  設定http scgi臨時檔案路徑

> –with-pcre

指向pcre庫檔案目錄

[root@localhost nginx-1.2.0]# make       編譯

[root@localhost nginx-1.2.0]# make install     安裝


 上述配置引數是大多需要用到的,其他引數及解釋,見本文最後的附錄



啟動Nginx服務


-c指定配置檔案,預設為安裝目錄下的nginx.conf

[root@localhost mysql]# /usr/local/nginx/sbin/nginx -c

> /usr/local/nginx/conf/nginx.conf


[root@localhost mysql]# netstat -utnalp | grep :80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      41483/nginx

三、安裝php

在安裝php之前需要先安裝php的擴充套件軟體:

1、安裝php擴充套件軟體

    安裝mhash,提供哈稀函式庫

[root@localhost ~ ]# tar -zxvf mhash-0.9.9.9.tar.gz

[root@localhost mhash-0.9.9.9]# cd mhash-0.9.9.9

[root@localhost mhash-0.9.9.9]# ./configure

[root@localhost mhash-0.9.9.9]# make

[root@localhost mhash-0.9.9.9]# make install


 安裝libiconv,處理中文各種編碼之間的轉換

[root@localhost ~ ]# tar -zxvf libiconv-1.13.tar.gz

[root@localhost libiconv-1.13]# cd libiconv-1.13

[root@localhost libiconv-1.13]# ./configure

[root@localhost libiconv-1.13]# make

[root@localhost libiconv-1.13]# make install


 安裝libmcrypt,提供加密功能的庫檔案

[root@localhost libmcrypt-2.5.8]# tar -zxvf libmcrypt-2.5.8.tar.gz

[root@localhost libmcrypt-2.5.8]# cd libmcrypt-2.5.8

[root@localhost libmcrypt-2.5.8]# ./configure

[root@localhost libmcrypt-2.5.8]# make

[root@localhost libmcrypt-2.5.8]# make install

 安裝完成libmcrypt庫以後,不同的linux系統版本有可能還要

 安裝libltdl

  在當前目錄下有個libltdl目錄

[root@localhost libmcrypt-2.5.8]# cd libltdl

[root@localhost libltdl ]# ./configure –with-gmetad –enable-gexec –enable-ltdl-install

[root@localhost libltdl ]# make && make install


  安裝完畢之後,由於庫檔案預設安裝在/usr/local/lib目錄下,系統是找不到的,所以要建立連結到/usr/lib

[root@localhost ~ ]# ln -sv /usr/local/lib/libmcrypt* /usr/lib/

[root@localhost ~ ]# ln -sv /usr/local/lib/libmhash.* /usr/lib/


對庫檔案建立連結完畢之後,更新連結庫

[root@localhost ~ ] # ldconfig -v


 安裝php

root@localhost ~]# tar -zxvf php-5.4.9.tar.gz

[root@localhost ~]# cd php-5.4.9

[root@localhost php-5.4.9]# ./configure

–prefix=/usr/local/php5nginx

–with-config-file-path=/usr/local/php5nginx/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-bcmath

–enable-shmop –enable-sysvsem

–enable-inline-optimization –with-curl –with-curlwrappers

–enable-mbregex –enable-fpm –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


安裝php

[root@localhost php-5.4.9]# make ZEND_EXTRA_LIBS=`-liconv`

配置的時候指定字元轉換

[root@localhost php-5.4.9]# make install


 拷貝php的配置檔案

[root@localhost php-5.4.9]# cp php.ini-production

>/usr/local/php5nginx/etc/php.ini



 配置fast-cgi


[root@localhost ~]# cd /usr/local/php5nginx/etc/


[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf

 生成配置檔案

[root@localhost etc]# vim php-fpm.conf

 編輯配置檔案


 配置fast-cgi

[global]

pid = run/php-fpm.pid

error_log = log/php-fpm.log

log_level = error

daemonize = yes

[www]

user = www

group = www

listen = 127.0.0.1:9000

pm = dynamic

pm.max_children = 32

pm.start_servers = 15

pm.min_spare_servers = 5

pm.max_spare_servers = 32


啟動php-fpm,埠號為9000


[root@localhost ~]# cd php-5.4.9/sapi/fpm/


[root@localhost fpm]# cp init.d.php-fpm /etc/rc.d/init.d/php-fpm

[root@localhost fpm]# chmod +x /etc/rc.d/init.d/php-fpm

[root@localhost fpm]# chkconfig –add php-fpm

[root@localhost fpm]# service php-fpm start|restart|reload|restart

[root@localhost fpm]# ps aux | grep php-fpm


三、nginx與php的整合


編輯nginx.conf檔案

[root@localhost ~ ]# vim /usr/local/nginx/conf/nginx.conf

location / {

root html;

index index.php index.html index.htm;

}

location ~ .php$ {


root

html;

fastcgi_pass 127.0.0.1:9000;   Php-fpm ip與埠

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;        Fast-cgi引數檔案

}


編輯fastcgi_params檔案

[root@localhost ~ ]# vim /usr/local/nginx/conf/fastcgi_params


fastcgi_param GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx;

……

fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   此處為一行,新增此行


fastcgi_param SCRIPT_NAME $fastcgi_script_name;


……

fastcgi_param DOCUMENT_ROOT $document_root;


測試

[root@localhost ~]# pkill -9 nginx

[root@localhost ~]# /usr/local/nginx/sbin/nginx

[root@localhost ~]# /etc/rc.d/init.d/php-fpm restart

[root@localhost html]# vim index.php

<?php

phpinfo();

?>

建立phpinfo的測試頁

開啟瀏覽器,輸入測試頁路徑,頁面顯示php的資訊及表示安裝成功!




附錄:

nginx引數:

–prefix= 指向安裝目錄–sbin-path 指向(執行)程式檔案(nginx)

–conf-path= 指向配置檔案(nginx.conf)–error-log-path= 指向錯誤日誌目錄

–pid-path= 指向pid檔案(nginx.pid)–lock-path= 指向lock檔案(nginx.lock)(安裝檔案鎖定,防止安裝檔案被別人利用,或自己誤操作。)

–user= 指定程式執行時的非特權使用者–group= 指定程式執行時的非特權使用者組

–builddir= 指向編譯目錄–with-rtsig_module 啟用rtsig模組支援(實時訊號)

–with-select_module 啟用select模組支援(一種輪詢模式,不推薦在高載環境下使用)禁用:–without-select_module–with-poll_module 啟用poll模組支援(功能與select相同,與select特性相同,為一種輪詢模式,不推薦在高載環境下使用)

–with-file-aio 啟用file aio支援(一種APL檔案傳輸格式)–with-ipv6 啟用ipv6支援

–with-http_ssl_module 啟用ngx_http_ssl_module支援(使支援https請求,需已安裝openssl)

–with-http_realip_module 啟用ngx_http_realip_module支援(這個模組允許從請求標頭更改客戶端的IP地址值,預設為關)

–with-http_addition_module 啟用ngx_http_addition_module支援(作為一個輸出過濾器,支援不完全緩衝,分部分響應請求)

–with-http_xslt_module 啟用ngx_http_xslt_module支援(過濾轉換XML請求)

–with-http_image_filter_module 啟用ngx_http_image_filter_module支援(傳輸JPEG/GIF/PNG 圖片的一個過濾器)(預設為不啟用。gd庫要用到)

–with-http_geoip_module 啟用ngx_http_geoip_module支援(該模組建立基於與MaxMind GeoIP二進位制檔案相配的客戶端IP地址的ngx_http_geoip_module變數)

–with-http_sub_module 啟用ngx_http_sub_module支援(允許用一些其他文字替換nginx響應中的一些文字)

–with-http_dav_module 啟用ngx_http_dav_module支援(增加PUT,DELETE,MKCOL:建立集合,COPY和MOVE方法)預設情況下為關閉,需編譯開啟

–with-http_flv_module 啟用ngx_http_flv_module支援(提供尋求記憶體使用基於時間的偏移量檔案)

–with-http_gzip_static_module 啟用ngx_http_gzip_static_module支援(線上實時壓縮輸出資料流)

–with-http_random_index_module 啟用ngx_http_random_index_module支援(從目錄中隨機挑選一個目錄索引)

–with-http_secure_link_module 啟用ngx_http_secure_link_module支援(計算和檢查要求所需的安全連結網址)

–with-http_degradation_module  啟用ngx_http_degradation_module支援(允許在記憶體不足的情況下返回204或444碼)

–with-http_stub_status_module 啟用ngx_http_stub_status_module支援(獲取nginx自上次啟動以來的工作狀態)

–without-http_charset_module 禁用ngx_http_charset_module支援(重新編碼web頁面,但只能是一個方向–伺服器端到客戶端,並且只有一個位元組的編碼可以被重新編碼)

–without-http_gzip_module 禁用ngx_http_gzip_module支援(該模組同-with-http_gzip_static_module功能一樣)

–without-http_ssi_module 禁用ngx_http_ssi_module支援(該模組提供了一個在輸入端處理處理伺服器包含檔案(SSI)的過濾器,目前支援SSI命令的列表是不完整的)

–without-http_userid_module 禁用ngx_http_userid_module支援(該模組用來處理用來確定客戶端後續請求的cookies)

–without-http_access_module 禁用ngx_http_access_module支援(該模組提供了一個簡單的基於主機的訪問控制。允許/拒絕基於ip地址)

–without-http_auth_basic_module禁用ngx_http_auth_basic_module(該模組是可以使用使用者名稱和密碼基於http基本認證方法來保護你的站點或其部分內容)

–without-http_autoindex_module 禁用disable ngx_http_autoindex_module支援(該模組用於自動生成目錄列表,只在ngx_http_index_module模組未找到索引檔案時發出請求。)

–without-http_geo_module 禁用ngx_http_geo_module支援(建立一些變數,其值依賴於客戶端的IP地址)

–without-http_map_module 禁用ngx_http_map_module支援(使用任意的鍵/值對設定配置變數)–without-http_split_clients_module 禁用ngx_http_split_clients_module支援(該模組用來基於某些條件劃分使用者。條件如:ip地址、報頭、cookies等等)

–without-http_referer_module 禁用disable ngx_http_referer_module支援(該模組用來過濾請求,拒絕報頭中Referer值不正確的請求)

–without-http_rewrite_module 禁用ngx_http_rewrite_module支援(該模組允許使用正規表示式改變URI,並且根據變數來轉向以及選擇配置。如果在server級別設定該選項,那麼他們將在 location之前生效。如果在location還有更進一步的重寫規則,location部分的規則依然會被執行。如果這個URI重寫是因為location部分的規則造成的,那麼 location部分會再次被執行作為新的URI。 這個迴圈會執行10次,然後Nginx會返回一個500錯誤。)

–without-http_proxy_module 禁用ngx_http_proxy_module支援(有關代理伺服器)

–without-http_fastcgi_module 禁用ngx_http_fastcgi_module支援(該模組允許Nginx 與FastCGI 程式互動,並通過傳遞引數來控制FastCGI 程式工作。 )FastCGI一個常駐型的公共閘道器介面。

–without-http_uwsgi_module 禁用ngx_http_uwsgi_module支援(該模組用來醫用uwsgi協議,uWSGI伺服器相關)

–without-http_scgi_module 禁用ngx_http_scgi_module支援(該模組用來啟用SCGI協議支援,SCGI協議是CGI協議的替代。它是一種應用程式與HTTP服務介面標準。它有些像FastCGI但他的設計 更容易實現。)

–without-http_memcached_module 禁用ngx_http_memcached_module支援(該模組用來提供簡單的快取,以提高系統效率)

-without-http_limit_zone_module 禁用ngx_http_limit_zone_module支援(該模組可以針對條件,進行會話的併發連線數控制)

–without-http_limit_req_module 禁用ngx_http_limit_req_module支援(該模組允許你對於一個地址進行請求數量的限制用一個給定的session或一個特定的事件)

–without-http_empty_gif_module 禁用ngx_http_empty_gif_module支援(該模組在記憶體中常駐了一個1*1的透明GIF影像,可以被非常快速的呼叫)

–without-http_browser_module 禁用ngx_http_browser_module支援(該模組用來建立依賴於請求報頭的值。如果瀏覽器為modern ,則$modern_browser等於modern_browser_value指令分配的值;如 果瀏覽器為old,則$ancient_browser等於 ancient_browser_value指令分配的值;如果瀏覽器為 MSIE中的任意版本,則 $msie等於1)

–without-http_upstream_ip_hash_module 禁用ngx_http_upstream_ip_hash_module支援(該模組用於簡單的負載均衡)

–with-http_perl_module 啟用ngx_http_perl_module支援(該模組使nginx可以直接使用perl或通過ssi呼叫perl)

–with-perl_modules_path= 設定perl模組路徑–with-perl= 設定perl庫檔案路徑–http-log-path= 設定access log路徑

–http-client-body-temp-path= 設定http客戶端請求臨時檔案路徑–http-proxy-temp-path= 設定http代理臨時檔案路徑

–http-fastcgi-temp-path= 設定http fastcgi臨時檔案路徑–http-uwsgi-temp-path= 設定http uwsgi臨時檔案路徑

–http-scgi-temp-path= 設定http scgi臨時檔案路徑-without-http 禁用http server功能

–without-http-cache 禁用http cache功能–with-mail 啟用POP3/IMAP4/SMTP代理模組支援

–with-mail_ssl_module 啟用ngx_mail_ssl_module支援–without-mail_pop3_module 禁用pop3協議(POP3即郵局協議的第3個版本,它是規定個人計算機如何連線到網際網路上的郵件伺服器進行收發郵件的協議。是因特網電子郵件的第一個離線協議標 準,POP3協議允許使用者從伺服器上把郵件儲存到本地主機上,同時根據客戶端的操作刪除或儲存在郵件伺服器上的郵件。POP3協議是TCP/IP協議族中的一員,主要用於 支援使用客戶端遠端管理在伺服器上的電子郵件)

–without-mail_imap_module 禁用imap協議(一種郵件獲取協議。它的主要作用是郵件客戶端可以通過這種協議從郵件伺服器上獲取郵件的資訊,下載郵件等。IMAP協議執行在TCP/IP協議之上, 使用的埠是143。它與POP3協議的主要區別是使用者可以不用把所有的郵件全部下載,可以通過客戶端直接對伺服器上的郵件進行操作。)

–without-mail_smtp_module 禁用smtp協議(SMTP即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地。)

–with-google_perftools_module 啟用ngx_google_perftools_module支援(除錯用,剖析程式效能瓶頸)

–with-cpp_test_module 啟用ngx_cpp_test_module支援

–add-module= 啟用外部模組支援–with-cc= 指向C編譯器路徑

–with-cpp= 指向C預處理路徑–with-cc-opt= 設定C編譯器引數(PCRE庫,需要指定–with-cc-opt=”-I /usr/local/include”,如果使用select()函式則需要同時增加檔案描述符數量,可以通過–with-cc- opt=”-D FD_SETSIZE=2048”指定。)

–with-ld-opt= 設定連線檔案引數。(PCRE庫,需要指定–with-ld-opt=”-L /usr/local/lib”。)

–with-cpu-opt= 指定編譯的CPU,可用的值為: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64–without-pcre 禁用pcre庫–with-pcre 啟用pcre庫

–with-pcre= 指向pcre庫檔案目錄–with-pcre-opt= 在編譯時為pcre庫設定附加引數–with-md5= 指向md5庫檔案目錄(訊息摘要演算法第五版,用以提供訊息的完整性保護)

–with-md5-opt= 在編譯時為md5庫設定附加引數–with-md5-asm 使用md5彙編源

–with-sha1= 指向sha1庫目錄(數字簽名演算法,主要用於數字簽名)

–with-sha1-opt= 在編譯時為sha1庫設定附加引數–with-sha1-asm 使用sha1彙編源

–with-zlib= 指向zlib庫目錄–with-zlib-opt= 在編譯時為zlib設定附加引數

–with-zlib-asm= 為指定的CPU使用zlib彙編源進行優化,CPU型別為pentium, pentiumpro–with-libatomic 為原子記憶體的更新操作的實現提供一個架構

–with-libatomic= 指向libatomic_ops安裝目錄–with-openssl= 指向openssl安裝目錄

–with-openssl-opt 在編譯時為openssl設定附加引數

–with-debug 啟用debug日誌

      本文轉自Jx戰壕  51CTO部落格,原文連結:http://blog.51cto.com/xujpxm/1394989,如需轉載請自行聯絡原作者


相關文章