nginx的upstream容错机制是怎么样的?
nginx默认判断失败节点状态以error错误和timeout超时状态为准,而不是以错 误状态码来判断,因为毕竟有状态码返回,证明这个节点还是可以正常连接的。 我们可以添加proxy_next_upstream指令设置对错误状态码的请求转到其他后 台处理,这样才会将这些状态码的请求视为失败节点状态。 如果所有的后台节点返回的都是错误状态码,那么就会返回给用户错误信息。 对单个后台节点来说,每返回一次错误状态码就会使这个节点的fails加一,当 fails的值达到maxfails后,nginx就会将该节点置于down失效的状态,在接下来的 failtimeout时间内不会再访问该节点,只有在这个时间过去后或者其他所有后台节点 都失效了才会再次探测这个节点。 如果重新探测所有的节点还是失效,就会返回502网关错误,下次访问还会重复 之前的步骤。
静态服务器的防盗链是怎么做的?
我们之前用的是nginx静态服务器,nginx的防盗链是基于一个http_referes模块 实现的。使用location匹配所有的图片,可以是jpg、png结尾的匹配,也可以是对 一个目录的匹配,然后在下面加入一条valid_referes 代表白名单,只有写在后面的ip 或主机才能访问到图片,其他的访问都将其重写到403forbidden去,防盗链就设置 完毕了。
当然,nginx有很多第三方模块,我们也可以使用第三方模块达到防盗的作 用,我知道的一种就是ngx_http_accesskey模块,它可以通过md5加密来实现防盗 链,但是需要程序的配合。
nginx和apache有什么优缺点,apache有几种工作模式,每个工作模式的优缺 点。
1 nginx是一个轻量级服务,它比apache占用的内存等资源更少,它的抗并发能力 比apache更强,因为它是异步非阻塞的,而apache是阻塞型的,
2 nginx还可以用来做反向代理和负载均衡,但是apache拥有的模块更多,功能更全面,apache还能支 持动态页面,它的性能更稳定,而nginx相对bug较多。
3 apache在Linux上有三种工作模式,分别是prework、worker和event。 prefork是一个非线程型的、预派生的MPM(多进程处理模块),使用多个进 程,每个进程在某个确定的时间只单独处理一个连接,效率高,也很安全,一个请求 出现问题也不会影响到别的请求,但内存使用比较大,无法支持高并发请求。 worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些 子进程,然后每个子进程创建一些线程,每个请求过来会被分配到一个线程来服务。 它的内存使用相对减少,在高并发请求下表现也会更好。但是如果一个线程出现问题 会导致同一个进程下的所有线程出现问题,而且在使用keepalive长连接的时候,某 个线程会被一直占用,即使中间没有请求,也要等到超时才能释放,白白浪费资源。 event模式是apache最新的工作模式,它和worker模式相似,只是在event工作 模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过 来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放,增强了在高并发的场景下处理请求。