nginx配置與常見錯誤解決方法
到官網下載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程序是否能夠運行。經過測試成功運行。
另在那個帖子中還有一個完整的所用工具和腳步的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上去