SSI (服务器端包含,Server Side Includes) 插件¶
服务器端包含是一种编写动态web页面的“老式”方法。
通常把它当成一个模板系统,而不是一个全功能语言。
uWSGI SSI插件的主要目的是拥有一个可以访问uWSGI API的快速的模板系统。
在写这篇文章的时候,即2013年3月,这个插件还处于测试版本,实现了少于30%的SSI标准,关注点在于把uWSGI API当成SSI命令公开。
把它当成一个请求处理器使用¶
这个插件有一个官方的modifier1,数字19。
[uwsgi]
plugin = ssi
http = :9090
http-modifier1 = 19
http-var = DOCUMENT_ROOT=/var/www
该插件把文件名作为 DOCUMENT_ROOT``+``PATH_INFO
构建。然后,将这个文件作为服务器端包含文档解析。
DOCUMENT_ROOT
和PATH_INFO
都是必须的,否则将会返回一个500错误。
Nginx的一个样例配置如下:
location ~ \.shtml$ {
root /var/www;
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
uwsgi_modifier1 19;
}
而对于uWSGI大概像这样……
[uwsgi]
plugin = ssi
socket = 127.0.0.1:3031
把SSI作为一个路由动作使用¶
更通用的方式是把SSI解析器作为一个路由动作使用。
[uwsgi]
plugin = ssi
http-socket = :9090
route = ^/(.*) ssi:/var/www/$1.shtml
警告
对于所有的路由动作,文件路径上并没有运行更高层次自定义的检查。如果你传递不信任路径给SSI动作,那么你应该清理它们 (你可以再次使用路由,检查..的存在,或者其他危险符号)。
并且考虑到上述告诫,当作为路由动作使用时, DOCUMENT_ROOT
或者 PATH_INFO
并不是必须的,因为传递的参数包含了完整的文件系统路径。
状态¶
- 这个插件是完全线程安全的,并且非常快。
- 非常少的命令可用,不久会添加更多命令。