一、什么是反向代理服务器?
在服务器端接收客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。
Nginx就是其中的一种反向代理服务器软件。
二、什么是Nginx?
Nginx是俄罗斯人塞索耶夫编写的一款高性能的HTTP反向代理服务器。也是一个IMAP/POP3/SMTP代理服务器,也就是说,Nginx本身就可以托管网站,进行HTTP服务处理。
三、Nginx和传统Tomcat服务器的区别是什么?
四、Nginx有什么特点?
- 跨平台:Nginx可以在大多数操作系统中运行,而且也有Windows的移植版本
- 配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置
- 非阻塞、高并发:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数(这得益于Nginx使用了最新的epoll模型)
- 事件驱动:通信机制采用epoll模式,支持更大的并发连接数
- 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)
- 成本低廉:Nginx作为开源软件,可以免费试用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
- 内置健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。
- 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。
- 稳定性高:用于反向代理,宕机的概率微乎其微。
五、Nginx不为人知的特点
- Nginx代理和后端web服务器间无需长链接;
- 接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送给后端web服务器,极大的减轻后端web服务器的压力;
- 发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的;
- 网络依赖性低。Nginx对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量;
- 支持服务器检测。Nginx能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其他节点上。
六、Nginx是如何处理一个请求的?
首先,Nginx在启动时,会解析配置文件,得到需要监听的端口号与IP地址,然后再Nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的IP地址和端口号,再listen),然后再fork(一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程)出多个子进程出来,然后子进程会竞争accept新的连接。此时,客户端就可以向Nginx发起连接了。当客户端与Nginx进行三次握手,与Nginx建立好一个连接后,此时,某一个子进程会accept成功,得到这个连接好的连接的socket,然后创建Nginx对连接的封装,即ngx_connecton_t结构体。接着,设置读写事件处理函数并添加读写事件与客户端进行数据交换。最后,Nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
当然Nginx也是可以作为客户端来请求其他server的数据的(如upstream模块),此时,与其他server创建的连接,也封装在ngx_connection_t中。作为客户端,Nginx先获取一个ngx_connection_t结构体,然后创建socket,并设置socket的属性(比如非阻塞)。然后再通过添加读写事件,调用connect/read/write来调用连接,最后关掉连接,并释放ngx_connection_t。
七、Windows环境下的常用命令
- 查看Nginx的版本号:nginx -V
- 启动Nginx:start nginx
- 快速停止或关闭Nginx:nginx -s stop
- 正常停止或关闭Nginx:nginx -s quit
- 配置文件修改重装载命令:nginx -s reload
- 查看windows任务管理器下Nginx的进程命令:tasklist /fi "imagename eq nginx.exe