一. 安裝Nginx
將下載後的nginx壓縮包解壓到某個目錄下,比如:D:\program\myplatform\Nginx\nginx-1.10.0,解壓後的目錄結構為:
二. 開始配置
配置目標:能正常運行php指令碼程式
大部分情況下,我們需要修改的設定檔只有一個,那就是nginx.conf,該檔案位於conf目錄下。具體設定項目為:
1. server_tokens off;
出於安全方面的考慮,最好是隱藏nginx版本號碼資訊
2. listen 8088;
8088為監聽連接埠,根據需要可以填寫其它連接埠號碼
3. server_name localhost;
localhost為伺服器訪問名稱,也就是我們在瀏覽器裡輸入的那個url地址
4. charset utf-8;
字元集編碼
5. 工作目錄
將如下配置
location / { root html; index index.html index.htm; }
修改為:
location / { root D:/javapro; index index.php index.html index.htm; }
root 定義了工作空間,也就是我們php項目所在的目錄。
加入index.php是為了讓nginx能夠識別php指令碼,否則,在訪問php檔案時,會出現直接下載的情況。
6. 整合php
將location ~ \.php配置部分的注釋全部去掉,最終配置如下:
location ~ \.php$ { root D:/javapro; fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
注意這裡面的$document_root變數,它對應的內容就是root參數值,如果我們沒有定義root參數或者把root注釋掉,在訪問php的時候,頁面上就會出現No input file specified.提示。
7. 啟動php-cgi
開啟cmd命令視窗,切換到php的安裝目錄,執行php-cgi -b 127.0.0.1:9000,即可啟動php-cgi,啟動完成後,cmd視窗切勿關閉,否則php-cgi也會被關掉的。
特別提醒:只有在開啟php-cgi的情況下,nginx才能正常訪問php。
8. 重啟nginx
開啟cmd命令視窗,切換到nginx所在目錄,執行nginx -s reload即可重啟nginx。其它相關nginx相關命令如下:
啟動:start nginx
停止:nginx -s stop
退出:nginx -s quit
三. 碰到的問題
1. No log handling enabled - turning on stderr logging
啟動php-cgi過程中,如果報出這個錯誤,請把php.ini設定檔中的extension=php_snmp.dll注釋掉。
2. 連接埠佔用
Cannot bind/listen socket - [2] No such file or directory.
Couldn't create FastCGI listen socket on port 127.0.0.1:9000
啟動php-cgi過程中,如果報類似這種錯誤,就表示9000連接埠被佔用了,此時,我們可以換個連接埠試試。
3. 反向 Proxy404 not found
以反向 Proxy的方式訪問php時,出現404 Not Found錯誤,這種情況,我們需要修改nginx的error_page配置項,如下:
將原來預設的error_page注釋掉
#error_page 404 /404.html;
然後,重新定義error_page,如下:
error_page 404 @proxy;
@proxy對應的內容為:
location @proxy { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1; }
儲存後,重啟nginx即可解決404 Not Found錯誤。
友情提醒:以反向 Proxy的方式訪問php時,就不需要配置php-cgi模組了。
四. 擴充
如何讓nginx支援jsp訪問。
nginx本身是不支援jsp等動態指令碼的,但我們可以通過nginx反向 Proxy的方式來支援jsp等動態網頁面的訪問,即把jsp等動態網頁面的請求,轉寄給後端的tomcat伺服器進行處理,具體配置如下:
在http下建立一個server虛擬機器,內容為:
server { listen 8089; server_name localhost; charset utf-8; location ~ \.(jsp|action|do)$ { proxy_pass http://127.0.0.1:8080; } location ~ \.(html|js|css|png|gif)$ { root D:/program/myplatform/Tomcat/webapps/ROOT; } }
重啟nginx後,通過http://localhost:8089/index.jsp即可訪問到tomcat的歡迎頁面。其中,http://127.0.0.1:8080是tomcat伺服器的訪問地址,proxy_pass將jsp等請求轉寄到了tomcat伺服器的8080連接埠上,注意配置中的靜態資源部分:
location ~ \.(html|js|css|png|gif)$ { root D:/program/myplatform/Tomcat/webapps/ROOT; }
如果去掉上面這段配置,通過http://localhost:8089/index.jsp將無法訪問到jsp檔案中的靜態資源,從而造成頁面配置錯亂等問題。
同理,也可以通過這種方式來整合php頁面的訪問,但要事先安裝好apache伺服器。