反向代理和正向代理以及Nginx工具的简要使用

正向代理

正向代理也就是传说中的代理。

比如我们常用的FQ软件就是这个代理者。用户将请求发送至代理服务器,代理服务器向实际请求位置获取数据,然后打包发送至用户。

从网站来讲,网站是不知道请求者的信息的,只对代理服务器进行记录,是否知道用户信息取决于代理服务器是否告诉网站。

结论就是正向代理是一个位于客户端可服务端之间的服务器,从服务端获取客户端需要访问的内容通过代理服务器返回给客户端。

反向代理

当用户访问的内容在当前服务器上面不存在的时候,刚好该服务器设置了反向代理功能,又刚好在反向代理的服务器列表中的某一台服务器有这个页面,那么代理者会把这个内容返回给客户端。但是客户端却当做目标服务器上存在该页面。

通俗一点来讲,我们打某某客服电话的时候拨通的是一个固定的电话号码,但是服务台会帮我们转接至空闲的客服人员,而对于客户来讲,只要能帮我们解决问题就行了,哪个客服没有关系。

对于网站优化来讲,当面对成千上万的访问者时,反向代理会将请求分别分给给不同的服务器实现相同的功能,这样就能大大的减少服务器的负荷。

Nginx工具的作用以及使用方法

刚刚我们说到了反向代理实现服务器的负载均衡,现在我们来聊一下具体实现。

1. Nginx的安装

下载Nginx,解压,安装到指定目录。

lap@lap-KVM:~$ wget http://labfile.oss.aliyuncs.com/nginx-1.7.9.tar.gz
lap@lap-KVM:~$ tar zxvf nginx-1.7.9.tar.gz
lap@lap-KVM:~$ cd nginx-1.7.9
lap@lap-KVM:~/nginx-1.7.9$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
lap@lap-KVM:~/nginx-1.7.9$ # make && make install

切换到Nginx的安装目录下,启动Nginx。

lap@lap-KVM:~$ cd /usr/local/nginx/
lap@lap-KVM:/usr/local/nginx$ sudo ./nginx-1.7.9/objs/nginx

此时访问本机将会看到Nginx的欢迎界面。

安装好了Nginx之后我们开始具体的配置。

2. 配置nginx.conf文件

nginx.conf里提供了很多调节优化的地方,这里简述http模块的几个常用参数,详细配置请google一下。

简单介绍一下红色方框内的一些配置参数。

第一个方框内的是关于日志的设置:

  • log_format 定义日志格式

  • access_log 设置是否保存访问日志,设置为off可以降低磁盘IO而提升速度。

第二个方框内的是一些基本设置:

  • sendfile 指向sendfile()函数。sendfile()在磁盘和TCP端口(或者任意两个文件描述符)之间复制数据。sendfile()直接从磁盘上读取数据到操作系统缓冲,因此会更有效率。

  • tcp_nopush 配置nginx在一个包中发送全部的头文件,而不是一个一个发送。

  • tcp_nodelay 配置nginx不要缓存数据,快速发送小数据。

  • keepalive_timeout 指定了与客户端的keep-alive链接的超时时间。服务器会在这个时间后关闭链接。

第三个方框内的是关于压缩功能的设置:

  • gzip 打开压缩功能可以减少需要发送的数据的数量。

  • gzip_disable 为指定的客户端禁用 gzip 功能。

  • gzip_proxied 允许或禁止基于请求、响应的压缩。设置为any,就可以gzip所有的请求。

  • gzip_comp_level 设置了数据压缩的等级。等级可以是 1-9 的任意一个值,9 表示最慢但是最高比例的压缩。

  • gzip_types 设置进行 gzip 的类型。

接下来看一下http模块中的子模块server,以及server中的子模块location的配置:

其中:

  • listen 表示当前的代理服务器监听的端口,默认的是监听80端口。

  • server_name 表示监听到之后需要转到哪里去,localhost表示转到本地,也就是直接到nginx文件夹内。

  • location 表示匹配的路径。

  • root 表示到指定文件路径寻找文件,可用于静态文件。

  • index 表示默认主页,可以指定多个,按顺序查找。

  • deny和allow 是访问控制设置,禁止或允许某个IP或者某个IP段访问。也可以指定unix,允许socket的访问。

  • limit_rate_after 设置不限速传输的响应大小。当传输量大于此值时,超出部分将限速传送。

  • limit_rate 限制向客户端传送响应的速率限制。参数的单位是字节/秒,设置为0将关闭限速。比如图片中表示不限速部分为3m,超过了3m后限速为20k/s。

Nginx+Tomcat

在nginx.conf中新建一个location,用正则表达式将所有JSP的请求匹配到该location中:

  • proxy_set_header Host $host; 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP。

  • client_max_body_size 10m; 允许客户端请求的最大单文件字节数。

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

  • proxy_connect_timeout 90; Nginx跟后端服务器连接超时时间。

  • proxy_read_timeout 90; 连接成功后,后端服务器响应时间。

  • proxy_buffer_size 4k; 设置代理服务器保存用户头信息的缓冲区大小。

  • proxy_buffers 6 32k; proxy_buffers缓冲区。

  • proxy_busy_buffers_size 64k; 高负荷下缓冲大小。

  • proxy_temp_file_write_size 64k; 设定缓存文件夹大小。

对于静态文件的请求,我们也新建一个location,将常见图片、css、js等请求匹配到该location中:

配置非常简单,通过root关键字,将匹配到的请求都到tomcat/webapps/ROOT目录下直接查找。而expires 30d则表示使用expires缓存模块,缓存到客户端30天。如果未缓存这些文件,我们访问的Tomcat主页将会没有任何样式,这样就不美观了。

之后就到了最关键的负载均衡的配置的,我们在其中加入分摊载荷的服务器列表:

这样就能将用户的请求发送到不同的服务器上面了,另外也可以给不同的服务器添加不同的优先级,在server后面加上一个权重weight,权重越大表示访问到的机会越大,默认为1。

这样一个完整的反向代理就实现了。

posted @ 2018-04-18 12:28  钟离i  阅读(1603)  评论(0编辑  收藏  举报