nginx的反向代理与正向代理

               nginx的反向代理与正向代理

nginx多用于现在公司的企业当中如:

淘宝、新浪博客、新浪播客、网易新闻、六间房、56.co、豆瓣、YUPOO、海内、迅雷在线等多家网站使用

为什么这么多公司愿意使用您想呢?说明nginx有不可取代的优势特点:

我们分析下nginx的特点:

(1)跨平台:Nginx 可以在大多数OS编译运行,而且也有Windows的版本;

(2)配置异常简单:非常容易上手。

(3)非阻塞、高并发连接官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);{这里的5万并发量属于静态}

具体的阻塞和非阻塞不在这里做过多的介绍,后面会为大家进行详细的介绍。

(4)nginx的master/worker结构:

在这里可以看的出来master维护worker列队,将请求下发到多个worker并行执行,worker将运行结果返回给master。

优点;

每个进程之间不会相互影响,一个进程推出之后,其他进程换在工作,服务不会中断。

(5)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

(6)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。

(7)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

(8)稳定性高:用于反向代理,宕机的概率微乎其微。

这里既然说到了反向代理,那么就说一说正向代理和反向代理的区别:

1)正向代理:

用于代理服务器的内部网络连接请求外部的internet:如vpn、nat技术

2)反向代理:

用于制定代理服务器接受客户端的连接请求,将请求的内容分发到内部的服务器中。{在生产环境中大多使用反向代理,所以简单介绍下作用}

反向代理的作用:

保护网站安全:任何来自Internet的请求都必须先经过代理服务器;

通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;

实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

接下来的环境就是今天为大家带来的关于nginx的反向代理;

实验环境如下:

nginx: 192.168.5.130

web1 :192.168.5.129

web2 :192.168.5.128

首先配置nginx服务器,在安装nginx之前必须解决nginx的依赖关系:通过网络yum源安装

接下来为nginx创建nginx的用户“www”

解压nginx的安装包,以及ngx_cache_purge模块,和master模块:

注:这里的模块属于第三方的模块,需要制定,在nginx的安装包中不存在

--user ==============================================指定用户名

--group=============================================指定组名

--with-http_stub_status_module========================启用状态统计模块

--with-http_realip_module============================获取到真是的用户Ip

--with-http_ssl_module===============================启用ssl安全连接

--with-http_gzip_static_module=========================启动gzip压缩功能

-http-client-body-temp-path=/var/tmp/nginx/client============指定客户端连接目录

--http-proxy-temp-path=/var/tmp/nginx/proxy================允许将请求传递到另一个服务器

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi===============使用fistcgi模块

--with-pcre==========================================使用prce正则表达式

--add-module=../ngx_cache_purge-2.3===================缓存清除模块

-with-http_flv_module===============================添加流媒体文件模块

--add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42=====实现会话粘连(保持会话)

这里做个软连接,也可以做个环境变量,echo PATH="$PATH:/usr/local/nginx1.10/sbin/nginx ">> /etc/profile  两种方法都可以.

通过语法检测查看上面我们所做的操作是否有错误。可以看到缺少一个客户端的路径,我们可以手动创建一个。

之后再次进行验证:

在这里我们在启动程序的环境变量当中创建一个启动nginx的脚本服务,可以加入开机自启动当中。方便我们日常的启动工作。

创建完成之后需要给一个执行权限,添加为系统服务,开机自启动

查看一下nginx服务是否已经启动

将防火墙的80端口启动

以上属于nginx的配置就可以了,后面我们会修改其配置文件。

接下来配置nginx的两台负载服务器,web1和web2服务器。

web1服务器的配置如下;在这里就通过yun安装web服务了

web2服务和web1服务安装相同;

如果想要做反向代理和负载均衡,就需要在nginx的主配置文件当中进行配置具体配置如下;

后面会有具体的相对应的介绍;

常用指令说明:

main全局配置:

woker_processes 4
在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。

worker_cpu_affinity
也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。

另外也可以使用top命令之后按1可以查看:

上面的配置表示:4核CPU,开启4个进程。0001表示开启第一个cpu内核, 0010表示开启第二个cpu内核,依次类推;有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。

例如:

1、2核CPU,开启2个进程

worker_processes2;

worker_cpu_affinity  01  10;

2、2核CPU,开启4进程

worker_processes 4;

worker_cpu_affinity  01  10  01  10;

3、2核CPU,开启8进程

worker_processes8;

worker_cpu_affinity  01 10 01 10 01 10 01 10;

4、8核CPU,开启2进程

worker_processes2;

worker_cpu_affinity  10101010 01010101;

说明:10101010表示开启了第2,4,6,8内核,01010101表示开始了1,3,5,7内核

