weixueyuan-Nginx Web服务4
https://www.weixueyuan.net/nginx/web/
Nginx静态资源服务器搭建
HTML 是一种标记语言,提供 HTML 文件读取是静态服务器最基本的功能,静态服务器的配置样例如下:server {
listen 8080;
root /opt/nginx-web/www; # 存放静态文件的文件目录
location / {
index index.html;
}
location /js {
alias /opt/nginx-web/static/js/; # 存放JavaScript文件的文件目录
index index.html;
}
}
在以上配置中,每个 server 指令域等同于一个虚拟服务器,每个 location 指令域等同于一个虚拟目录。
Nginx文件下载服务器搭建
在对外分享文件时,利用 Nginx 搭建一个简单的下载文件管理服务器,文件分享就会变得非常方便。利用 Nginx 的诸多内置指令可实现自动生成下载文件列表页、限制下载带宽等功能。配置样例如下:server {
listen 8080;
server_name localhost;
charset utf-8;
root /opt/nginx-web/files; # 文件存放目录
# 下载
location / {
autoindex on; # 启用自动首页功能
autoindex_format html; # 首页格式为HTML
autoindex_exact_size off; # 文件大小自动换算
autoindex_localtime on; # 按照服务器时间显示文件时间
default_type application/octet-stream;# 将当前目录中所有文件的默认MIME类型设置为
# application/octet-stream
if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
# 当文件格式为上述格式时,将头字段属性Content-Disposition的值设置为"attachment"
add_header Content-Disposition: 'attachment;';
}
sendfile on; # 开启零复制文件传输功能
sendfile_max_chunk 1m; # 每个sendfile调用的最大传输量为1MB
tcp_nopush on; # 启用最小传输限制功能
aio on; # 启用异步传输
directio 5m; # 当文件大于5MB时以直接读取磁盘的方式读取文件
directio_alignment 4096; # 与磁盘的文件系统对齐
output_buffers 4 32k; # 文件输出的缓冲区大小为128KB
limit_rate 1m; # 限制下载速度为1MB
limit_rate_after 2m; # 当客户端下载速度达到2MB时进入限速模式
max_ranges 4096; # 客户端执行范围读取的最大值是4096B
send_timeout 20s; # 客户端引发传输超时时间为20s
postpone_output 2048; # 当缓冲区的数据达到2048B时再向客户端发送
chunked_transfer_encoding on; # 启用分块传输标识
}
}
Nginx伪动态SSI服务器
Nginx 可以通过 SSI 命令将多个超文本文件组合成一个页面文件发送给客户端。SSI(Server Side Include)是一种基于服务端的超文本文件处理技术。由于 SSI 仍是通过其他动态脚本语言获取动态数据的,所以此处将其归类为伪动态服务功能。SSI 服务器可通过 SSI 命令实现诸多动态脚本语言的 HTML 模板功能,配合其他动态脚本服务的 API,完全可以实现前后端分离的 Web 应用。
1、配置指令
Nginx 是通过 ngx_http_ssi_module 模块实现 SSI 命令处理的,SSI 配置指令如下表所示。| 指令名称 | 指令值格式 | 默认值 | 指令说明 |
|---|---|---|---|
| ssi | on 或 off | off | 启用 SSI 命令功能 |
| ssi_last_modified | on 或 off | off | 允许保留原始响应头中的属性字段 Last-Modified,默认配置下该字段会被移除 |
| ssi_min_file_chunk | size | 1k | 设置存储在磁盘上的响应数据的最小值,超过该值的文件使用 sendfile 功能发送 |
| ssi_silent_errors | on 或 off | off | 当指令值为 on 时,SSI 处理出现错误后不输出 errmsg 的内容 |
| ssi_types | mime-type... | text/html | 设置 SSI 处理的 MIME 类型 |
| ssi_value_length | length | 256 | SSI 中变量值的最大长度 |
上述指令均可编写在 http、server、location 指令域中,ssi 指令还可编写在 if 指令域中。
2、SSI 命令
SSI 命令格式如下:Nginx 支持如下 SSI 命令。
1) block
通过 block 命令可以定义一个超文本内容,该内容可以被 include 命令参数 stub 引用。超文本内容中可以包含其他 SSI 命令。2) include
通过 include 命令可以引入一个文件或请求响应的结果数据。参数有 file(引入一个文件)、virtual(引入一个内部请求响应数据)、stub(引入一个 block 内容为默认数据)、wait(是否等待 virtual 参数发起请求处理完毕再处理 SSI 命令)、set(将 virtual 参数的响应内容输出到指定的变量)。SSI 文件配置样例如下:
# block one的内容为空
# 引用文件footer.html的内容,若footer.html文件不存在或SSI命令出错,输出block one的内容
# 引用内部请求的响应数据,等待请求完毕再处理SSI指令,若出错则输出block one的内容,成功则
# 把返回结果赋值给变量body
location /remote/ {
subrequest_output_buffer_size 128k; # 子请求的输出缓冲区大小是128KB
...
}
3) config
通过 config 命令可以设置 SSI 处理过程中使用的参数 errmsg(SSI 处理出错时输出的字符串)和 timefmt(输出时间的格式,默认为“%A,%d-%b-%Y %H:%M:%S %Z”)。4) set
通过 set 命令设置变量。参数有 var(变量名)和 value(变量值)。5) echo
通过 echo 命令输出变量的值。参数有 encoding(HTML 编码方式,默认为 entity)、default(变量不存在时定义的默认输出,默认为 none)。6) if
通过 if 命令可进行条件控制,且 if 命令支持正则判断。
3、配置样例
根据 Nginx SSI 模块提供的功能可以搭建一个类似 HTML 框架的前端模板网站。模板目录规划如下:├── _footer.html
├── _header.html
├── _head.html
├── index.html
├── _sidebar.html
├── static
│ └── main.css
└── table.html
- id="footer">
- © Nginx
- SSI sample - All Rights Reserved.
- id="logo">
src="http://nginx.org/nginx.png" style="width: 100px;" alt="nginx">
- id="header">
- class="nav nav-pills">
- class="active">href="index.html">首页
- href="table.html">表格测试
- href="#">测试2
- html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- content="text/html; charset=UTF-8" http-equiv="Content-Type">
- rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
- rel="stylesheet" href="/static/main.css?v=12">
-
- id="section">
Hello World
- id="sidebar">
- class="nav navbar-nav">
- class="active">href="http://www.baidu.com" target="blank">百度
- class="active">href="#">测试

图:SSI框架首页
文件 table.html 内容如下:
-
- id="section">
class="table">
表格示例 省份 省会 上海 上海 广东 广州