正向代理css
正向代理也就是传说中的代理。node
好比咱们经常使用的FQ软件就是这个代理者。用户将请求发送至代理服务器,代理服务器向实际请求位置获取数据,而后打包发送至用户。nginx
从网站来说,网站是不知道请求者的信息的,只对代理服务器进行记录,是否知道用户信息取决于代理服务器是否告诉网站。web
结论就是正向代理是一个位于客户端可服务端之间的服务器,从服务端获取客户端须要访问的内容经过代理服务器返回给客户端。正则表达式
反向代理后端
当用户访问的内容在当前服务器上面不存在的时候,恰好该服务器设置了反向代理功能,又恰好在反向代理的服务器列表中的某一台服务器有这个页面,那么代理者会把这个内容返回给客户端。可是客户端却当作目标服务器上存在该页面。缓存
通俗一点来说,咱们打某某客服电话的时候拨通的是一个固定的电话号码,可是服务台会帮咱们转接至空闲的客服人员,而对于客户来说,只要能帮咱们解决问题就好了,哪一个客服没有关系。tomcat
对于网站优化来说,当面对成千上万的访问者时,反向代理会将请求分别分给给不一样的服务器实现相同的功能,这样就能大大的减小服务器的负荷。服务器
Nginx工具的做用以及使用方法app
刚刚咱们说到了反向代理实现服务器的负载均衡,如今咱们来聊一下具体实现。
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 表示最慢可是最高比例的压缩。
接下来看一下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。
这样一个完整的反向代理就实现了。