Nginx安装及配置详解

以下转载自:

Nginx概述

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

这里主要通过三个方面简单介绍Nginx

  • 反向代理
  • 负载均衡
  • Nginx特点

1. 反向代理

关于代理

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;

此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户


正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理

在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。


反向代理

明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用Nginx进行反向代理实现的,并且通过封装Nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/
那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图:

通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色

反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!

项目场景

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图如下:

2. 负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

这里提到的客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量

请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则

所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制

Nginx支持的负载均衡调度算法方式如下:

  1. weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

  2. ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

  3. fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

  4. url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包

ubuntu安装

按照正常软件的安装方式,直接通过如下命令进行安装:

$ sudo apt-get install Nginx

安装完成即可,在/usr/sbin/目录下是Nginx命令所在目录,在/etc/Nginx/目录下是Nginx所有的配置文件,用于配置Nginx服务器以及负载均衡等信息

查看Nginx进程是否启动
$ ps -ef|grep Nginx

Nginx会自动根据当前主机的cpu的内核数目创建对应的进程数量(当前ubuntu主机是2核4线程配置)

备注:这里启动的服务进程其实是4个进程,因为Nginx进程在启动的时候,会附带一个守护进程,用于保护正式进程不被异常终止;如果守护进程一旦返现Nginx继承被终止了,会自动重启该进程。

守护进程一般会称为master进程,业务进程被称为worker进程

启动Nginx服务器命令

直接执行Nginx会按照默认的配置文件进行服务器的启动

$ Nginx
停止Nginx服务命令

和windows系统执行过程一样,两种停止方式

$ Nginx -s stop or $ Nginx -s quit
———-

ubuntu中彻底删除nginx

———- 一般像这种问题,最好的方式就是首先知道如何安装和卸载Nginx,可以参考如下博文:

1.先执行一下命令:

1.1 删除Nginx,–purge包括配置文件

sudo apt-get --purge remove Nginx

  

1.2 自动移除全部不使用的软件包

sudo apt-get autoremove

  

1.3 罗列出与Nginx相关的软件

dpkg --get-selections|grep Nginx

  

执行1.3的结果:
stephen@stephen-OptiPlex-390:~$ dpkg --get-selections|grep Nginx
Nginx                       install
Nginx-common                    install
Nginx-core                  install

  

1.4 删除1.3查询出与Nginx有关的软件

sudo apt-get --purge remove Nginx
sudo apt-get --purge remove Nginx-common
sudo apt-get --purge remove Nginx-core

  这样就可以完全卸载掉Nginx包括配置文件

2.查看Nginx正在运行的进程,如果有就kill掉

ps -ef |grep Nginx

  看下Nginx还有没有启动,一般执行完1后,Nginx还是启动着的,如下:

stephen@stephen-OptiPlex-390:~$ ps -ef |grep Nginx
root      7875  2317  0 15:02 ?        00:00:00 Nginx: master process /usr/sbin/Nginx
www-data  7876  7875  0 15:02 ?        00:00:00 Nginx: worker process
www-data  7877  7875  0 15:02 ?        00:00:00 Nginx: worker process
www-data  7878  7875  0 15:02 ?        00:00:00 Nginx: worker process
www-data  7879  7875  0 15:02 ?        00:00:00 Nginx: worker process
stephen   8321  3510  0 15:20 pts/0    00:00:00 grep --color=auto Nginx

  

3.kill Nginx进程

sudo kill  -9  7875 7876 7877 7879

  

4.全局查找与Nginx相关的文件

sudo  find  /  -name  Nginx

  

5.依依删除4列出的所有文件

sudo rm -rf file

  

6. 再次重装

sudo apt-get update
sudo apt-get install Nginx

ubuntu 16.04下Nginx简介原理、安装和卸载的更多相关文章

  1. ios – UITextFieldDelegate vs UITextField控件事件

    处理编辑开始或编辑结束的相同问题.它可以通过适当的委托方法或适当的事件来完成.如果控件事件可以进行必要的工作,那么textField代理是什么?

  2. swift详解之十一------------协议、委托(代理)模式

    协议、委托(代理)模式注:本小节总结协议以及依靠协议实现委托,这将在以后经常被使用。很简单的例子说明下,在协议中用static在实现类里可以用static或者class在协议中使用mutating变异方法。然后他就一共实现了两个协议,一个sayHello一个hmtl的这时候这两个方法就都可以用了当然我们的协议也是可以继承的。

  3. Swift 委托/代理设计模式

    Swift中的委托/代理模式与object-c的代理模式基本一致。代理模式的基本思想就是将我需要来完成的工作交给(委托给)另一个有我所规定的做这项工作能力的人来处理。代理模式的实现需借助于我们上一篇文章所讲的协议。比如说我找到了玛雅房屋让他们去帮我租租房。我只需要告诉他们我要一个大致什么位置,多大,什么类型,价格范围等,他们就可以帮我去租房。玛雅房屋就是接受委托的对象,因为他有满足我要求的能力。

  4. Swift实现委托代理的N种方式

    首先理清概念,delegate只是一种模式理念,不是具体方法。OK1.extension继承法:赋予某根类扩展“空方法”,使其子类继承后可重写成为代理。就要你成为我的奴隶2.protocal协议法:只要实现了指定protocal即可成为代理下蛋的鸡就是好鸡3.闭包+Tuple代理:swift中方法也是firstclassvalue这不是人,这不是妖,这是人妖4.继承NSObject使用methodForSelector,使用OC中NSObject提供的的“反射”机制完成调用无耻下作的典范

  5. Swift:界面传值大全

    声明了代理属性之后,我们需要在处理界面跳转(返回)的方法中处理协议传值的逻辑了。

  6. Swift设计模式之保护代理模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  7. swift设计模式学习 - 代理模式

    代理模式的组成抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理模式的基本实现上图是最基本的代理模式的结构图,下面将用Swift代码来实现一个基本代理模式:以上是一个最基本的代理模式的构成,这样可以用Proxy来代替RealSubject,从而对客户端隐藏真实的对象。高扩展性以上是我对于代理模式的理解,如果有不对的地方欢迎大家交流,最后谢谢大家的阅读~~

  8. swift3.0之UIImagePickerController的使用和注意事项

    在oc中使用UIImagePickerController只要设置好代理、写代理方法就行了,但是在swift中编译没有什么问题,但是运行的时候会报错,选择一张图片,会显示库是私有的,不能访问,遇到这样的问题很好的解决办法就是在info.plist文件中添加Privacy-PhotoLibraryUsageDescription和Privacy-CameraUsageDescription两个字符串

  9. KVC原理剖析

    协议定义KVC全称是KeyValueCoding,定义在NSkeyvalueCoding.h文件中,是一个非正式协议。基础操作KVC主要对三种类型进行操作,基础数据类型及常量、对象类型、集合类型。在使用KVC时,直接将属性名当做key,并设置value,即可对属性进行赋值。在KVC进行属性赋值时,内部会对基础数据类型做处理,不需要手动做NSNumber的转换。集合属性操作根据KVO的实现原理,是在运行时生成新的子类并重写其setter方法,在其内容发生改变时发送消息。

  10. 教你如何使用node.js制作代理服务器

    本文介绍了如何使用node.js制作代理服务器,图文并茂,十分的详细,代码很简洁易懂,这里推荐给大家。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部