有關於mac系統下nginx+php+mysql環境的搭建,大概須要說明的以下: php
1.安裝方式有兩種,一種是下載源碼包編譯安裝,一種是採用Homebrew下載安裝(此處我採用的是Homebrew方式)。 css
2.Homebrew安裝php以前須要安裝xcode命令行插件(Command Line Tools),不然安裝php會報錯。 html
安裝Command Line Tools mysql
xcode-select --install nginx
3.用Homebrew安裝前能夠經過options命令查看下安裝參數,nginx和mysql安裝不須要特別的參數設置,直接brew install便可。 git
Homebrew安裝nginx和mysql github
brew install mysql , brew install nginx。 sql
PHP安裝要加命令參數排除apache模塊,加載php-fpm和mysql,同時由於brew默認沒有php-fpm須要事先添加添加。 數據庫
Homebrew添加php-fpm apache
Homebrew安裝PHPbrew tap homebrew/dupes
brew tap homebrew/php
brew install --without-apache --with-fpm --with-mysql php54
4.Homebrew安裝默認狀況下項目在/usr/local/Cellar目錄下,相應配置文件在/usr/local/etc目錄下,進程運行在/usr/local/var/run目錄下。
5.安裝成功後,一般會設置開機啓動,這裏mac系統的開機啓動是寫在~/Library/LaunchAgents目錄下的,具體語句及說明以下:
複製php項目目錄下的啓動文件到mac自啓動目錄下,這裏啓動文件名爲homebrew.mxcl.php54.plist
cp /usr/local/Cellar/php54/php5.4.33/homebrew.mxcl.php54.plist ~/Librarb/LaunchAgents/
mysql和nginx自啓動設置相似。
6.nginx安裝成功後須要對nginx進行配置,主要內容大概包括:nginx線程設置、錯誤日誌設置和http設置
worker_processes 1;
error_log /usr/local/etc/nginx/log/error.log warn;
pid /usr/local/var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /usr/local/etc/nginx/log/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;include /usr/local/etc/nginx/vhosts/*.conf;
}
7.對站點信息進行配置,我的存放在/usr/local/etc/nginx/vhosts/目錄下,文件主要設置了監聽端口、域名、默認首頁和重寫規則
server {
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /users/admin/Sites/PHPWeb/helloLaravel/public;
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;
}
access_log /usr/local/etc/nginx/log/access.log;
}
8.PHP安裝成功後,目前不須要什麼特定的配置,默認安裝會自帶PHP-FPM,須要啓動PHP-FPM,一樣PHP-FPM也不須要特別的配置。
9.mysql安裝成功後須要初始化mysql配置數據庫,並修改初始密碼。
10.php拓展模塊安裝,以mcrypt爲例,由於php5.4源碼包自帶mcrypt,下載解壓編譯安裝後會默認安裝到php的extensions目錄下的no-debug-non-zts目錄下
這裏以個人安裝目錄爲例
/usr/local/Cellar/php54/5.4.33/lib/php/extensions/no-debug-non-zts-20100525
以後在php.ini文件下的extensions處添加以下配置:
extension=/usr/local/Cellar/php54/5.4.33/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so
這裏個人php.ini文件在/usr/local/etc/php/5.4目錄下,添加後能夠經過php -m查看是否加載mcrypt模塊,要想nginx成功應用還有後重啓php-fpm。
大體說明如上,具體安裝可參考以下博客:
http://dhq.me/mac-install-nginx-mysql-php-fpm
http://blog.frd.mn/install-nginx-php-fpm-mysql-and-phpmyadmin-on-os-x-mavericks-using-homebrew/
如下額外說明php拓展模塊的安裝
http://www.tantai.org/19/mac-os-x-php-mcrypt
如下做一些概念介紹,方便理解:
[1]Homebrew
Homebrew是mac下開源的包管理軟件,由Max Howell組織編寫,這個管理工具在Ruby on Rails社區獲得普及,並由於其拓展性獲得好評(維基百科)。
Homebrew是mac下用來下載管理軟件的工具,你能夠經過homebrew下載開發工具,也能夠經過下載源碼包編譯安裝,只不過brew方式更加方便簡潔。
經過Ruby腳本安裝Homebrew
Homebrew經常使用命令:
查詢軟件
brew search soft
查看某軟件命令參數
brew options soft
安裝軟件
brew install soft
刪除軟件
brew remove soft
經過Homebrew安裝Nginx、Mysql、PHP
默認會安裝到/usr/local/Cellar目錄下,相應配置文件在/usr/local/etc目錄下,進程運行在/usr/local/var/run目錄下。
[2]PHP HttpServer
php有四種運行模式:模塊模式、CGI、fastcgi、CLI。
模塊模式以mod_php5模塊形式集成,經常使用在Apache服務器下。
CGI是比較老的一種方式了,如今使用的不多,漸漸被fastcgi取代。
fastcgi是當前使用比較多的運行模式,目前php內置的PHP-CGI就是fastcgi管理器。
CLI模式就是經常使用的php命令行,好比php -v 、php -m
apache2handler是apache 自帶運行php的方式
Apache的工做模式是Apache服務器在系統啓動後,預先生成多個進程副本駐留在內存中,一旦有請求出現,就當即使用這些空餘的子進程進行處理,這 樣就不存在生成子進程形成的延遲了。這些服務器副本在處理完一次HTTP請求以後並不當即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反 應更快,性能較高。
這就致使了當Apache服務器進行壓力測試後其負載仍舊居高不下。
CGI
CGI全稱是「公共網關接口」(Common Gateway Interface),是HTTP服務器與你的或其它機器上的程序進行「交談」的一種工具。
CGI是比較老的模式了,這幾年都不多用了。cgi方式遇到鏈接請求先要建立cgi的子進程,而後處理請求,處理完後結束這個子進程。這就是fork- and-execute模式。因此用cgi方式的服務器有多少鏈接請求就會有多少cgi子進程。子進程反覆加載是cgi性能低下的主要緣由。
FastCGI
FastCGI FastCGI像是一個常駐(long-live)型的CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去fork一次
FastCGI執行流程以下:
1.Web Server啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
2.FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的鏈接。
3.當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
4.FastCGI子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web Server。當FastCGI子進程關閉鏈接時,請求便告處理完成。
PHP-CGI
PHP- CGI是PHP自帶的FastCGI管理器。能夠對其直接啓動。如今不論是lighttpd仍是nginx均可以與php-cgi進行組合運行php,其 中lighttpd直接組合php-cgi運行php,還算比較穩定,但nginx跟php-cgi直接組合運行php,php-cgi進程常常崩潰,而 且佔用的內存也比較高。
PHP-CGI的缺點有
1.php-cgi變動php.ini配置後需重啓php-cgi才能讓新的php-ini生效,不能夠平滑重啓
2.直接殺死php-cgi進程,php就不能運行了。
PHP-FPM
PHP-FPM是一個PHP FastCGI管理器,PHP-FPM實際上是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。
PHP5.3.3已經集成php-fpm了,再也不是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,能夠有效控制內存和進程、能夠平滑重載PHP配置
Spawn-FCGI
Spawn-FCGI是一個通用的FastCGI管理服務器,它是lighttpd中的一部份,不少人都用Lighttpd的Spawn-FCGI進行FastCGI模式下的管理工做
FastCGI 像是一個常駐(long-live)型的CGI,它能夠一直執行着,激活後,沒必要每次都花費時間去fork(fork是fork-and-execute 模式)。它還支持分佈式的運算,即 FastCGI 程序能夠在網站服務器之外的主機上執行而且接受來自其它網站服務器來的請求。
FastCGI 是語言無關的、可伸縮架構的CGI開放擴展,其主要行爲是將CGI解釋器進程保持在內存中並所以得到較高的性能。衆所周知,CGI解釋器的反覆加載是 CGI性能低下的主要緣由,若是CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則能夠提供良好的性能、伸縮性、Fail- Over特性等等。
目前常見的php HttpServer Stack有三種:
1.Apache+mod_php5
2.lighttp+spawn-fcgi
3.nginx+PHP-FPM