兴趣爱好

Nginx服务器安装配置及设置反向代理

Nginx服务器安装配置及设置反向代理

  • 关于Nginx

1、什么是Nginx

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强(并发能力比Apache好),事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx大型网站用户有:京东、新浪、网易、腾讯、淘宝等。

  • Nginx的优点

Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。

Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:

在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

 

服务器方面:

Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。

 

代码方面:

Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。

 

代理服务器方面:

作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

 

性能方面:

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务器。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

  • Nginx的功能

跨平台:

  • FreeBSD 3— 10 / i386; FreeBSD 5— 10 / amd64;
  • Linux 2.2— 4 / i386; Linux 2.6— 4 / amd64; Linux 3— 4 / armv6l, armv7l, aarch64;
  • Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
  • AIX 7.1 / powerpc;
  • HP-UX 11.31 / ia64;
  • Mac OS X / ppc, i386;
  • Windows XP, Windows Server 2003.

 

结构与扩展:

一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;

kqueue (FreeBSD 4.1+),epoll (Linux 2.6+),rt signals (Linux 2.2.19+),/dev/poll (Solaris 7 11/99+),select,以及 poll 支持;

kqueue支持的不同功能包括 EV_CLEAR,EV_DISABLE (临时禁止事件), NOTE_LOWAT,EV_EOF,有效数据的数目,错误代码;

sendfile (FreeBSD 3.1+),sendfile (Linux 2.2+),sendfile64 (Linux 2.4.21+),和 sendfilev (Solaris 8 7/01+) 支持;

