nginx是比较流行的轻量级的web服务器,但在实际的应用中基本是利用其upstream模块来作为web的反向代理和负载均衡;当然nginx也可以作为mail的反向代理,这个情况比较少,主要还是web代理,谈到web基本上逃不过http\https\SSL\TCP这四个协议。
理解http\https\SSL\TCP这四个协议之间的关系有助于后期对nginx的安装、配置和优化。
一、HTTP协议
HTTP协议定义了web客户端如何从web服务器上请求web页面,以及服务如何把web页面传输给web客户端。目前http是协议发展到http 1.1 版本(RFC2616),它与旧版http 1.0版本(RFC 1945)相互兼容。
HTTP流程基本原理:
(1)HTTP请求:web浏览器先向本地的socket发送HTTP请求,socket使用TCP向web服务器请求连接,经过TCP三次握手后将请求发送到服务器的socket,服务器的socket将请求信息发送给web服务器应用。
(2)HTTP响应:web服务器接到请求后将结果信息传送到服务器本地的socket,服务器本地socket通过TCP将结果信息传送给web客户端本地的socket,最终web客户端的socket将信息传递给web浏览器。
HTTP有一个重要的特征是无状态协议,意味着每一次请求都会执行一次上述的流程,在少量请求的情况下,用户不会感知响应速度,但是一旦大量并发,有可能性能就下降加快,根据上述的流程我们可以考虑从以下四点进行优化:
(1)TCP是一个有拥塞控制机制的,在建立连接初期会以慢速传送,一旦确定网络不拥塞才会上升一个较快的速度进行传送,这个过程称之为TCP慢启动。所以考虑调整TCP相关的参数。
(2)根据情况考虑选择HTTP持久连接或者HTTP非持久连接。非持续连接每一次访问都会执行一次流程,适合少量访问的站点。持续连接是一个客户端一旦和服务器连接,后续的访问可利用这次连接可快速访问,无需再经历一次慢启动,当服务器端在一定的时间内不再接到同一客户端的访问时,断开连接;
上述的两点有个具体的例子,可以参考http://h2ofly.blog.51cto.com/6834926/1616306
(3)压缩传送的信息量。这个需要web服务器内是否设置动静态压缩;
(4)是否需要本地的缓存代理;
二、HTTPS协议
HTTPS协议简单一点就是HTTP+SSL(Secure Socket Layer),SSL协议栈如下:
HTTP |
SSL |
TCP |
IP |
https流程基本原理:
(1)客户端向服务器发起会话,协商传送加密算法;服务器向客户端发送服务器数字证书。客户端想证书颁发机构证实证书的有效性,并用查询到的服务器证书的公钥加密建立加密会话的密钥后发送过服务器;服务器接到加密的密钥后,用私钥解密得到密钥;
(2)利用(1)中得到的密钥,将每次的HTTP请求信息和请求结果进行加密传输;
三、HTTP响应码
1xx:指示信息,表示请求已接收,继续处理;
2xx:成功,表示请求已被成功接收;
3xx:重定向,表示完成请求必须进行更进一步的操作;
4xx: 客户端错误,请求有语法错误或者请求无法实现;
5xx:服务器端错误,服务器未能实现合法的请求;