worker_connections  4096
写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。

worker_rlimit_nofile 10240
写在main部分。worker进程的最大打开文件数限制。默认是没有设置,如果没设置的话,这个值为操作系统的限制(ulimit -n)。可以限制为操作系统最大的限制65535。把这个值设高,这样nginx就不会有“too many open files”问题了。

use epoll
写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。

http服务器:

与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。

sendfile on
开启高效文件传输模式。

keepalive_timeout 65 : 长连接超时时间,单位是秒,长连接请求大量小文件的时候,可以减少重建连接的开销,如果设置时间过长,用户又多,长时间保持连接会占用大量资源。

client_max_body_size 10m
允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值

client_body_buffer_size 128k
缓冲区代理缓冲用户端请求的最大字节数

server_tokens off;

隐藏nginx的版本号

模块http_proxy:
这个模块实现的是nginx作为反向代理服务器的功能,包括缓存功能

proxy_connect_timeout
nginx跟后端服务器连接超时时间(代理连接超时)

proxy_read_timeout
定义从后端服务器读取响应的超时。此超时是指相邻两次读操作之间的最长时间间隔,而不是整个响应传输完成的最长时间。如果后端服务器在超时时间段内没有传输任何数据,连接将被关闭。

proxy_send_timeout

定义向后端服务器传输请求的超时。此超时是指相邻两次写操作之间的最长时间间隔,而不是整个请求传输完成的最长时间。如果后端服务器在超时时间段内没有接收到任何数据,连接将被关闭。

proxy_buffer_size  4k
设置缓冲区的大小为size。nginx从被代理的服务器读取响应时,使用该缓冲区保存响应的开始部分。这部分通常包含着一个小小的响应头。该缓冲区大小默认等于proxy_buffers指令设置的一块缓冲区的大小,但它也可以被设置得更小。

proxy_buffers 8 4k

语法: proxy_buffersthe_numberis_size;

为每个连接设置缓冲区的数量为number,每块缓冲区的大小为size。这些缓冲区用于保存从被代理的服务器读取的响应。每块缓冲区默认等于一个内存页的大小。这个值是4K还是8K,取决于平台。

proxy_busy_buffers_size  64k
高负荷下缓冲大小(默认大小是proxy_buffers指令设置单块缓冲大小的2倍)

proxy_max_temp_file_size
当proxy_buffers放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M。

proxy_temp_file_write_size 64k
当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。

模块http_gzip:

gzip on : 开启gzip压缩输出,减少网络传输。

gzip_min_length 1k :设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_buffers 4 16k :设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,按照原始数据大小以16k为单位的4倍申请内存。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果

gzip_http_version 1.1 :用于识别 http 协议的版本,早期的浏览器不支持Gzip压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了Nginx的反向代理并期望也启用Gzip压缩的话,由于末端通信是 http/1.1,故请设置为 1.1。

gzip_comp_level 6 :gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_types :匹配mime类型进行压缩,无论是否指定”text/html”类型总是会被压缩的。

默认值: gzip_types text/html (默认不对js/css文件进行压缩)
# 压缩类型,匹配MIME类型进行压缩
# 不能用通配符 text/*
# (无论是否指定)text/html默认已经压缩 
# 设置哪压缩种文本文件可参考conf/mime.types

gzip_proxied any :Nginx作为反向代理的时候启用,根据某些请求和应答来决定是否在对代理请求的应答启用gzip压缩,是否压缩取决于请求头中的“Via”字段,指令中可以同时指定多个不同的参数,意义如下:

off – 关闭所有的代理结果数据的压缩
expired – 启用压缩,如果header头中包含 “Expires” 头信息
no-cache – 启用压缩,如果header头中包含 “Cache-Control:no-cache” 头信息
no-store – 启用压缩,如果header头中包含 “Cache-Control:no-store” 头信息
private – 启用压缩,如果header头中包含 “Cache-Control:private” 头信息
no_last_modified – 启用压缩,如果header头中不包含 “Last-Modified” 头信息
no_etag – 启用压缩 ,如果header头中不包含 “ETag” 头信息
auth – 启用压缩 , 如果header头中包含 “Authorization” 头信息
any – 无条件启用压缩

gzip_vary on :和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

模块http_stream
这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡,upstream后接负载均衡器的名字,后端realserver以 host:port options; 方式组织在 {} 中。如果后端被代理的只有一台,也可以直接写在proxy_pass。

Location:

root  /var/www/html

定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下。

index index.jsp index.html index.htm

定义路径下默认访问的文件名,一般跟着root放

proxy_pass http:/backend

请求转向backend定义的服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_passhttp://ip:port

proxy_redirect off;

