存档

‘架构’ 分类的存档

使用HSTS协议强制浏览器使用HTTPS协议访问网站

2017年7月13日 没有评论

大家都知道网站启用SSL数字证书后使用HTTPS协议可以保证服务器与浏览器端数据加密,但与此同时不可避免另外一个问题,总存在部分用户会直接输入域名的方式访问网站,默认浏览器是使用HTTP协议访问网站的,此时即便网站启用了SSL数字证书,此时用户与服务器端的数据交互仍然使用的是明文传输方式,用户数据得不到保护,因为SSL数字证书没有生效。

可能你会说那不如直接关闭80端口吧(好吧,如果你是API等后台服务大可不必考虑前台用户访问的问题)或HTTP访问的时候直接跳转到HTTPS协议吧(直接跳转其实也存在『中间人』攻击风险),其实这个问题有更好的方案,这就是下面要介绍的

HSTS(HTTP Strict Transport Security),它是一个Web安全策略机制(web security policy mechanism),它通过服务器为HTTP响应增加如下一个Header 来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险:

Strict-Transport-Security:max-age=63072000; includeSubdomains; preload

只要在服务器返回给浏览器的响应头中,增加 Strict-Transport-Security这个HTTP Header 浏览器都将直接强制性的发起HTTPS请求,现在访问机制如下

HSTS_1

阅读全文…

分类: 其他, 架构 标签: , ,

免费好用的SSL域名签名,Let’s Encrypt使用攻略

2016年12月20日 没有评论

Let’s Encrypt是由 ISRG(Internet Security Research Group,互联网安全研究小组)发起,由Mozilla、Cisco、Akamai、Electronic Frontier Foundation 和 Chrome 等众多公司和机构支持的免费、自动化、开放的证书签发服务。

Let’s Encrypt 与 IdenTrust 的 DST Root CA 做了交叉认证,兼容性还是非常不错的,目前能做到主流系统包括XP系统也能得到很好的支撑,同时安全性上面Let’s Encrypt支持ECC 证书(目测采用的是ECDHE 密钥交换、RSA 签名方式)

Let’s Encrypt目前完全免费,支持3个月证书有效期,到期可自动续签,关于有效期这个应该是一个就安全性考量的策略,好在自动化做的非常不错,再加上各种自动化的申请、过期续签方案,已经做到很方便了。

Let’s Encrypt 的证书签发过程使用的是 ACME (Automated Certificate Management Environment)协议,目前官方和第三方工具都是基于此协议,官方推荐工具列表在这里

这里推荐 acme.sh 实测系统兼容性非常好,对其他库的依赖和版本依赖相对较小,CentOS 5.8系统 python 2.4.3 完美实现,这里简单讲一下acme.sh的安装和使用吧,官方有中文教程 在这里 阅读全文…

Docker学习笔记:常用命令

2016年8月6日 没有评论

Usage: docker search [OPTIONS] TERM
$docker search -s 3 centos
搜索命令,参数 -s 指定镜像评价星级

Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
$docker pull centos:centos6.8
从默认镜像源下载镜像,docker pull NAME[:TAG],其中NAME是镜像仓库名称(用来区分镜像),TAG是镜像标签(往往用来表示版本),不指定TAG则拉取 latest 标签镜像,镜像仓库名称前面可以添加仓库地址从指定仓库下载

Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
$docker images
查看本地镜像列表

Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
$docker tag 0cd centos:ali
注意源镜像使用ID作为参数,目的镜像如果不传参数TAG的话则标签设置为默认值latest

Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID…]
获取镜像详细信息

Usage: docker rmi [OPTIONS] IMAGE [IMAGE…]
删除一个或多个镜像,其中镜像需要指定明确,如果只指定镜像不指定标签则默认删除 latest标签镜像,可以使镜像ID,镜像只有在所有标签都被删除的时候才会被删除,镜像存在容器的时候也不能被删除

Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
$docker create -it –name=”create_2″ centos:centos6.8
创建容器,不马上启动

Usage: docker start [OPTIONS] CONTAINER [CONTAINER…]
docker start -it 3ca

