本週潘老師提出了一個需求:學生上傳文件(html,js,css……)後,可以以學號加域名,如:123456.example.com的方式直接查看做業效果。css
一看這不就相似github pages,在之前的時候還搞過一個github pages的博客,也是很久沒用過了,
扯遠了,回到正題,github是如何實現的,我並不知道,但以潘老師的需求來看,nginx確定能實現的,通過查詢後發現,nginx裏面的不少參數都是支持正則表達式的,其中和域名有關的server_name
也是支持的,而且學號是六位數字,格式也很好,問題的突破點就是他了。html
nginx中的server_name
指令主要用於配置基於名稱的虛擬主機,所謂虛擬主機:nginx
虛擬主機是一種特殊的軟硬件技術,它能夠將網絡上的每一臺計算機分紅多個虛擬主機,每一個虛擬主機能夠獨立對外提供 www 服務,這樣就能夠實現一臺主機對外提供多個 web 服務,每一個虛擬主機之間是獨立的,互不影響的。
簡單的說就是讓一臺服務器,提供多個不一樣的web服務。git
server_name
能夠由精確名稱、通配符名稱或正則表達式來定義。
更多的基礎知識能夠看這篇文章,咱們直接看正則表達式的使用。github
咱們要匹配的是六位的數字,因此咱們的正則表達式是:^(\d{6})\.example\.com$
。
解釋一下這個正則表達式:web
^
在此表明開頭,$
表明結尾。\d
就是[0-9]
。表示是一位數字。記憶方式:其英文是digit(數字)。{m, n}
表明長度不小於m,不大於n,{n}
表明長度爲n。.
是特殊字符,因此須要用\
轉義。()
表明分組,這個一句話說不清楚,大概就是取括號內的值爲一個變量在nginx
能夠經過$1,$2……
取得。
在nginx中使用正則表達式要注意如下幾點:正則表達式
- 用正則表達式,服務器名稱必須以波浪號字符開頭。
- 忘記設置
^
和$
錨。在語法上它們不是必需的,但在邏輯上是必需的。- 正則表達式中包含
{
和}
字符時應使用引號括起來
本需求中,nginx的配置爲:服務器
server { listen 8011; # 經過正則表達式匹配域名 server_name "~^(\d{6})\.example\.com$"; # $1 是匹配到的第一個符合要求的變量 root ……/$1; }
這只是針對這個需求的簡單實現,若是想要系統深刻的學習一下,server_name
,和正則表達式
能夠看看參考文章中的文章,都是寫的很不錯的。網絡
祝黃庭祥考研順利。post