nginxcgiphp
『壹』 用nginx作為負載均衡伺服器,php代碼放在哪
lnmp架構 直接放nginx的web文件夾中,通過cgi解析php返回給nginx,如果是lnmpa架構,就是多了個apache,nginx負責分發請求,然後apache調用php_mod解析php,最後返回給nginx
如果是負載均衡,nginx分發請求,每個請求可能請求不同的伺服器,但是每個伺服器的網站程序應該是一致的,並且每個伺服器上都部署了php環境和程序,然後返回給請求者nginx輸出頁面。
『貳』 如何架設Nginx+Php Web伺服器
1、首先需要准備的應用程序包。nginx:nginx/Windows-1.0.4php:php-5.2.16-nts-Win32-VC6-x86.zip(nginx下php是以FastCGI的方式運行,所以我們下載非線程安全也就是nts的php包)(還會用到)RunHiddenConsole:RunHiddenConsole.zip2、安裝與配置。1)php的安裝與配置。直接解壓下載好的php包,到D盤wnmp目錄(D:\wnmp),這里把解壓出來的文件夾重命名成php5。進入文件夾修改php.ini-recommended文件為php.ini,並用Editplus或者Notepad++打開來。找到extension_dir="./ext"更改為extension_dir="D:/wnmp/php5/ext"往下看,再找到;extension=php_mysql.dll;extension=php_mysqli.dll前面指定了php的ext路徑後,只要把需要的擴展包前面所對應的「;」去掉,就可以了。這里打開php_mysql.dll和php_mysqli.dll,讓php支持mysql。當然不要忘掉很重要的一步就是,把php5目錄下的libmysql.dll文件復制到C:\Windows目錄下,也可以在系統變數裡面指定路徑,當然這里我選擇了更為方便的方法^_^。到這里,php已經可以支持mysql了。接下來我們來配置php,讓php能夠與nginx結合。找到;cgi.fix_pathinfo=1我們去掉這里的封號。cgi.fix_pathinfo=1這一步非常重要,這里是php的CGI的設置。2)nginx的安裝與配置。把下載好的nginx-1.0.4的包同樣解壓到D盤的wnmp目錄下,並重命名為nginx。接下來,我們來配置nginx,讓它能夠和php協同工作。進入nginx的conf目錄,打開nginx的配置文件nginx.conf,找到location/{roothtml;#這里是站點的根目錄indexindex.htmlindex.htm;}將roothtml;改為rootD:/wnmp/www;再往下,找到復制代碼#.0.0.1:9000##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}復制代碼先將前面的「#」去掉,同樣將roothtml;改為rootD:/wnmp/www;。再把標記為紅色的/scripts改為「$document_root」,這里的「$document_root」就是指前面「root」所指的站點路徑,這是改完後的:復制代碼#.0.0.1:9000#location~\.php${rootD:/wnmp/www;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;includefastcgi_params;}復制代碼保存配置文件,就可以了。nginx+php的環境就初步配置好了,來跑跑看。我們可以輸入命令來啟動php,並手動啟動nginx,當然也可以利用腳本來實現。首先把下載好的RunHiddenConsole.zip包解壓到nginx目錄內,RunHiddenConsole.exe的作用是在執行完命令行腳本後可以自動關閉腳本,而從腳本中開啟的進程不被關閉。然後來創建腳本,命名為「start_nginx.bat」,我們在Notepad++里來編輯它復制代碼@echooffREMWindows下無效REMsetPHP_FCGI_CHILDREN=5REM每個進程處理的最大請求數,或設置為Windows環境變數setPHP_FCGI_MAX_REQUESTS=:/wnmp/php5/php-cgi.exe-b127.0.0.1:9000-cD:/wnmp/php5/php.:/wnmp/nginx/nginx.exe-pD:/wnmp/nginx復制代碼再另外創建一個名為stop_nginx.bat的腳本用來關閉nginx@/F/IMnginx.exe>/F/IMphp-cgi.exe>nulexit做好後,是這樣的這樣,我們的服務腳本也都創建完畢了。雙擊start_nginx.bat看看進程管理器是不是有兩個nginx.exe的進程和一個php-cgi.exe的進程呢?這樣nginx服務就啟動了,而且php也以fastCGI的方式運行了。到站點目錄下,新建一個phpinfo.php的文件,在裡面編輯保存後,打開瀏覽器輸入「phpinfo.php」,如果看到就說明,nginx+php的環境已經配置好了,呵呵~
『叄』 win7下 nginx cgi 配置文件在哪
在win7下用的是IIS做web伺服器,但近來因項目需求的原因,需要在伺服器遇到404錯誤的時候自動做轉向(不是在客戶端的跳轉,而是在伺服器收到客戶端請求去某目錄下讀取文件返回時,如果發現目錄或目錄下文件不存在,自動轉到另一個伺服器去取),用IIS發現很難做到這點,於是決定搭建nginx的開發環境,通過配置實現這一點。 首先,google nginx和php,分別到他們的官網把最新版本的下載回來,我當時下的PHP是5.4.3的版本,nginx是1.5.2,我把他們都放在D盤下一個叫webserver的文件夾里,然後開始做配置了。 nginx的啟動很簡單,進入它的目錄,然後雙擊nginx.exe,如果沒有埠沖突等問題的話,直接在瀏覽器輸入localhost就可以訪問welcome to nginx字樣的網頁了,這是默認的歡迎頁面,放在自帶的默認網頁文件目錄html下的。難道就這么簡單嗎?當然不是的。 這時如果你在html目錄下建一個php文件,寫上一句測試php環境的最經典的,然後在瀏覽器輸入這個php文件的路徑進行訪問,你會發現nginx根本不懂怎樣去解析php代碼,這是因為nginx與PHP還沒有配合起來。按道理來說,當遇到php文件的時候,nginx應該把它交給php的fast-cgi來處理,然後把處理完的結果返回給客戶端(瀏覽器)的。 怎樣告訴nginx當遇到php文件時交給誰處理呢?打開nginx1.5.2的文件夾,找到conf目錄,編輯目錄下的nginx.conf文件,我的編輯結果如下所示,具體配置過程中需要注意什麼請看注釋: server { listen 80; server_name localhost; charset utf-8; location / { root E:/work/jentian/client;//html文件目錄,由於我們項目的客戶端代碼與服務端服務是嚴格分開的,所以這里的root跟php的root不同 index index.html index.htm; } location ~ .php { root E:/work/jentian/server; //php文件目錄 fastcgi_param SCRIPT_FILENAME E:/work/jentian/server$fastcgi_script_name;//注意,$fastcgi_script_name前面的路徑必須與root是一致的 fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } } nginx的配置也就這么多了,很簡單吧,但這時候當你刷新php頁面的時候,會發現nginx現在還是沒有辦法解析php文件,原因在於php的fast-cgi還沒有啟動,如果打開一個普通的命令提示符窗口,然後輸入命令啟動fast-cgi時,啟動後這個窗口是不能關閉的,否則fast-cgi的進程也會終止,不能繼續解析php文件了,後來查了一下,原來windows是有一個運行隱形控制台的方法的,用這個方法啟動fast-cgi,就不怕關閉控制台後fast-cgi也跟著結束的問題的。最後,寫了一個批處理文件來啟動fast-cgi和nginx,這能就能一鍵啟動nginx+php的環境了。下面是這個批處理文件的內容: @echo off set PHP_FCGI_MAX_REQUESTS = 1000 echo Starting PHP FastCGI... rem 下面這里的分別替換成你的php-cgi.exe和php.ini的路徑 ,後面的-b,-c等參數必須保留且注意前後空格 RunHiddenConsole D:/webServer/php-5.4.3/php-cgi.exe -b 127.0.0.1:9000 -c D:/webServer/php-5.4.3/php.ini //這里 echo Starting nginx... rem 注意替換成你的nginx目錄 D:/webServer/nginx-1.5.2/nginx.exe -p D:/webServer/nginx-1.5.2/ cd D:/webServer/nginx-1.5.2/ pause 把這個批處理文件保存到好,雙擊,就能啟動你的nginx+php環境了,這時再刷新一下你的phpinfo頁面,一切正常了。
『肆』 怎麼在nginx中運行php文件
nginx中不能直接運行php文件,只能通過調用外部CGI處理器運行php文件。php的CGI處理器在linux中常用的是 php-fpm。在win中就只能是 php-cgi.exe 了。相關CGI的知識請網路,可以使用'nginx CGI'關鍵字進行查詢。
『伍』 如何在Nginx中使用CGI
Nginx+PHP運行環境
首先安裝好你的Nginx和PHP環境,PHP版本要求5.3以上。如果你沒有安裝過,可Google搜索相關教程,也可以參照Nginx和PHP官方的文檔。這是第一步,有一個正常的Nginx + PHP的運行環境。
配置Nginx
nginx可參考如下配置:
server {
listen 80;
server_name jockchou.gitblog.cn;
root /data/vhosts/jockchou.gitblog.cn;
index index.html index.htm index.php;
location ~ \.(jpg|png|gif|js|css|swf|flv|ico)$ {
expires 12h;
}
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?$1 last ;
break;
}
}
location ~* ^/(doc|logs|app|sys)/ {
return 403;
}
location ~ .*\.(php|php5)?$
{
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
將以上配置中的server_name和root改成你自己的,fastcgi_pass配成你的CGI進程埠。
許可權配置
由於Gitblog的緩存機制需要寫 app/cache 目錄,必要時請查看並修改這個目錄的許可權,以確保你的PHP擁有寫這個目錄的許可權。通常你只需要將此目錄的所屬者和組修改成CGI的運行賬戶。
運行
以上配置好以後,啟動你的Nginx和CGI服務,上傳Gitblog源代碼到網站目錄,通過瀏覽器訪問解析到本機的域名觀察頁面效果。如果頁面沒有正常顯示,通過錯誤碼來檢查你的CGI和Nginx配置。
Gitblog介紹
『陸』 windows下nginx 啟動php-cgi進程數量怎麼修改
NMP環境現在還是比較多人用的,下面介紹一個修改php-cgi進程數的方法: 一、修改php-cgi: vi /usr/local/nginx/conf/nginx.conf 二、其中worker_processes 1;可以修改成2或3個,nginx本身就很強大,不需要像apache那樣,開啟過多的進程來保證其穩定運行。 vi /usr/local/php/etc/php-fpm.conf 三、找到,按你的內存容量修改PHP進程的數量,一般128內存開啟6個,256內存開啟16個。這樣能保證,在PHP大並發的情況下不會502錯誤,註:PHP5.3系列不需要修改。 四、優化後,重啟lnmp /root/lnmp restart
『柒』 nginx,php-cgi部署環境後,出現502錯誤,怎麼辦
這么巧呀,最近我也遇到這種問題。我已經找到了相關的解決方法。將網上找到的一些和502 Bad Gateway錯誤有關的問題和排查方法列一下,先從FastCGI配置入手:1.FastCGI進程是否已經啟動2.FastCGI worker進程數是否不夠運行 netstat -anpo | grep 「php-cgi」 | wc ,
我建議樓主去後盾人平台看一看,我就是從那裡學習借鑒的。相信你一定能夠受益匪淺。
『捌』 linux 配置nginx+php-cgi伺服器分離的錯誤:No input file specified
首先你要檢查FastCGI開啟的是TCP正常是WIndowsSocket。
通過Telnet相應的埠或者檢查php-fpm.conf配置文件可以查出。
假如開啟了,看是IP。還是127.0.0.1,
開成0.0.0.0:9000這樣全部可以訪問,如果127隻有本機可以訪問。
估計是這塊的問題。