windows平台中配置nginx+php環境_php技巧

來源:互聯網
上載者:User

剛看到nginx這個詞,我很好奇它的讀法(engine x),我的直譯是"引擎x",一般引"擎代"表了效能,而"x"大多出現是表示"xtras(額外的效果)",那麼整個詞的意思就是類似"極致效果","額外效能"。當然這裡不是要來嘮嗑,以上是題外話。

  nginx相較於我們熟悉的apache,IIS的優勢,就我淺入淺出的瞭解,在於"反向 Proxy"和"負載平衡"。因此考慮到能夠為Web伺服器節省資源,它可以代替apache來提供Web服務。那麼上正題了,nginx有這麼多優勢,那在windows下如何來配置nginx+php環境?網上看到還是那麼多轉載來轉載去的文章。這裡就我配置的過程,來介紹一下:

1、首先需要準備的應用程式套件組合。

nginx:nginx/Windows-1.0.4
php:php-5.2.16-nts-Win32-VC6-x86.zip
RunHiddenConsole:RunHiddenConsole.zip
nginx下php是以FastCGI的方式運行,所以我們下載非安全執行緒也就是nts的php包。

2、安裝與配置。

 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

實際中,可能還要開啟

extension=php_bz2.dllextension=php_curl.dllextension=php_gd2.dllextension=php_mbstring.dllextension=php_exif.dllextension=php_mcrypt.dllextension=php_mhash.dllextension=php_msql.dllextension=php_mssql.dllextension=php_mysql.dllextension=php_mysqli.dllextension=php_openssl.dllextension=php_pdo.dllextension=php_pdo_mssql.dllextension=php_pdo_mysql.dllextension=php_pdo_pgsql.dllextension=php_pdo_sqlite.dllextension=php_snmp.dllextension=php_sockets.dllextension=php_sqlite.dllextension=php_xsl.dllextension=php_zip.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 / {  root html;   #這裡是網站的根目錄 index index.html  index.htm;}

將root html;改為root D:/wnmp/www;加上index.php,即:

location / {  root D:/wnmp/www;  #這裡是網站的根目錄   index index.php index.html index.htm;}

這裡需要注意,路徑分隔字元請使用/而不要使用Windows中的\以防歧義。
再往下,找到

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}

先將前面的#去掉,同樣將root html;改為root D:/wnmp/www;。再把標記為紅色的/scripts改為$document_root,這裡的$document_root就是指前面root所指的網站路徑,這是改完後的:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#location ~ \.php$ {  root D:/wnmp/www;  fastcgi_pass 127.0.0.1:9000;  fastcgi_index index.php;  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   include fastcgi_params;}

設定error.log的存放目錄,將#error_log logs/error.log;的#去處,預設error.log是存放在Nginx安裝目錄中logs目錄下。

儲存設定檔,就可以了。

nginx+php的環境就初步配置好了,來跑跑看。我們可以輸入命令:

php-cgi.exe -b 127.0.0.1:9000 -c D:/wnmp/www/php/php.ini

來啟動php,並手動啟動nginx(可能不可行)。當然也可以利用指令碼來實現。

首先把下載好的RunHiddenConsole.zip包解壓到nginx目錄內,RunHiddenConsole.exe的作用是在執行完命令列指令碼後可以自動關閉指令碼,而從指令碼中開啟的進程不被關閉。然後來建立指令碼,命名為start_nginx.bat,我們在Notepad++裡來編輯它:

@echo offREM Windows 下無效REM set PHP_FCGI_CHILDREN=5REM 每個進程處理的最大請求數,或設定為 Windows 環境變數set PHP_FCGI_MAX_REQUESTS=1000 echo Starting PHP FastCGI...RunHiddenConsole D:/phpsetup/php-5.4.45-nts-Win32-VC9-x86/php-cgi.exe -b 127.0.0.1:9000 -c D:/phpsetup/php-5.4.45-nts-Win32-VC9-x86/php.ini echo Starting nginx...RunHiddenConsole D:/phpsetup/nginx-1.6.0/nginx.exe -p D:/phpsetup/nginx-1.6.0

再另外建立一個名為stop_nginx.bat的指令碼用來關閉nginx:

@echo offecho Stopping nginx... taskkill /F /IM nginx.exe > nulecho Stopping PHP FastCGI...taskkill /F /IM php-cgi.exe > nulexit

這樣,我們的服務指令碼也都建立完畢了。雙擊start_nginx.bat,再看看進程管理器是不是有兩個nginx.exe的進程和一個php-cgi.exe的進程呢?

這樣nginx服務就啟動了,而且php也以fastCGI的方式運行了。
到網站目錄下,建立一個phpinfo.php的檔案,在裡面編輯

<?phpphpinfo();?>

儲存後,開啟瀏覽器輸入http://localhost/phpinfo.php,如果看到

就說明,nginx+php的環境已經配置好了,呵呵~

Nginx 403 forbidden的解決辦法

常見的,引起nginx 403 forbidden有二種原因,一是缺少索引檔案,二許可權問題。

1、缺少index.html或者index.php檔案

代碼如下:

server {  listen 80;  server_name localhost;  index index.php index.html;  root /var/www;}

如果在/var/www下面沒有index.php,index.html的時候,直接存取網域名稱,找不到檔案,會報403 forbidden。
例如:你訪問www.test.com而這個網域名稱,對應的root指定的索引檔案不存在。

許可權問題

對於PHP而言,如果nginx使用者沒有web目錄的許可權,則會導致該錯誤。
解決辦法:修改web目錄的讀寫權限,或者是把nginx的啟動使用者改成目錄的所屬使用者,重起一下就能解決。 如:
代碼如下(Linux下):

chown -R nginx_user:nginx_user /htdocs

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.