重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一、定义
为丹阳等地区用户提供了全套网页设计制作服务,及丹阳网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、丹阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
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进程中处理