指定是否修改被代理服务器返回的响应头中的location头域跟refresh头域数值

例如:

设置后端服务器“Location”响应头和“Refresh”响应头的替换文本。假设后端服务器返回的响应头是 “Location: http://localhost:8000/two/some/uri/”,那么指令

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

将把字符串改写为 “Location: http://frontend/one/some/uri/”。

proxy_set_header Host $host;

允许重新定义或者添加发往后端服务器的请求头。

总结:

通过上面的配置可以看的出来nginx的配置计较简单相对apache;许多的配置要简化了好多。

接下来对两台web服务进行配置网页内容:

验证:通过访问nginx的ip地址可以访问到两台web服务器的网页内容:

接下来对访问到的内容进行一个测试按F12键查看,注:必须通过火狐浏览器或者谷歌;

可以看到1.gif的访问情况是200.说明是直接从后台的web服务直接获得。

当我们再一次打开浏览其查看的时候,会发现,1.gif文件变成了304,另外nginx-Cache:"HIT"

说明这次我们访问到的内容是在nginx当中进行缓存了的内容,而不是从后台服务中获得

如果还想继续验证,那么可以通过192.168.5.130/purge/1.gif清除缓存,再次进行查看,这里的purge属于前面我们编译安装时安装的模块起到了作用

通过刚才的清除缓存,我们再一次进行访问可以看到我们的1.gif图片是从web中获得的

nginx-Cache:“MISS”

时间: 2024-10-31 19:59:04

nginx的反向代理与正向代理的相关文章

【nginx】【转】正向代理与反向代理的区别[

转自: http://blog.csdn.net/m13666368773/article/details/8060481 正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容代理服务器去取回来,然后返回给我 从网站的角度,只在代理服务器来取内容的时候有一次记录有时候并不知道是用户的请求,也隐藏了用户的资料

nginx反向代理与正向代理

nginx反向代理与正向代理 1 正向代理 正向代理: 原因是 客户端 ---X--- 网站,客户端不能直接访问某个网站 解决: 客户端 ----> 代理服务器(发起访问请求) ----> 某个想要访问的网站 客户端 <---- 代理服务器(响应的内容) <---- 某个想要访问的网站 结论: 正向代理实质就是位于客户端(client)与初始服务器(origin server)之间的服务器,为从原始服 务器获取内容 ,客户端向一个可以访问的代理服务器发起自己的请求并指向目标网站服务

代理_正向代理_反向代理_nginx_转

转自:Nginx 相关介绍(Nginx是什么?能干嘛?)   蔷薇Nina 关于代理 说到代理,首先我们要明确一个概念,所谓代理就是一个代表.一个渠道: 此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程:如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户. 正向代理 说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会

透明代理、正向代理、反向代理的区别说明

代理方式有三种:正向代理.透明代理和反向代理.反向代理比较容易理解,毕竟是运维必掌握的知识,但是对正向代理.透明代理可能比较模糊,所以主要解惑正向代理和透明代理. 透明代理 透明代理(transparent proxy),看名字就知道这个代理服务器是透明的,透明代理其实也叫做内网代理(inline proxy).拦截代理(intercepting proxy)以及强制代理(force proxy).透明代理和正向代理的行为很相似,但细节上有所不同.透明代理将拦截客户端发送的请求,拦截后自己代为访

透明代理、反向代理,正向代理

1.透明代理 透明代理(transparent proxy),也叫内网代理(inline proxy).拦截代理(inercepting proxy)已经强制代理(force proxy).透明代理和正向代理的行为很相似,但细节上有所不同,透明代理将拦截客户端发送的请求,拦截后自己代为访问客户端,获取响应结果后再有透明代理交给客户端,其实网康一类的上网行为管理设备就是透明代理. 架构图如下: 2.正向代理 正向代理(forward proxy),看名字就知道是转发代理,客户端将请求转发正向代理服

正向代理与反向代理,正向代理与反向代理的应用

客户端的代理叫做正向代理,服务端的代理叫做反向代理. 正向代理 原理:正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端.客户端才能使用正向代理. 应用:正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径.正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率. 大白话:正向代表客户端这边,也

nginx反向代理和正向代理,优缺点

http://blog.csdn.net/lishaojun0115/article/details/53200629 nginx反向代理代理的是服务器,正向代理代理的是客户端, 反向代理是客户点发送请求,nginx把请求头伪装起来让服务器不知道是客户端还是nginx发起的服务. 原文地址:https://www.cnblogs.com/mttcug/p/8618804.html

反向代理|与正向代理区别区别

通常的代理服务器,也就是正向代理,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中.由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求.当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称

聊一聊 反向代理和正向代理

先把图贴上,有时间慢慢写 正向代理 反向代理