输入过滤 (FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;

10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M内存。

最小化的数据拷贝操作;

其他HTTP功能:

基于IP 和名称的虚拟主机服务;

Memcached 的 GET 接口;

支持 keep-alive 和管道连接;

灵活简单的配置;

重新配置和在线升级而无须中断客户的工作进程;

可定制的访问日志,日志写入缓存,以及快捷的日志回卷;

4xx-5xx错误代码重定向;

基于 PCRE 的 rewrite 重写模块;

基于客户端IP 地址和 HTTP 基本认证的访问控制;

PUT,DELETE,和 MKCOL 方法;

支持 FLV (Flash 视频);

带宽限制。

 

实验特性

内嵌的 perl;

通过 aio_read()/aio_write() 的套接字工作的实验模块,仅在 FreeBSD 下;

对线程的实验化支持,FreeBSD 4.x 的实现基于 rfork();

Nginx 主要的英语站点是 http://sysoev. ru/en/;

英语文档草稿由 Aleksandar Lazic 完成 点击。

 

HTTP基础功能

处理静态文件,索引文件以及自动索引;

反向代理加速(无缓存),简单的负载均衡和容错;

FastCGI,简单的负载均衡和容错;

模块化的结构。过滤器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;

SSL 和 TLS SNI 支持;

 

IMAP/POP3代理服务功能

使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端;

使用外部 HTTP 认证服务器认证用户后连接重定向到内部的 SMTP 后端;

其他HTTP功能

基于名称和基于IP的虚拟服务器;

Keep-alive and pipelined connections support;保持活动和支持管线连接;

Flexible configuration;灵活的配置;

Reconfiguration and online upgrade without interruption of the client processing;重载配置,无间断程序升级;

Access log formats,bufferred log writing,and quick log rotation;访问日志格式,bufferred日志写,快速登录旋转;

3xx-5xx error codes redirection; 3xx的- 5xx错误代码重定向;

The rewrite module;重写模块;

Access control based on client IP address and HTTP Basic authentication;基于客户端IP地址访问控制和HTTP基本认证;

The PUT,DELETE,MKCOL,COPY and MOVE methods; 提交,删除,MKCOL,复制和移动方法;

FLV streaming;FLV视频流;

Speed limitation;速度限制;

Limitation of simultaneous connections or requests from one address.限制同个IP地址请求数量。

Embedded perl.嵌入式的Perl。

 

邮件代理服务器功能

用户重定向到IMAP/POP3后端使用外部HTTP认证服务器;

User authentication using an external HTTP authentication server and connection redirection to internal SMTP backend;用户身份验证使用外部HTTP认证服务器和连接重定向到内部的SMTP后端;

Authentication methods:验证方法:

POP3: USER/PASS,APOP,AUTH LOGIN/PLAIN/CRAM-MD5;的POP3:用户名/密码,的APOP,AUTH的LOGIN/PLAIN/CRAM-MD5;

IMAP: LOGIN,AUTH LOGIN/PLAIN/CRAM-MD5; IMAP的:登录,AUTH的LOGIN/PLAIN/CRAM-MD5;

SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;的SMTP:AUTH的LOGIN/PLAIN/CRAM-MD5;

SSL support; SSL支持;

STARTTLS and STLS support. STARTTLS的和补充的支持。

认证方法:

POP3: POP3 USER/PASS,APOP,AUTH LOGIN PLAIN CRAM-MD5;

IMAP: IMAP LOGIN;

SMTP: AUTH LOGIN PLAIN CRAM-MD5;

SSL 支持;

在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持。

 

  • 安装Nginx

           

          在正式开始安装之前,先说明一下这次的实验环境,实验环境如下:

Linux主机:

IP地址:10.3.198.198

子网掩码:255.255.255.0

默认网关:10.3.198.1

Windows主机:

IP地址:10.3.216.247

子网掩码:255.255.255.0

默认网关:10.3.216.1

两台主机的IP地址同属于一个A类的私有网段内。

 

经过上面对Nginx的简单介绍,相信大家对Nginx已经有了一个初步的认识,接下来便是安装Nginx,步骤如下:

 

  • 配置Yum源

本次实践是直接通过Yum来安装Nginx服务器,所以如果之前已经配置过Yum源的小伙伴可以直接忽略此步骤,但是如果之前没有配置过Yum源的小伙伴请参考以下链接先配置Yum源:

http://blog.sina.com.cn/s/blog_c70e10380102w7t1.html

  • 正式安装Nginx
  • 执行命令:yum remove nginx  #如果系统之前装了Nginx的,先用这条命令把原来安装的卸载了,然后重新安装最新的。
  • 执行命令:yum -y install nginx  #安装Nginx命令,如果按照上述的方法配置过Yum源的话,用这条命令一般都能成功安装Nginx的,安装完成后如下图1所示:

 

图1 成功安装Nginx

 

  • 配置Nginx
  • 执行命令:whereis nginx(注意:是 whereis 而不是 where is,中间没有空格的)查看一下Nginx的安装路径及配置文件的路径,如下图2所示:

 

图2 Nginx服务器安装及配置文件路径

  • 由于Nginx服务器的默认端口也是80,而我之前在这台电脑上搭建过apache httpd服务器,其端口也是80,所以为了不冲突,这里我把Nginx服务器的端口改成666,Nginx服务器的配置文件的路径为:/etc/nginx/conf.d,如下图3所示:

 

图3 Nginx服务器配置文件路径

  • 把工作路径切换到/etc/nginx/conf.d目录下,用vim default.conf打开conf这个配置文件,将端口80修改为666,如下图4所示:

图4 修改Nginx服务器端口号

  • 启动Nginx服务器:执行命令 cd /usr/sbin 切换到服务器的可执行文件nginx的路径,执行./nginx启动服务器(启动过程中是没有提示信息的哈),启动后,在浏览器地址栏输入:http://10.3.198.198:666,效果如下图5所示:

 

图5 执行./nginx效果图

  • 额..........无法访问,好吧,下面来看看是什么原因,下面是排除原因的过程截图:

先ping本机环回地址127.0.0.1,如下图6所示

 

图6 ping本机环回地址

  • 能ping通,证明本机是没有问题的,下面ping一下服务器的ip地址,如图7所示:

 

图7 ping服务器ip地址

  • 还是能ping通,证明本机到服务器的连接是没有问题的,会不会是服务器没启动成功呢?先瞧瞧。如下图8所示:

 

图8 服务器端口的监听情况

事实证明,刚才执行./nginx命令已经成功把服务器启动起来了,并且在666端口的监听是正常的。到这里排除了服务器没启动的可能性。

  • 既然服务器的应用程序已经运行在666端口上了,到底是什么原因导致无法访问页面?由于上面的ping 10.3.198.198 这条命令能ping通,所以可以确定的是,本机的数据一定是能够到达服务器主机的,不信就尽管用tcpdump抓一下3.216.247这台主机(也就是我的Windows电脑)的请求数据,看看请求信息到底有没有到达服务器主机,先在Linux系统下执行命令:tcpdump icmp ,然后在Windows下执行命令:ping 10.3.198.198 -t,如下图9、10所示:

Ping服务器的ip地址:

在Linux下用命令:tcpdump icmp抓Windows系统的发过来的icmp数据包:

 

 

看到了吗,Linux服务器主机正在回应Windows电脑的请求消息。证明icmp协议的数据包没问题,能到达服务器主机。

  • 如果通过上面这些步骤都还没解决问题,那么就要从防火墙的角度来考虑了,很有可能是防火墙把要到达666的数据全部拒绝了,下面使用:tcpdump port 666来验证一下,在Linux系统下先执行命令:tcpdump port 666,然后在浏览器的地址栏再次输入:

http://10.3.198.198:666 对服务器进行访问,观察Linux系统中的tcpdump port 666这条命令的返回结果,如下图图11所示:

 

图11 对666号端口的抓包结果

可以看到,Windows电脑浏览器的请求消息到了666号端口,但是请求消息并没有发送到Nginx服务器手里。也就是说,此时的数据是单向的,服务器并没有回应。

  • 经过上面的步骤基本上能把无法访问页面的根源定位在防火墙的配置上面了,下面查看一下防火墙是如何配置的,如图12所示:

 

把开放666号端口的规则配置上去,如下图13所示:

 

OK!Wq保存退出,然后执行命令:service iptables restart重启防火墙,使刚才的配置生效,如图14所示:

 

  • 这个时候应该能访问了,在浏览器的地址栏输入:http://10.3.198.198:666,如图15所示:

 

OK,成功访问。

补充一点:如果是通过URL进行页面访问的话,当出现无法连接的时候的时候,还需要考虑DNS服务器方面的原因,因为也有可能是DNS服务器无法将你所输入的URL解析为正确的IP地址,从而导致无法访问网页。这个时候可以通过一些第三方的软件对DNS进行修复一下,比如:360安全卫士,一般都能修复的。从以上这些点进行考虑,绝大多数无法连接的问题根源都能找到了。

不妨再次验证一下此时使用tcpdump port 666 是否真的能抓到包了,在Linux下先执行 tcpdump port 666 ,然后刷新一下地址:http://10.3.198.198:666,可以看到命令:tcpdump port 666返回的结果如图16所示:

 

这个时候数据是双向的了。如果不明白,将图16的结果与上图11的结果对比一下,就明白了。

 

OK,Nginx服务器的安装到此就已经成功安装啦,如果想跑网站的话,直接把网站部署上去就可以了,网站的部署我就不再详述了,跟tomcat上面的部署方法差不多,不知道怎么部署的可以参考链接:

http://blog.sina.com.cn/s/blog_c70e10380102w80w.html

上述排除故障的过程可能有点啰嗦,其实熟练了根本不用这么麻烦的,之所以写出来,是给刚接触Linux和目前还没有计算机网络基础的同学看的哈,如果懂的话,可以略过。不得不说一下计算机网络对于我们测试人员来说是多么重要,上面的每一步排查原因都要用到计算机网络的知识及Linux系统的知识相结合。如果没有计算机网络基础的话,让你去测一个web网站,结果你连访问都访问不了,还测啥?所以,学好计算机网络很重要。

 

补充:上面关于iptables(防火墙)的配置,请参考以下链接:

http://blog.sina.com.cn/s/blog_c70e10380102w9wo.html 在此不再详述。

 

 

  • 设置Nginx反向代理实现负载均衡的功能

Nginx不仅能直接作为http server,它更强大的功能便是用来实现负载均衡的功能。

 

  • 负载均衡

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

 

  • 负载均衡的分类

从软/硬件的角度来划分:

软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。

软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。

硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。

一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。

 

从本地/全局的角度来划分:

负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。

本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。

全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。

全局负载均衡有以下的特点:

实现地理位置无关性,能够远距离为用户提供完全的透明服务。

除了能避免服务器、数据中心等的单点失效,也能避免由于ISP专线故障引起的单点失效。

解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量。

 

 

从部署方式的角度来划分:

负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。

路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。

 

路由模式(推荐):采用路由模式部署服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。

 

桥接模式:桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。

服务直接返回模式:这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负

 

服务直接返回模式:载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。

 

  • 设置Nginx反向代理

在正式设置反向代理之前,很有必要

由于我之前在我的Windows电脑安装过Tomcat服务器,所以在这里,我想实现的功能是这样的:通过访问:http://10.3.198.198:666/example 来访问我Windows下apache httpd服务器上面的那个花店网站。意思就是说,我不直接在windows下面输入:http://localhost/example 或者输入http://10.3.216.247/example 来访问我曾经在Windows下部署的apache httpd服务器下的花店,而是通过先访问Linux系统下的Nginx服务器,然后Nginx服务器再把请求转发到Windows下的apache httpd服务器,实现Nginx服务器的反向代理功能。这里由于主机数有限,只能通过这种方式来向大家演示了,实际上通过给Nginx设置反向代理,可以同时将请求消息转发给很多台服务器主机的。比如京东、淘宝等大型的网站,用户数量级达到亿级别的,在全国各地都有不止一台服务器,当用户访问量过多时,由于用户的请求都会先经过Nginx服务器,所以Nginx服务器会自动权衡哪台服务器所接受的用户访问相对较少的,就把这些请求转发到相对空闲的服务器。这就是负载均衡的工作原理了。

下面修改Nginx的配置文件,给Nginx服务器设置反向代理功能,使用命令:vim /etc/nginx/conf.d/default.conf 打开 Nginx的配置文件,加入如图17所示的内容:

 

上图中标记的内容是设置Nginx反向代理功能的代码段,保存退出,然后使用命令:service nginx restart 重启Nginx服务器。

下图18、19分别为直接访问Windows下的花店和通过Nginx服务器转发请求访问Windows下的花店效果图:

 

 

第一次是不经过代理,直接使用:http://localhost/example/ 进行访问,第二次是使用地址:http://10.3.198.198:666/example/ 先访问了Linux下的Nginx服务器,然后Nginx服务器再把请求转发回来,到达Windows下的apache httpd 服务器,二者是不同的。

Nginx服务器安装配置及设置反向代理:等您坐沙发呢!

发表评论

表情
还能输入210个字