設定 Nginx 在 https 中,留下一頁 http
¶設定 Nginx 在 https 中,留下一頁 http
在看之前,想問來看文章的讀者們 (厲害的開發者們) 瀏覽器是否會 catch 某一版本的設定?
設定 Web Server 時,修改並不會即時反映,需要每一次都開新的無痕才可以驗證正確的結果。
這個問題,有兩個地方要注意
- Web Server
- 前端 router
這個 Web Server 的設定,在有前端 router 時,要注意。
如果沒有重新整理的 route 都算是前端 route 的執行結果,與 web server 無關。
¶最後的解法如下。
server { |
其中最重要的有兩個地方。
- 正規表示式 使用工具 驗證寫出來的正規表示式。
- 讀懂 nginx 的設定
¶正規表示式
設定檔幾個 regex
基本
語法 | 意思 |
---|---|
^ |
開頭處 |
$ |
結尾處 |
. |
非斷行的任意字元 |
/ |
只是反斜線 (正規表示式為\/ nginx 無需跳脫字元) |
邏輯
語法 | 意思 |
---|---|
^ |
邏輯 not |
?! |
負向預查 |
次數
語法 | 意思 |
---|---|
+ |
匹配前面的子運算式一次或多次。 |
* |
匹配前面的子運算式零次或多次。 |
^(/target/path)(.[^/]+)$
開頭是/target/path
且要接「任意字元,任意長度,但不能包含/
(階層) 」,就成立^(?!/target/path)(.+)$
開頭 條件不符合/target/path
時,且要接「任意字元」,就成立^.*$
「任意字元」,就成立
¶設定檔的關鍵字[1]
參考: Module ngx_http_core_module - nginx
- server
- listen 指定監聽 socket (TCP) port
- root
- index
- location
- return
- try_files
- rewrite
¶listen
能用在 server 內
指定 IP:port
listen 192.168.1.1:80; |
指定 port (該主機的任意 IP)
listen 80; |
¶location[1:1]
能用在 server 或 location 內
所有的 location 都會組成一棵樹
語法:
location [ = | ~ | ~* | ^~ ] uri { ... } |
=
URI 當字串匹配^~
URI 當字串,字串字首比對~
URI 當正規表示式匹配,區分大小寫~*
URI 當正規表示式匹配,不區分大小寫
nginx 配置 location 總結及 rewrite 規則寫法
¶try-files
能用在 server 或 location 內
依次判斷檔案是否存在,並且回傳,都不存在則由 fallback 處理
語法:
一種連續 if 判斷的指令
try_files file1 [file2 file3 file4 ... fileN] fallback; |
example
try_files $uri $uri/ /error.html =404; |
$uri
The value of $uri may change during request processing, e.g. when doing internal redirects, or when using index files.
發表於