SSL证书卸载与SSI高级应用

2016-07-12 10:26:01来源:oschina作者:neo-chen人点击

SSL证书卸载与SSI高级应用



http://netkiller.github.io/journal/ssi.html

Mr. Neo Chen (陈景峰), netkiller, BG7NYT

中国广东省深圳市龙华新区民治街道溪山美地 518131 +8613113668890 +8675529812080



版权 © 2014 http://netkiller.github.io



版权声明


转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。




文档出处: http://netkiller.github.io http://netkiller.sourceforge.net





微信扫描二维码进入 Netkiller 微信订阅号

QQ群:128659835 请注明“读者”



2014-09-17



摘要

我的系列文档

Netkiller Architect 手札
Netkiller Developer 手札
Netkiller PHP 手札
Netkiller Python 手札
Netkiller Testing 手札 Netkiller Cryptography 手札
Netkiller Linux 手札
Netkiller Debian 手札
Netkiller CentOS 手札
Netkiller FreeBSD 手札 Netkiller Shell 手札
Netkiller Security 手札
Netkiller Web 手札
Netkiller Monitoring 手札
Netkiller Storage 手札 Netkiller Mail 手札
Netkiller Docbook 手札
Netkiller Project 手札
Netkiller Database 手札
Netkiller PostgreSQL 手札 Netkiller MySQL 手札
Netkiller NoSQL 手札
Netkiller LDAP 手札
Netkiller Network 手札
Netkiller Cisco IOS 手札 Netkiller H3C 手札
Netkiller Multimedia 手札
Netkiller Perl 手札
Netkiller Amateur Radio 手札
Netkiller DevOps 手札

您可以使用iBook阅读当前文档

目录1. 什么是SSI(Server Side Include)
2. 为什么使用SSI
3. 谁来负责SSI制作
4. 怎么处理SSI包含4.1. SSI 目录规划
4.2. www.example.com 静态内容服务器
4.3. acc.example.com 动态网页服务器
4.4. SSL卸载服务器
4.5. /www/inc.example.com 公共包含文件
4.6. 引用包含文件实例



1.什么是SSI(Server Side Include)

SSI是服务器端页面包含,SSI工作在web服务器上,web服务器可以在一个页面中包含另一个页面,在用户端看来是只有一个页面。




2.为什么使用SSI

我们又很多个子站,所有网站的header与footer都相同,还有一些block区块也存在共用。所以我们将这个共用的部分拆分,然后使用SSI按需包含。




3.谁来负责SSI制作

稍有经验的美工人员都可以灵活使用SSI,程序员也可在短时间内学会SSI.




4.怎么处理SSI包含



4.1.SSI 目录规划

/www/example.com
|-- inc.example.com
|-- www.example.com
|-- images.example.com
|-- acc.example.com

inc.example.com 是SSI共用文件,存放shtml文件。


www.example.com 是主站,会用到inc.example.com中的公共模块。


acc.example.com 与 www.example.com 类似。


注意

/www/inc.example.com是公共目录,不需要配置nginx,不能通过浏览器访问到该目录.


为什么要独立公共文件,而不是放在/www/www.example.com目录下面呢?我是为了方便发布代码,分开的好处是我可以针对inc.example.com做发布,而不影响其他项目。

由于include作用于web服务器的$document_root目录,例如当前$document_root是/www/example.com/www.example.com


404 Not Found

404 Not Found


nginx-upupw/1.6.3
会引用 /www/example.com/www.example.com/example.shtml 文件,而不是操作系统根目录。

所以我们无法引用与www.example.com同级别的inc.example.com公共文件。例如:


404 Not Found

404 Not Found


nginx-upupw/1.6.3
会引用 /www/example.com/www.example.com/www/example.com/inc.example.com/example.shtml 文件,而不是操作系统根目录。
会引用 也无法正常工作。

这是服务器限制,如果SSI可能包含$document_root之外的文件,将会带来安全问题,例如


404 Not Found

404 Not Found


nginx-upupw/1.6.3

怎样能突破限制呢?我想出了别名,通过别名/include引用/www/example.com/inc.example.com目录中的公文模块,例如:


location /include/ {
root /www/example.com/inc.example.com;
}
提示

Apache 与 Nginx 服务器的 SSI 实现稍有不同include file与include virtual也有差异。



4.2.www.example.com 静态内容服务器

# cat /etc/nginx/conf.d/www.example.com.conf
server {
listen80;
server_namewww.example.com;
charset utf-8;
access_log/var/log/nginx/www.example.com.access.log;
error_log /var/log/nginx/www.example.com.error.log;
location / {
root /www/example.com/www.example.com;
indexindex.html;
}
location /include/ {
root /www/example.com/inc.example.com;
}
location /info/ {
proxy_pass http://info.example.com/;
}error_page 500 502 503 504/50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}


4.3.acc.example.com 动态网页服务器

server {
listen80;
server_nameacc.example.com;
charset utf-8;
access_log/var/log/nginx/acc.example.com.access.log;
error_log /var/log/nginx/acc.example.com.error.log;
set $X_FORWARDED_FOR $http_x_forwarded_for;
location / {
root /www/example.com/acc.example.com/htdocs;
indexindex.php;
try_files $uri $uri/ /index.php?/$request_uri;
}
location /include/ {
root /www/example.com/inc.example.com;
}
location ^~ /images/ {
rewrite /images/(.+)$ /$1 break;
proxy_pass http://images.example.com;
break;
}
location ~ /.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME/www/example.com/acc.example.com/htdocs/$fastcgi_script_name;
include fastcgi_params;
fastcgi_paramDOCUMENT_ROOT /www/example.com/acc.example.com/htdocs;
}
}
注意

该服务器不对外提供服务器,只允许下面的SSL卸载服务器通过反向代理连接



4.4.SSL卸载服务器

将SSL证书处理,机密与解密操作转移到该服务器,不让业务服务器处理证书的加密与解密操作,上面的HTTP对内访问,HTTPS对外访问,HTTPS通过反向代理连接HTTP服务器实现SSL证书卸载


upstream acc.example.com {
server acc1.example.com;
server acc2.example.com;
server acc3.example.com;
}
server {
listen443;
server_nameacc.example.com;
sslon;
ssl_certificate/etc/nginx/example.com/acc.example.com.pem;
ssl_certificate_key/etc/nginx/example.com/acc.example.com.key;
ssl_session_timeout5m;
ssl_protocolsSSLv2 SSLv3 TLSv1;
ssl_ciphersHIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://acc.example.com;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
break;
}
}


4.5./www/inc.example.com 公共包含文件

/www/inc.example.com/include/cn/config.html














${X_FORWARDED_FOR} 用来判断用户是通过http还是https进入,由于images.example.com 没有SSL证书,需要有区分的载入图片的地址。/images 通过反向代理连接http://images.exampe.com.




4.6.引用包含文件实例

404 Not Found

404 Not Found


nginx-upupw/1.6.3











404 Not Found

404 Not Found


nginx-upupw/1.6.3


注册账户





最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台