尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Nginx应用与运维——Nginx Web服务应用实战(静态文件服务器的搭建)

Nginx应用与运维——Nginx Web服务应用实战(静态文件服务器的搭建) Nginx Web服务应用实战1、静态文件服务器的搭建1.1、静态Web服务器1.2、文件下载服务器1.3、伪动态SSI服务器1.3.1、配置指令1.3.2、SSI命令1.3.3、配置样例1、静态文件服务器的搭建静态文件服务器是指提供HTML文件访问或客户端可直接从中下载文件的Web服务器。对于图片、JavaScript或CSS文件等渲染页面外观的、不会动态改变内容的文件大多数网站会单独提供以静态文件服务器的方式对其进行访问实现动静分离的架构。1.1、静态Web服务器HTML是一种标记语言提供HTML文件读取是Web服务器最基本的功能Web服务器的配置样例如下server{listen8080;root /opt/nginx-web/www;# 存放静态文件的文件目录location /{index index.html;}location /js{alias/opt/nginx-web/static/js/;# 存放JavaScript文件的文件目录index index.html;}}在以上配置中每个server指令域等同于一个虚拟服务器每个location指令域等同于一个虚拟目录。1.2、文件下载服务器在对外分享文件时利用Nginx搭建一个简单的下载文件管理服务器文件分享就会变得非常方便。利用Nginx的诸多内置指令可实现自动生成下载文件列表页、限制下载带宽等功能。配置样例如下server{listen8080;server_name localhost;charset utf-8;root /opt/nginx-web/files;# 文件存放目录# 下载location /{autoindex on;# 启用自动首页功能autoindex_format html;# 首页格式为HTMLautoindex_exact_size off;# 文件大小自动换算autoindex_localtime on;# 按照服务器时间显示文件时间default_type application/octet-stream;# 将当前目录中所有文件的默认MIME类型设置为# application/octet-streamif($request_filename* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){# 当文件格式为上述格式时将头字段属性Content-Disposition的值设置为attachmentadd_header Content-Disposition:attachment;;}sendfile on;# 开启零复制文件传输功能sendfile_max_chunk 1m;# 每个sendfile调用的最大传输量为1MBtcp_nopush on;# 启用最小传输限制功能aio on;# 启用异步传输directio 5m;# 当文件大于5MB时以直接读取磁盘的方式读取文件directio_alignment4096;# 与磁盘的文件系统对齐output_buffers432k;# 文件输出的缓冲区大小为128KBlimit_rate 1m;# 限制下载速度为1MBlimit_rate_after 2m;# 当客户端下载速度达到2MB时进入限速模式max_ranges4096;# 客户端执行范围读取的最大值是4096Bsend_timeout 20s;# 客户端引发传输超时时间为20spostpone_output2048;# 当缓冲区的数据达到2048B时再向客户端发送chunked_transfer_encoding on;# 启用分块传输标识}}1.3、伪动态SSI服务器Nginx可以通过SSI命令将多个超文本文件组合成一个页面文件发送给客户端。SSI(Server Side Include)是一种基于服务端的超文本文件处理技术。由于SSI仍是通过其他动态脚本语言获取动态数据的所以此处将其归类为伪动态服务功能。SSI服务器可通过SSI命令实现诸多动态脚本语言的HTML模板功能配合其他动态脚本服务的API完全可以实现前后端分离的Web应用。1.3.1、配置指令Nginx是通过ngx_http_ssi_module模块实现SSI命令处理的SSI配置指令如表所示。上述指令均可编写在http、server、location指令域中ssi指令还可编写在if指令域中。1.3.2、SSI命令SSI命令格式如下!--# command parameter1value1 parameter2value2 ... --Nginx支持如下SSI命令。(1)block通过block命令可以定义一个超文本内容该内容可以被include命令参数stub引用。超文本内容中可以包含其他SSI命令。(2)include通过include命令可以引入一个文件或请求响应的结果数据。参数有file引入一个文件​、virtual引入一个内部请求响应数据​、stub引入一个block内容为默认数据​、wait是否等待virtual参数发起请求处理完毕再处理SSI命令​、set将virtual参数的响应内容输出到指定的变量​。SSI文件配置样例如下!--# block nameone --nbsp;!--# endblock -- # block one的内容为空!--# include filefooter.html stubone --# 引用文件footer.html的内容若footer.html文件不存在或SSI命令出错输出block one的内容!--# include virtual/remote/body.php?argumentvalue waityes stubonesetbody--# 引用内部请求的响应数据等待请求完毕再处理SSI指令若出错则输出block one的内容成功则# 把返回结果赋值给变量bodyNginx中样例配置如下location /remote/{subrequest_output_buffer_size 128k;# 子请求的输出缓冲区大小是128KB...}include不支持“…/”这样的相对路径。include参数set的响应数据大小通过指令subrequest_output_buffer_size设置。(3)config通过config命令可以设置SSI处理过程中使用的参数errmsgSSI处理出错时输出的字符串和timefmt输出时间的格式默认为“%A,%d-%b-%Y %H:%M:%S %Z”​​。!--# config errmsgoh!出错了 timefmt%A, %d-%b-%Y %H:%M:%S %Z --(4)set通过set命令设置变量。参数有var变量名和value变量值​。(5)echo通过echo命令输出变量的值。参数有encodingHTML编码方式默认为entity​、default变量不存在时定义的默认输出默认为none​。!--# set varThis_TEST valuewith a SSI test value --!--# echo varThis_TEST --(6)if通过if命令可进行条件控制且if命令支持正则判断。!--# if expr$name ! /text/ --!--# echo varname --!--# endif --!--# if expr$name /(.)(?Pdomain.)/ --!--# echo vardomain --!--# else --!--# echo var1 --!--# endif --1.3.3、配置样例根据Nginx SSI模块提供的功能可以搭建一个类似HTML框架的前端模板网站。模板目录规划如下├── _footer.html ├── _header.html ├── _head.html ├── index.html ├── _sidebar.html ├── static │ └── main.css └── table.html文件_footer.html内容如下dividfooter!--# config timefmt%Y --copy;!--# echo vardate_local --Nginx SSI sample - All Rights Reserved./div文件_header.html内容如下dividlogoimgsrchttp://nginx.org/nginx.pngstylewidth:100px;altnginx/divdividheaderulclassnav nav-pillsliclassactiveahrefindex.html首页/a/liliahreftable.html表格测试/a/liliahref#测试2/a/li/ul/div文件_head.html内容如下!DOCTYPEhtmlPUBLIC-//W3C//DTD XHTML 1.0 Transitional//ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdhtmlheadmetacontenttext/html; charsetUTF-8http-equivContent-Typelinkrelstylesheethrefhttps://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.cssscriptsrchttps://cdn.staticfile.org/jquery/2.1.1/jquery.min.js/scriptscriptsrchttps://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js/scriptlinkrelstylesheethref/static/main.css?v12/head文件index.html内容如下!--# block nameone --!--# endblock --!--# include file_head.html stubone --bodydiv!--# include file_header.html stubone --!--# include file_sidebar.html stubone --/divdividsectionh1Hello World/h1/div!--# include file_footer.html stubone --/body/html文件_sidebar.html内容如下dividsidebarulclassnav navbar-navliclassactiveahrefhttp://www.baidu.comtargetblank百度/a/liliclassactiveahref#测试/a/li/ul/div首页页面效果如图所示。文件table.html内容如下!--# block nameone --!--# endblock --!--# include file_head.html stubone --bodydiv!--# include file_header.html stubone --!--# include file_sidebar.html stubone --/divdividsectiontableclasstablecaption表格示例/captiontheadtrth省份/thth省会/th/tr/theadtbodytrtd上海/tdtd上海/td/trtrtd广东/tdtd广州/td/tr/tbody/table/div!--# include file_footer.html stubone --/body/html表格页页面效果如图所示。Nginx配置内容如下server{listen8081;server_name localhost;charset utf-8;root /opt/nginx-web/nginx-ssi;sendfile on;ssi on;# 启用SSI命令解析支持ssi_min_file_chunk 1k;# 存储在磁盘上的响应数据的最小值为1KBssi_value_length1024;# SSI中变量值的最大长度为1024字节ssi_silent_errors off;# 输出errmsg的内容location /{index index.html;}}
返回列表