搜尋

首頁  >  問答  >  主體

新手用nginx,有幾個問題問下大神們

先前看到慕課網是用nginx部署的靜態資源,所以想自己嘗試下用ngjinx部署我的資源。現在需要下面幾個問題:

  1. 例如慕課網的這個連結:http://www.imooc.com/course/list ,它是怎麼匹配url後的/course/list,我只能使用 list.html,我想讓每個連線都不會出現.html的後綴,這個是重寫url嗎,還是用location設定

2.

上面的是一個location的配置,用來反向代理,它不應該可以匹配像/test/test.html,但是沒有匹配到,所以沒有轉發到代理伺服器,而是正常顯示靜態頁面。

但是它可以符合這樣的:/products/getproducts/2,確實轉發到了:localhost:8086/products/getproducts/2 ,得到正確的資料。

先問這兩個吧,對伺服器不是很懂,可能有點白痴,望解答呀

#
为情所困为情所困2749 天前574

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-05-16 17:25:54

    第一個問題:
    Nginx用try_files指令可以很方便地把請求資料匯入到框架的前端控制器例如index.php裡:

    location {
        try_files $uri $uri/ /index.php?$args;
    }
    

    前端控制器index.php可以用$_SERVER['REQUEST_URI']取得/course/list這串URL參數,如果後面還有參數,比如/course/list?page=2&tag=mysql,這時可以用$_SERVER ['QUERY_STRING']取得查詢字串page=2&tag=mysql,然後自行urldecode後用explode以&分割串獲得類似$_GET的參數數組,也可以直接使用$_GET拿到參數數組.

    總而言之,就是由程式入口index.php及其裡面的程式決定要載入HTML靜態檔案回傳,還是連接資料庫可進行處理.
    如果你想讓Nginx判斷是否命中HTML快取,可以這樣設定:

    location / {
        try_files $uri $uri/ /html$uri.html /index.php?$args;
    }
    

    例如存取/post/1024,Nginx會依照try_files給定的順序嘗試存取以下檔案:
    /post/1024 ($uri 表示文件)
    /post/1024/ ($uri/ 表示目錄)
    /html/post/1024.html (/html$uri.html 表示你的HTML靜態快取)
    如果都不存在,則連同參數把URI訊息交給index.php處理 (最後的/index.php?$args表達的就是這個意思).

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-16 17:25:54

    問題 1,可以使用rewrite方式,例如:

    rewrite "^/(course/.*)/?"   .html last;
    

    要注意的是只重寫所有course 開頭的請求
    xxx.com/course/list -> xxx.com/course/list.html
    xxx.com/course/list/sub -> xxx.com/course/list/sub.html

    問題 2
    感覺應該還有其他的location 配置,如果方便把整個nginx配置貼出來

    回覆
    0
  • 取消回覆