启动容器

Usage: docker stop [OPTIONS] CONTAINER [CONTAINER…]
关停一个容器

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
$docker run -it –name=”run_test” centos:centos6.8 /bin/bash
创建并启动容器

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
$docker exec -it 1aab /bin/bash
进入一个在后台运行的容器

分类: 架构 标签:

DIY免费静态资源托管服务,支持负载均衡容灾

2013年7月27日 没有评论

前段时间国内Git托管服务GitCafe推出了定制域名绑定,试用了一下速度和稳定性确实不错,ping响应速度稳定在30ms左右.而下载速度也相当给力,在VPS上实验结果能达到1.19M/s!在同样环境下GitHub相对来讲要逊色一点,毕竟中间隔了道“墙”,在天朝的环境下你懂的。不过表现也还可以,ping 回复在保持在200ms左右,下载速度在也能稳定在100k/s.

之前一直有打算弄个独立的静态资源服务,一直苦于没有资源,单独用GitHub担心被墙风险较高,这次刚好GitCafe推出类似服务,配合DNSPod负载均衡既可方便实现故障切换,又可满足境内外访问速度需要(最后一条有点装逼,大家可以忽略,哈哈),一具两得,有兴趣的同学可以一起试试,希望GitHub不要再被墙了,GitCafe挺住! 阅读全文…

Web安全威胁与防范工作总结

2012年9月16日 没有评论

WEB开发中由于项目规模和需求的规范性,安全问题可能并不是所有的时候都能引起足够的关注,大多数时候技术人员根据经验和习惯作一些处理,一些相对比较严格和苛刻的问题,往往都是出现问题以后才临时解决。小规模应用出现状况的情况比较少,而且处理起来也可以比较迅速,但是应用达到一定规模以后,如果前期没有做好足够的工课,后期补漏洞的代价就比较高了。所以在条件允许的情况下,把安全问题放在首要位置,或许是一个比较明智的选择。下面是本人总结的几点WEB安全相关知识,备以常参。希望对大家熟悉WEB攻击原理与处理,提高高质量代码产出率和娴熟应对安全威胁有所帮助, 阅读全文…

分类: PHP, 架构 标签: , , , ,

Apache并发控制参数监控与MPM配置调优

2012年3月17日 没有评论

在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM(Multi -Processing Modules,多道处理模块)运行在一种多进程与多线程相混合的模式下,增强部分配置的可扩充性能。

毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模块化设计有两个重要好处:

  • Apache可以更简洁、有效地支持多种操作系统;
  • 服务器可以按站点的特殊需要进行自定制。

在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中 阅读全文…

分类: Linux, 架构 标签: ,

常见缓存算法和缓存策略

2012年3月11日 没有评论

缓存算法:缓存法通过设计良好的数据分块、预取、顺序预取、缓存替换等算法来提高对缓存内容的命中率。缓存算法可以分为基于访问时间的策略、基于访问频率的策略、访问时间与频率兼顾策略、时间距离分布策略等类型。

缓存策略:缓存策略主要三方面:

  • 缓存什么内容
  • 何时进行缓存
  • 当缓存空间已满时如何进行替换,即缓存替换算法。 阅读全文…
分类: 架构 标签: ,

软件级负载均衡器(LVS/HAProxy/Nginx)的特点和对比

2011年12月14日 没有评论

现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、Nginx的基于Linux开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。

近期朋友的项目成功上线了,PV达到了亿级/日的访问量,最前端用的是HAProxy+Keepalived双机作的负载均衡器/反向代理,整个网站非常稳定;这让我更坚定了以前跟老男孩前辈聊的关于网站架构比较合理设计的架构方案:即Nginx/HAProxy+Keepalived作Web最前端的负载均衡器,后端的MySQL数据库架构采用一主多从,读写分离的方式,采用LVS+Keepalived的方式。

在这里我也有一点要跟大家申明下:很多朋友担心软件级别的负载均衡在高并发流量冲击下的稳定情况,事实是我们通过成功上线的许多网站发现,它们的稳定性也是非常好的,宕机的可能性微乎其微,所以我现在做的项目,基本上没考虑服务级别的高可用了。相信大家对这些软件级别的负载均衡软件都已经有了很深的的认识,下面我就它们的特点和适用场合分别说明下。

LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我们提供如此强大实用的开源软件。

LVS的特点是:

  1. 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;
  2. 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
  3. 工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;
  4. 无流量,保证了均衡器IO的性能不会收到大流量的影响;
  5. 应用范围比较广,可以对所有应用做负载均衡;
  6. 软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
  7. 如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx的特点是:

  1. 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;
  2. Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
  3. Nginx安装和配置比较简单,测试起来比较方便;
  4. 也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
  5. Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
  6. Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;
  7. Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。
  8. Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。

HAProxy的特点是:

  1. HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
  2. 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
  3. 支持url检测后端的服务器出问题的检测会有很好的帮助。
  4. 它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  5. HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
  6. HAProxy的算法现在也越来越多了,具体有如下8种:
    ① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
    ② static-rr,表示根据权重,建议关注;
    ③ leastconn,表示最少连接者先处理,建议关注;
    ④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
    ⑤ ri,表示根据请求的URI;
    ⑥ rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
    ⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
    ⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。 
原文:http://www.linuxde.net/2011/12/3867.html

分类: 架构 标签:

Varnishhist 中文man page

2011年11月9日 没有评论

Author:    Dag-Erling Sm?rgrav

Date:        2010-05-31

Version:   1.0

Manual section:       1

Varnish request histogram(varnish请求柱状图)

 

SYNOPSIS

varnishhist [-b] [-C] [-c] [-d] [-I regex] [-i tag] [-n varnish_name] [-r file] [-V] [-w delay][-X regex] [-x tag]

DESCRIPTION

Varnishhist工具读取varnishd(1)的共享内存日志,生成一个连续不断更新的柱状图显示最后N个请求的分布。N的值取决于左上角垂直刻度的高度。水平标尺是对数。如果命中,则使用“|”表示,如果没有命中,使用“#”表示。

下面的选项是可用的:

                  -b               分析指定后端服务器的日志,如果没有使用-b和-c参数,varnish就充当他们。

                   -C               忽略正则表达式的大小写。

                   -c               分析指定客户端的日志。

                   -d               在启动过程中处理旧的日志,一般情况下,varnishhist只会在进程写入日           志后启动。

                   -I       regex        匹配正则表达式的日志,如果没有使用-i或者-I,那么所有的日志都                      会匹配。

                   -i       tag            匹配指定的tag,如果没有使用-i或者-I,那么所有的日志都会被匹配。

                   -n               指定varnish实例的名字,用来获取日志,如果没有指定,默认使用主机 名。

                   -r      file    读入日志文件,代替共享内存。

                   -V               显示版本号,然后退出。

                   -w     delay         等待更新的延迟时间,默认是1秒。

                   -X      regex        导入匹配表达式的日志。

                   -x      tag            导入匹配tag的日志。

SEE ALSO

    * varnishd(1)

    * varnishlog(1)

    * varnishncsa(1)

    * varnishstat(1)

    * varnishtop(1)

HISTORY

The varnishhist utility was developed by Poul-Henning Kamp in cooperation with  Verdens Gang AS and Linpro AS. This manual page was written by Dag-Erling Sm?rgrav.

COPYRIGHT

这个文档的版权和varnish自身的版权一样,请看LICENCE。

    * Copyright (c) 2006 Verdens Gang AS

    * Copyright (c) 2006-2008 Linpro AS

    * Copyright (c) 2008-2010 Redpill Linpro AS

    * Copyright (c) 2010 Varnish Software AS

 

引用:http://linuxguest.blog.51cto.com/195664/369338

分类: 架构 标签:

Varnishlog 中文man page

2011年11月9日 没有评论

Author:    Dag-Erling Sm?rgrav
Author:    Per Buer
Date:        2010-05-31
Version:   0.2
Manual section:       1
Display varnish logs
 
