静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module、ngx_http_image_filter_module等)的配置项说明,方便地在nginx.conf配置文件中加入新的配置项,从而实现更多的Web服务器功能。

一个典型的静态Web服务器会包含多个server块和location块,例如:

http {
gzip on;
upstream {

}

server {
listen localhost:;

location /webstatic {
if …
{

}
root optwebresource;

}
location ~* .(jpg|jpeg|png|jpe|gif)$ {
… }
}
server {

}
}

所有的HTTP配置项都必须直属于http块、server块、location块、upstream块或if块等,同时,在描述每个配置项的功能时,会说明它可以在上述的哪个块中存在,因为有些配置项可以任意地出现在某一个块中,而有些配置项只能出现在特定的块中。

下面会把这些配置项分为以下8类进行详述:

1.虚拟主机与请求的分发

2.文件路径的定义

3.内存及磁盘资源的分配

4.网络连接的设置

5.MIME类型的设置

6.对客户端请求的限制

7.文件操作的优化

8.对客户端请求的特殊处理。

并在后面列出ngx_http_core_module模块提供的变量和意义

1. 虚拟主机与请求分发

1)server_name

由于ip数量有限,所以经常存在多台主机域名对应同一ip的情况,这时就可以用server_name对应用户请求中的主机域名

用server块定义虚拟主机,这样nginx就能以不同方式处理不同域名的http请求了

语法: server_name name[...];
配置块: server

默认: server_name "";
配置块: serverserver_name后可以跟多个主机名称,如server_name www.testweb.com 、download.testweb.com;。
在开始处理一个HTTP请求时,Nginx会取出header头中的Host,与每个server中的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。有可能一个Host与多个server块中的server_name都匹配,这时就会根据匹配优先级来选择实际处理的server块。
server_name与Host的匹配优先级如下:

)首先选择所有字符串完全匹配的server_name,如www.testweb.com。
)其次选择通配符在前面的server_name,如*.testweb.com。
)再次选择通配符在后面的server_name,如www.testweb.*。
)最后选择使用正则表达式才匹配的server_name,如~^\.testweb\.com$。
5)最后的最后匹配部分匹配的,部分匹配的匹配到之后还要向后查询,后面不匹配才匹配此项,后面匹配就匹配后面的。前面的4项匹配之后直接处理,不会再匹配后面的。

如果Host与所有的server_name都不匹配,这时将会按下列顺序选择处理的server块。

)优先选择在listen配置项后加入[default|default_server]的server块。
)找到匹配listen端口的第一个server块。

如果server_name后跟着空字符串(如server_name"";),那么表示匹配没有Host这个HTTP头部的请求。
注意:Nginx正是使用server_name配置项针对特定Host域名的请求提供不同的服务,以此实现虚拟主机功能。

2)location

location尝试用用户请求的URI来匹配表达式,匹配则就选择location{}块来处理请求

语法: location[=|~|~*|^~|@]/uri/{...}
配置块: server

下面介绍下匹配的规则:

=:精确匹配

~:大小写敏感

~*:忽略大小写

^~:前缀匹配

@:内部请求之间的重定向

正则:如

location ~* \.(gif|jpg|jpeg)$ {
# 匹配以
.gif、
.jpg、
.jpeg结尾的请求

}

/:匹配所有请求,如

location  / {
# /可以匹配所有请求

}

2. 文件路径的定义

1)以root方式设置资源路径

语法: root path;
默认: root html;
配置块: http、server、location、if

注意:当一个请求匹配多个location时,实际请求会被第一个location处理

例:

location /download/ {
root optwebhtml;
}

在上面的配置中,如果有一个请求的URI是/download/index/test.html,那么Web服务器将会返回服务器上optwebhtml/download/index/test.html文件的内容。

2)以alias方式设置资源路径

语法: alias path;
配置块: location

例:

location conf {
    alias usr/local/nginx/conf/;
}

在上面的配置中,如果有一个请求的URI是/conf/nginx.conf,那么Web服务器将会返回服务器上usr/local/nginx/conf/nginx.conf

如果用root设置,如下表示:

location conf {
    root usr/local/nginx/;
}

alias后面还可以添加正则表达式,例如:

location ~ ^/test/(\w+)\.(\w+)$ {
alias usrlocal/nginx/$/$.$;
}

