(概念摘自网络)
一.什么是SSI
SSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均支持SSI命令。
它的工作原因是:在页面内容发送到客户端之前,使用SSI指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用SSI是一种简便的方法,将内容存入一个包含文件中即可,不必将其输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。
二.如何在nginx上配置SSI
需要的选项主要是以下三个:
ssi: 默认值off,启用ssi时将其设为on
ssi_silent_errors: 默认值off,开启后在处理SSI文件出错时不输出错误提示"[an error occurred while processing the directive]"。
ssi_types: 默认是text/html,所以如果需支持html,则不需要设置这句,如果需要支持shtml则需要设置:ssi_types text/shtml
三个参数可以放在http, server或location作用域下。
三. 实例
server {
listen 10.3.9.27:80;
server_name www.ball.com;
location / {
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
index index.shtml;
root /usr/local/web/wwwroot;
expires 30d;
access_log /data/logs/www.ball.com-access_log main;
}
}
四:结合实际问题
生产环境遇到404 requested resources is not available。如图:
查找对应实际的服务器日志,搜索不到对应时间的404错误,查看nginx配置,定位不到问题原因。
用微信开发者工具调试过开发环境和测试环境,都无法重现,经大神查看后定位到问题原因:
由于页面中使用ssi命令引入了一个文件,而该文件并不存在,所以报404错误。至于本地和开发环境能启动成功,是因为开发环境和测试环境并没有使用nginx。
后来,我在本地启动nginx配置中添加
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
重启nginx,果然404,删除上述注释掉的代码,就OK了。