Posts

Showing posts from July, 2018

Nginx server 和 location 優先順序

Nginx是一個輕量形的 WEB 伺服器,功能很強大。

其中 server 和 location 可以有很多種的設定方式,也因此需要有個機制去選擇出到底該用哪一個。

這篇文章會說明 Nginx 選擇 server 和 location 的方法。



Server 當設定檔中有多個 server (...) 區塊,Nginx會怎麼選擇呢?
server的選擇相對比較簡單,在開始之前,要先了解Nginx怎麼編譯 Server 裡面的 listen 。
預設的 listen 通常是 :
listen 80 default_server;

但是一個完整的描述方法因該是:
listen IP:PORT;

而缺少的部分(不管是缺少IP還是Port號)Nginx會自動使用預設值補齊。
補齊的方式如下

缺少IP
如 listen 80;,Nginx會自動補0.0.0.0,變成 :
listen 0.0.0.0:80;

缺少Port
如 listen 10.1.1.1;,Nginx會自動補80 Port號,變成 :
listen 10.1.1.1:80;

兩個都缺
也就是沒有使用 listen ,nginx會自動補上 listen 0.0.0.0:80;

知道自動補齊的方法後,就可以開始討論選擇server的順序。


首先 Nginx會先檢查 IP:Port 的匹配。
選擇順序為
listen 有指定IP (如 10.1.1.1)
listen 無指定或使用0.0.0.0

第二 比對 server_name
當第一個IP:Port匹配檢查完後,發現有多個符合的結果,才會繼續比對。
選擇順序為
1. 完整比對到server_name,如 server_name www.example.com;
2. server_name前面有 * 符號,如 server_name *.example.com;
3. server_name後面有 * 符號,如 server_name www.*;
4. server_name是正規表示法,如 server_name ~www.example[1-3].com;
5. 全部的server_name都不匹配,此時Nginx會使用 listen 後面有 default_server字樣的
    如 :
    listen 80 default_server…

linux文字修改大師-sed-01-基本介紹

Image
會寫這篇文章,主要是為了自己可以記住龐大的sed功能。
章節的編排主要是依據功能性。
個人使用sed的主要原因是自動化修改設定檔。

目前看過最好的sed和awk中文教學網站大概是底下這個連結
http://wanggen.myweb.hinet.net/ach3/ach3.html

本篇文章主要是依照 GUN 的 sed所撰寫,連結為
https://www.gnu.org/software/sed/manual/sed.html

這邊提供一些線上的正規表示法網頁,可以即時知道自己寫的正規是否有匹配

https://regex101.com/
裡面有很多範例可以直接複製使用

https://regexr.com/
可使用replace功能, 方便驗證 command s 是否正確,裡面還有正規的符號參考



sed簡介

學習sed建議具備正規表示法的基礎,沒有此基礎也可學習。

GUN的sed簡介說到,sed是一種串流型態的文字編輯器

類似一個管道(pipe),特別的是,sed會在管道中間進行文字的取代、刪除、插入等功能。

input =======>output
              filter

sed的input可以是一個或多個檔案、stdin或前一個指令利用 | (pipe)傳到sed



目錄
sed基礎介紹
常用option
address
除了某個條件以外,其它都符合
p指令
s指令
a、i、c、d指令





sed基礎介紹

sed的指令格式為
sed [option] "/address/ , /address/ command argument [flag] " [inputFile...]

從左到右介紹
[option] 第一個option是常見到的以 - 符號開頭的功能,如 -n、-r、-i,可省略
/address/ address有兩個,代表開始行數和結尾行數
              只有一個代表指定的這行,都不輸入代表每行都會執行command
              address可以用正規表示法
command 進行的動作,當匹配address後,會進行怎樣的行為,常見的command有s、a、i、c
argument 給command使用的參數,大部分command後面要接參數
flag 只有 s 指令才會用到
inputF…