这样,请求在访问/test/nginx.conf时,Nginx会返回usr/local/nginx/conf/nginx.conf文件中的内容(其中,$1代表正则匹配的第一个参数,$2代表正则匹配的第二个参数)。

3)访问首页

语法: index file...;
默认: index index.html;
配置块: http、server、location

例如:

location  {    
root path;
index index.html htmlindex.php /index.php;
}

接收到请求后,Nginx首先会尝试访问path/index.php文件,如果可以访问,就直接返回文件内容结束请求,否则再试图返回path/htmlindex.php文件的内容,依此类推。

用HTTP核心模块配置一个静态Web服务器的更多相关文章

  1. Go语言实现简单的一个静态WEB服务器

    package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...

  2. 做的简单的一个静态web服务器,遇到个bug, 提示osError,这点一不小心就错了,特地记下来,加深记忆,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一个端口,而程序绑定不了

    代码改正之前,先执行了listen,到了bind就报错:此程序只需将listen和改到bind后面即可 from socket import *from multiprocessing import ...

  3. python网络-静态Web服务器案例(29)

    一.静态Web服务器案例代码static_web_server.py # coding:utf-8 # 导入socket模块 import socket # 导入正则表达式模块 import re # ...

  4. Harp – 内置常用预处理器的静态 Web 服务器

    Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...

  5. 深入理解Tornado——一个异步web服务器

    本人的第一次翻译,转载请注明出处:http://www.cnblogs.com/yiwenshengmei/archive/2011/06/08/understanding_tornado.html原 ...

  6. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...

  7. node 创建静态web服务器(上)

    声明:本文仅用来做学习记录. 本文将使用node创建一个简单的静态web服务器. 准备工作: 首先,准备好一个类似图片中这样的页面 第一步: 创建 http 服务: const http = requ ...

  8. 超简易静态Web服务器

    使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar

  9. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

随机推荐

  1. CDH搭建和集成spark、kafka操作

    系统:Centos7 CDH版本:5.14.0 请自己提前安装好:mysql.jdk 并下载好相关依赖(每一台机器) yum -y install chkconfig python bind-util ...

  2. sqli-labs(28)---原创原创自此一家

    0X01构造闭合 ’报错 )报错 其他不报错 那我们猜想是不是')的闭合 ?id=')=('1 返回正确 那么好像猜对了 0X02爆表名 过滤了相连接的union和select ?id= 这里过滤了相 ...

  3. Xdebug bad Zend API Version Number

    I am having trouble upgrading xdebug for MAMP. I was running version 2.2.0 and there was a known iss ...

  4. lnmp源码搭建

      Nginx工作原理 这里需要结合Apache的工作,对PHP文件处理过程的区别 1:Nginx是通过php-fpm这个服务来处理php文件        2:Apache是通过libphp5.so ...

  5. hibernate缓存机制与N+1问题

    在项目中遇到的趣事 本文基于hibernate缓存机制与N+1问题展开思考, 先介绍何为N+1问题 再hibernate中用list()获得对象: /** * 此时会发出一条sql,将30个学生全部查 ...

  6. spring +spring+ hibernate配置1

    这种配置方式是将Spring .SpringMVC.Hibernate三个模块分开配置,交叉引用!hibernate连接配置使用.properties文件 web.xml配置 <web-app ...

  7. vue树状结构(tree)

    <!DOCTYPE html> <html> <head> <title></title> <style> body { fon ...

  8. HTML5——拖放 地理定位 视频 音频 新的input类型

    拖放 ————>   设置元素为可拖放 拖动什么 放到何处 进行放置 实例[来回拖放] 地理定位 使用地理定位 处理错误和拒绝 在地图中显示结果 基于脚本的交互式地图 给定位置的信息 用户移动时 ...

  9. 科普:PV,UV,VV,IP

    1.PV PV即Page View,即页面浏览量或点击量,用户每一次对网站中的每个网页访问均被记录一次.用户对同一页面的多次访问,访问量累计. 2.UV UV即Unique Visitor,是指通过互 ...

  10. 微PE.PE工具

    1.ZC:想要 干掉Win7x64的密码(没人用的机子,不知道密码,不想重装OS) 1.1.超详细微pe工具箱使用教程 _ 微pe工具箱怎么用.html(http://www.360doc.com/c ...