新手用nginx,有幾個(gè)問題問下大神們
問題描述
此前看到慕課網(wǎng)是用nginx部署的靜態(tài)資源,所以想自己嘗試下用ngjinx部署我的資源。現(xiàn)在需要下面幾個(gè)問題:
比如慕課網(wǎng)的這個(gè)鏈接:http://www.imooc.com/course/list ,它是怎么匹配url后的/course/list,我只能使用list.html,我想讓每個(gè)連接都不會(huì)出現(xiàn).html的后綴,這個(gè)是重寫url嗎,還是用location配置2.
上面的是一個(gè)location的配置,用來反向代理,它不應(yīng)該可以匹配像/test/test.html,但是沒有匹配到,所以沒有轉(zhuǎn)發(fā)到代理服務(wù)器,而是正常顯示靜態(tài)頁面。
但是它可以匹配這樣的:/products/getproducts/2,確實(shí)轉(zhuǎn)發(fā)到了:localhost:8086/products/getproducts/2 ,得到正確的數(shù)據(jù)。
先問這兩個(gè)吧,對(duì)服務(wù)器不是很懂,可能有點(diǎn)白癡,望解答呀
問題解答
回答1:第一個(gè)問題:Nginx用try_files指令可以很方便地把請(qǐng)求數(shù)據(jù)導(dǎo)入到框架的前端控制器比如index.php里:
location { try_files $uri $uri/ /index.php?$args;}
前端控制器index.php可以用$_SERVER[’REQUEST_URI’]獲取/course/list這串URL參數(shù),如果后面還有參數(shù),比如/course/list?page=2&tag=mysql,這時(shí)可以用$_SERVER[’QUERY_STRING’]獲取查詢串page=2&tag=mysql,然后自行urldecode后用explode以&分割串獲得類似$_GET的參數(shù)數(shù)組,也可以直接使用$_GET拿到參數(shù)數(shù)組.
總而言之,就是由程序入口index.php及其里面的程序決定是加載HTML靜態(tài)文件返回,還是連接數(shù)據(jù)庫可進(jìn)行處理.如果你想讓Nginx判斷是否命中HTML緩存,可以這樣配置:
location / { try_files $uri $uri/ /html$uri.html /index.php?$args;}
比如訪問/post/1024,Nginx會(huì)按try_files給定的順序嘗試訪問以下文件:/post/1024 ($uri 表示文件)/post/1024/ ($uri/ 表示目錄)/html/post/1024.html (/html$uri.html 表示你的HTML靜態(tài)緩存)如果都不存在,則連同參數(shù)把URI信息交給index.php處理 (最后的/index.php?$args表達(dá)的就是這個(gè)意思).
回答2:問題 1,可以使用rewrite方式,例如:
rewrite '^/(course/.*)/?' $1.html last;
需要注意的是只重寫所有course 開頭的請(qǐng)求xxx.com/course/list -> xxx.com/course/list.htmlxxx.com/course/list/sub -> xxx.com/course/list/sub.html
問題 2感覺應(yīng)該還有其他的location 配置,如果方便把整個(gè)nginx配置貼出來