SYNOPSIS
varnishlog [-a] [-b] [-C] [-c] [-D] [-d] [-I regex] [-i tag] [-k keep] [-n varnish_name] [-o] [-P     file] [-r file] [-s num] [-u] [-V] [-w file] [-X regex] [-x tag] [tag regex]
DESCRIPTION
         varnishlog工具读取和显示共享内存的日志。
         下面的选项是可用的:
                   -a               当把日志写到文件里时,使用附加,而不是覆盖。
                   -b               只显示varnishd和后端服务器的日志。
                   -C               匹配正则表达式的时候,忽略大小写差异。
                   -c               只显示varnishd和客户端的日志。
                   -D              以进程方式运行
                   -d               在启动过程中处理旧的日志,一般情况下,varnishhist只会在进程写入日 志后启动。
                   -I       regex        匹配正则表达式的日志,如果没有使用-i或者-I,那么所有的日志都会匹配。
                   -i       tag            匹配指定的tag,如果没有使用-i或者-I,那么所有的日志都会被匹配。
                   -k      num          只显示开始的num个日志记录。
                   -n               指定varnish实例的名字,用来获取日志,如果没有指定,默认使用主机名。
                   -o               以请求ID给日志分组,这个功能没多大用。如果要写到一个文件里使用  -w选项。
                   -P      file    记录PID号的文件
                   -r      file    从一个文件读取日志,而不是从共享内存读取。
                   -s               sum 跳过开始的num条日志。
                   -u               无缓冲的输出。
                   -V               显示版本,然后退出。
                   -w     file    把日志写到一个文件里代替显示他们,如果不是用-a参数就会发生覆盖,如果varnishlog在写日志时,接收到一个SIGHUP信号,他会创建一个新的文件,老的文件可以移走。
                   -X      regex        排除匹配正则表达式的日志。
                   -x      tag            排除匹配tag的日志。
                   如果-o选项被指定,需要使用正则表达式和tag来制定需要的日志。
TAGS
下面的日志tag是正确定义的:
    * Backend
    * BackendClose
    * BackendOpen
    * BackendReuse
    * BackendXID
    * CLI
    * ClientAddr
    * Debug
    * Error
    * ExpBan
    * ExpKill
    * ExpPick
    * Hit
    * HitPass
    * HttpError
    * HttpGarbage
    * Length
    * ObjHeader
    * ObjLostHeader
    * ObjProtocol
    * ObjRequest
    * ObjResponse
    * ObjStatus
    * ObjURL
    * ReqEnd
    * ReqStart
    * RxHeader
    * RxLostHeader
    * RxProtocol
    * RxRequest
    * RxResponse
    * RxStatus
    * RxURL
    * SessionClose
    * SessionOpen
    * StatAddr
    * StatSess
    * TTL
    * TxHeader
    * TxLostHeader
    * TxProtocol
    * TxRequest
    * TxResponse
    * TxStatus
    * TxURL
    * VCL_acl
    * VCL_call
    * VCL_return
    * VCL_trace
    * WorkThread
EXAMPLES
 下面的命令简单的打印日志到一个文件:
                   $ varnishlog -w /var/log/varnish.log
 下面这条命令读取一个日志文件,然是请求的首页:
                   $ varnishlog -r /var/log/varnish.log -c -o RxURL ‘^/$’
SEE  ALSO
    * varnishd(1)
    * varnishhist(1)
    * varnishncsa(1)
    * varnishstat(1)
    * varnishtop(1)
HISTORY
The varnishlog utility was developed by Poul-Henning Kamp ?phk@phk.freebsd.dk? in       cooperation with Verdens Gang AS, Linpro AS and Varnish Software. This manual page was         initially written by Dag-Erling Sm?rgrav.
COPYRIGHT
这个文档的版权和varnish自身的版权一样,请看LICENCE。
    * Copyright (c) 2006 Verdens Gang AS
    * Copyright (c) 2006-2008 Linpro AS
    * Copyright (c) 2008-2010 Redpill Linpro AS
    * Copyright (c) 2010 Varnish Software AS
原文:http://linuxguest.blog.51cto.com/195664/369339

分类: 架构 标签: