1、下載:
到官網下載nginx穩定版,解壓到e盤根目錄;
到官網下載php非安裝版,解壓到e盤根目錄。
2、配置:
打開nginx.conf,修改相關位置如下,
location / {
root html; #網站根目錄
index index.html index.htm index.php;
autoindex on; #當網站沒有默認文件時,打開域名可以看到文件目錄結構
}
location ~ \.php$ {
#root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME e:/html/$fastcgi_script_name; #php文件存放目錄,測試過相對路徑不行,需要絕對路徑
include fastcgi_params;
}
配置好后打開命令提示符,切換到e:\nginx,啟動nginx命令:start nginx 。(相關介紹可到http://nginx.org/en/docs/windows.html)
注意:當修改配置文件后,要nginx -s quit 然后 start nginx 才有配置后的效果,用 nginx -s reload 沒效果。可能是windows版本的一個bug吧。
配置php.ini,設置extension_die = "ext/",把相關用到的ext擴展dll前面的分號去掉,不然不能正常啟動php-cgi.ext。
啟動php-cgi.exe;切換到e:\php,在命令提示符下輸入php-cgi.exe -b 127.0.0.1:9000。
3、測試:
寫一個打印phpinfo()的php腳本放到html目錄下面,測試php程序是否能夠運行。經過測試成功運行。
到官網下載nginx穩定版,解壓到e盤根目錄;
到官網下載php非安裝版,解壓到e盤根目錄。
2、配置:
打開nginx.conf,修改相關位置如下,
location / {
root html; #網站根目錄
index index.html index.htm index.php;
autoindex on; #當網站沒有默認文件時,打開域名可以看到文件目錄結構
}
location ~ \.php$ {
#root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME e:/html/$fastcgi_script_name; #php文件存放目錄,測試過相對路徑不行,需要絕對路徑
include fastcgi_params;
}
配置好后打開命令提示符,切換到e:\nginx,啟動nginx命令:start nginx 。(相關介紹可到http://nginx.org/en/docs/windows.html)
注意:當修改配置文件后,要nginx -s quit 然后 start nginx 才有配置后的效果,用 nginx -s reload 沒效果。可能是windows版本的一個bug吧。
配置php.ini,設置extension_die = "ext/",把相關用到的ext擴展dll前面的分號去掉,不然不能正常啟動php-cgi.ext。
啟動php-cgi.exe;切換到e:\php,在命令提示符下輸入php-cgi.exe -b 127.0.0.1:9000。
3、測試:
寫一個打印phpinfo()的php腳本放到html目錄下面,測試php程序是否能夠運行。經過測試成功運行。
========================================================
啟動與停止
1. 啟動Nginx:
D:/nginx-1.0.4/nginx.exe -p D:/nginx-1.0.4
2. 啟動PHP-CGI
D:/php/php-cgi.exe -b 127.0.0.1:9001 -c D:/php/php.ini
為了方便可以寫到一個批處理文件中,這里用到了一個RunHiddenConsole,可以在這里下載:
@echo off
REM Windows 下無效
REM set PHP_FCGI_CHILDREN=5
REM 每個進程處理的最大請求數,或設置為 Windows 環境變量
set PHP_FCGI_MAX_REQUESTS=1000
echo Starting PHP FastCGI...
REM RunHiddenConsole C:/php5/php-cgi.exe -b 127.0.0.1:9000 -c C:/php5/php.ini
D:/nginx-1.0.4/RunHiddenConsole.exe D:/php/php-cgi.exe -b 127.0.0.1:9001 -c D:/php/php.ini
echo Starting nginx...
D:/nginx-1.0.4/RunHiddenConsole.exe D:/nginx-1.0.4/nginx.exe -p D:/nginx-1.0.4
exit
3. 停止Nginx
D:/nginx-1.0.4/nginx.exe -p D:\nginx-1.0.4 -s stop
4. 停止PHP-CGI
taskkill /F /IM php-cgi.exe > nul
同樣可以寫到一個批處理文件中:
@echo off
echo Stopping nginx...
REM taskkill /F /IM nginx.exe > nul
D:/nginx-1.0.4/nginx.exe -p D:\nginx-1.0.4 -s stop
echo Stopping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul
Nginx配置的路徑問題
由於在Windows下文件路徑可以用”\”, 也可以用”\\”, 也可以用”/”作為路徑做分隔符。但”\”最容易引發問題,所以要盡量避免使用。
例如下面的配置可以正常運行
root G:\ezdemo;
但是這樣
root G:\tweb;
就會出現問題,訪問程序時會出現500錯誤。
在logs/error.log里面會發現這類似這樣的錯誤日志:
2011/06/16 22:07:28 [crit] 4756#5412: *2 GetFileAttributesEx() "G: web" failed (123: The filename, directory name, or volume label syntax is incorrect), client: 127.0.0.1, server: php.lab, request: "GET / HTTP/1.1", host: "php.lab"
2011/06/16 22:13:38 [crit] 4756#5412: *5 CreateFile() "G: pweb/test.html" failed (123: The filename, directory name, or volume label syntax is incorrect), client: 127.0.0.1, server: php.lab, request: "GET /test.html HTTP/1.1", host: "php.lab"
注意到G:后而有一個tab空格,你應該明白怎么回事了:)
========================================================
關於nginx以服務方式運行原理和實現方法參見 http://bbs3.chinaunix.net/thread-1264548-1-1.html
另在那個帖子中還有一個完整的所用工具和腳步的zip包,照readme.txt 安裝好服務是沒有問題的
本文主要是說說 nginx-0.7.58 以服務方式運行后“nginx -s reload”常見錯誤解決方法
注意,這個 nginx-0.7.58 下載自官方http://nginx.net
1、[alert]: CreateFileMapping(1024, nginx_shared_zone) failed (5: Access is denied)
根據這個提示我分析了一下,應該是權限問題,這時我分別用服務啟動和命令啟動nginx后發現
服務啟動后 nginx 是以 system 身份運行的,而 命令啟動后 nginx 是以 administrator 身份運行的
這樣看問題應該是出在了服務的運行身份上,所以我們應該修改服務的運行身份,具體修改方法:
服務--》NGNIX--》屬性--》登陸--》登陸身份--》選擇此賬戶后賬戶填入administration,再填入密碼
修改完后重啟服務再試 nginx -s reload ,一切正常
2、[error]: OpenEvent("ngx_reload_31796") failed (2: The system cannot find the file specified)
這個應該是最常見的錯誤了,一般引起這個錯誤的主要原因是 nginx 不能處理特定pid的 nginx 進程而造成的
這個錯誤信息中 reload 還有可能是 stop reopen quit,而后面的31796則是當前 logs\nginx.pid 中的值
我碰到這個問題的時候是在我mstsc登陸vps上的win03時,下面是當時復制出的一些信息
D:\httpd\nginx>sc stop nginx
D:\httpd\nginx>sc start nginx
D:\httpd\nginx>tasklist | findstr nginx
nginx.exe 16360 Console 0 3,184 K
nginx.exe 31112 Console 0 3,512 K
D:\httpd\nginx>start nginx.exe
D:\httpd\nginx>tasklist | findstr nginx
nginx.exe 16360 Console 0 3,184 K
nginx.exe 31112 Console 0 3,512 K
nginx.exe 32696 RDP-Tcp#3 7 3,212 K
nginx.exe 14988 RDP-Tcp#3 7 3,524 K
D:\httpd\nginx>
當時我沒有發現有啥問題,以為是程序的問題,后來我在本地虛擬機上win03上使用沒有碰到此錯誤,一樣的操作為啥結果會不同?
我就又重新在vps上的win03上做試驗,發現了貓膩,服務啟動和遠程登陸后手動啟動的會話id不同
就拿上面抓的信息為例子
nginx以服務方式啟動的會話id是0,而我遠程登陸后的會話id是7,所以不能操作會話id 0啟動的nginx
而我遠程登陸后自己手動 start nginx 啟動,這時nginx.exe的會話id就是我現在用的,所以我此時是能正常使用 nginx -s reload 的
綜上所述,這個錯誤是由於不能正常結束特定進程所引起的,也大多數情況是在遠程登陸后操作才會出現,具體的解決方法未知,最關鍵的問題遠程登陸后如何切換到會話id 0上去