首页 > 代码库 > Nginx简单使用与详解

Nginx简单使用与详解

一、定义

Nginx是一个反向代理服务器,所谓反向代理服务器就是当客户端要请求服务器时,在他们之间加一个代理服务器,当客户端请求时,先请求代理服务器,代理服务器通过防火墙连接到服务器

代理服务器介于客户端与服务器之间,相当于一个中间人或中介人

下图为关系图:

技术分享

用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实际上反向代理服务器接受用户A的应答,
从原始资源服务器B中取得用户A的需求资源,然后发送给用户A。由于防火墙的作用,只允许代理服务器Z访问原始资源服务器B。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器B,但用户A并不知情。

简单的说:
正向代理:客户端知道服务器端,通过代理端连接服务器端。代理端代理的是服务器端。
反向代理:所谓反向,是对正向而言的。服务器端知道客户端,客户端不知道服务器端,通过代理端连接服务器端。代理端代理的是客户端。代理对象刚好相反,所以叫反向代理。


二、简单使用Nginx

Nginx的安装步骤我就不写了,在我的另一篇博客中有提交,这篇简单介绍使用

服务器A

代理服务器B


首先要开启、关闭防火墙:

Ubuntu:sudo ufw enable | disable

没安装的:

sudo apt-get install ufw

在服务器A中开启防火墙,禁用除了代理服务器B之外的所有访问


在代理服务器B上安装Nginx,修改nginx.conf配置文件:

在http层下添加:

upstream server1 {

     server 192.168.0.134:8080; # 被代理的服务器地址

}

server层修改:

location / {

      proxy_pass http://server1; 

}


修改完成之后,重启nginx


浏览器中输入:http://代理服务器IP:端口/ 进行访问,会自动访问到http://192.168.0.134:8080 处


负载均衡配置:

upstream server1 {

     server 192.168.0.134:8080; # 被代理的服务器地址

     server 192.168.0.125:8081; # 被代理的服务器地址

}

当其中一个宕机之后,会连接其中到另一个地址


三、nginx的进程模式

nginx启动后,会在Unix系统中以后台的方式运行,后台进程包括一个master进程和多个worker进程,当然你也可以手动的调整为前台运行,但nginx默认支持的是多进程模式运行,同时也支持多线程模式运行

上面说到nginx启动后有一个master进程和多个worker进程,master进程是用来管理worker进程的,当有来自外界的请求时,发放给各个worker,监控worker的状态,当一个worker宕机之后,会重新启动一个新的worker进程,每个worker之间是对等的,与请求之间的关系也是一对一的,nginx进程模型如下:

技术分享


要操作nginx让它从容的重启,发送./nginx -s reload命令,当master进程接收到此命令之后,它会取加载配置文件,建立新的worker进程,并发送信号给老的worker进程,告诉他们可以退出了,当新worker进程启动成功开始接收请求时,老worker处理完当前所有的请求之后就退出,这样就可以让服务不中断的进行重新启动了


worker处理请求的方式:

先让master建立好需要listen的socket之后,再让master进程fork多个worker进程,所有worker进程的listenfd会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。我们可以看到,一个请求,完全由worker进程来处理,而且只在一个worker进程中处理

本文出自 “项以奇的博客” 博客,请务必保留此出处http://12854546.blog.51cto.com/12844546/1929724

Nginx简单使用与详解