本周潘老师提出了一个需求:学生上传文件(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