首页 文章 正文 Nginx-核心配置 2024-03-22 1166阅读 0评论 一、静态代理 Nginx静态代理是指,将所有的静态资源,例如,css、js、html、jpg等资源存放到Nginx服务器,而不存放在应用服务器Tomcat中。当客户端发出的请求是对这些静态资源的请求时,Nginx直接将这些静态资源响应给客户端,而无需提交给应用服务器处理。这样就减轻了应用服务器的压力。 1.1 扩展名拦截 1.1.1 修改配置文件 1.1.2 创建目录 在/opt目录中创建statics目录。 在/opt/statics目录中创建css、js、images目录。 1.1.3 上传图片 向/opt/statics/images目录中上传一个图片car.jpg。 1.1.4 重启Nginx 1.1.5 浏览器访问 1.2 目录名拦截 1.2.1 修改配置文件 1.2.2 重启Nginx 1.2.3 浏览器访问 二、页面压缩 2.1 浏览器常见的压缩协议 浏览器中最常见的压缩算法有: deflate:是一种过时的压缩算法,是huffman编码的一种加强。 gzip:是目前大多数浏览器都支持的一种压缩算法,是对deflate的改进。 sdch:谷歌开发的一种压缩算法,一种全新的压缩思路。deflate与gzip的的压缩思想是,修改传输数据的编码格式以达到减少体量的目的,其最终传输的数据并没有减少。而sdch压缩算法的思想是,让冗余的数据仅出现一次,其最终传输的数据减少了。 Zopfli:谷歌开发的一种压缩算法,Deflate 压缩算法的改进。比标准的gzip -9要小 3%-8%,但压缩用时是gzip -9的80多倍。 br:即Brotli,谷歌开发的一种压缩算法,是一种全新的数据格式。与Zopfli相比,压缩率能够降低20%-26%。Brotli -1有着与Gzip -9相近的压缩比和更快的压缩解压速度。 2.2 常用设置 A、gzip on; 开启gzip压缩,默认为off。 B、gzip_min_length 5k; 指定最小启用压缩的文件大小。 C、gzip_comp_level 4; 指定压缩级别,取值为1-9,数字越大,压缩比越高,但压缩所用时间会越长。默认为1,建议使用4。 D、gzip_buffers 4 16k; “4”表示的是缓存颗粒数量,而“16k”表示的是缓存颗粒大小。 E、gzip_vary on; 开启动态压缩。默认值off。 F、gzip_types mimeType; 通过MIME类型来指定要压缩的文件类型。默认值text/html。 三、反向代理 通过在location{}中添加通行代理proxy_pass可以指定当前Nginx所要代理的真正服务器。 3.1 反向代理tomcat服务器 3.1.1 定义一个web工程 定义一个Maven Web工程,并命名为webdemo。其包含一个JSP页面,及一个Servlet。 A、修改pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!-- Servlet依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- JSP依赖 --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.2.1</version> <scope>provided</scope> </dependency> B、定义index.jsp <%@ page contentType="text/html;charset=UTF-8" %> <html> <head> <title>webdemo</title> </head> <body>Nginx World Welcome You! <br> Nginx Addr = ${pageContext.request.remoteAddr} <br> Tomcat Addr = ${pageContext.request.localAddr} <br> </body> </html> C、定义SomServlet @WebServlet("/some") public class SomeServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter writer = response.getWriter(); writer.println("NginxIp = " + request.getRemoteAddr()); writer.println("TomcatIp = " + request.getLocalAddr()); } } 3.1.2 克隆一台Tomcat并部署工程 克隆一台Tomcat主机,将webdemo工程打包后部署到Tomcat的webapps/ROOT目录中。当然,需要首先将ROOT目录中的文件全部删除。 3.1.3 修改Nginx配置文件 3.1.4 访问 通过Nginx反向代理访问Tomcat主机的index.jsp页面。 3.2 反向代理的属性设置 3.2.1 client_max_body_size 100k; Nginx允许客户端请求的单文件最大大小,单位字节。 3.2.2 client_body_buffer_size 80k; Nginx为客户端请求设置的缓存大小。 3.2.3 proxy_buffering on 开启从后端被代理服务器的响应内容缓冲区。默认值on。 3.2.4 proxy_buffers 4 8k; 该指令用于设置缓冲区的数量与大小。从被代理的后端服务器取得的响应内容,会缓存到这里。 3.2.5 proxy_busy_buffers_size 16k; 高负荷下缓存大小,其默认值为一般为单个proxy_buffers的2倍。 3.2.6 proxy_connect_timeout 60s; Nginx跟后端服务器连接超时时间。默认60秒。 3.2.6 proxy_read_timeout 60s; Nginx发出请求后等待后端服务器响应的最长时限。默认60秒。 四、负载均衡 4.1 负载均衡简介 负载均衡,Load Balancing,就是将对请求的处理分摊到多个操作单元上进行。 4.2 负载均衡分类 4.2.1 软硬件分类 A、硬件负载均衡 硬件负载均衡器的性能稳定,且有生产厂商作为专业的服务团队。但其成本很高,一台硬件负载均衡器的价格一般都在十几万到几十万,甚至上百万。知名的负载均衡器有F5、Array、深信服、梭子鱼等。 B、软件负载均衡 软件负载均衡成本几乎为零,基本都是开源软件。例如,LVS、HAProxy、Nginx等。 4.3 负载均衡工作层分类 负载均衡就其所工作的OSI层次,在生产应用层面分为两类:七层负载均衡与四层负载均衡。当然,为四层负载均衡提供更为底层实现的,还有三层负载均衡与二层负载均衡。 七层负载均衡:应用层,基于HTTP协议,通过虚拟URL将请求分配到真实服务器。一般应用于B/S架构系统。Nginx就是七层负载均衡。 四层负载均衡:传输层,基于TCP协议,通过“虚拟IP + 端口号” 将请求分配到真实服务器。一般应用于C /S架构系统。例如,LVS、F5、Nginx Plus都属于四层负载均衡。 三层负载均衡:网络层,基于IP协议,通过虚拟IP将请求分配到真实服务器。 二层负载均衡:链路层,基于虚拟MAC地址将请求分配到真实服务器。 4.4 负载均衡的实现 4.4.1 总体规划 该机群包含一台Nginx服务器,两台Tomcat服务器。将前面打过包的web工程直接部署到两台Tomcat主机上。然后,在Nginx服务器上设置对这两台Tomcat主机的负载均衡。 4.4.2 配置Nginx主机 A、修改Nginx主机的hosts文件 B、修改Nginx配置文件 4.4.3 Nginx负载均衡策略 Nginx内置了三种负载均衡策略,另外,其还支持第三方的负载均衡。而每种负载均衡主机根据负载均衡策略的不同,又可设置很多性能相关的属性。 4.4.3.1 轮询 默认的负载均衡策略,其是按照各个主机的权重比例依次进行请求分配的。 backup:表示当前服务器为备用服务器。 down:表示当前服务器永久停机。 fail_ timeout:表示当前主机被Nginx认定为停机的最长失联时间,默认为10秒。常与max_fails联合使用。 max_fails:表示在fail_timeout时间内最多允许的失败次数。 4.4.3.2 ip_hash 指定负载均衡器按照基于客户端IP的分配方式。 对于该策略需要注意以下几点: 在nginx1.3.1版本之前,该策略中不能指定weight属性。 该策略不能与backup同时使用。 此策略适合有状态服务,比如session。 当有服务器宕机,必须手动指定down属性,否则请求仍是会落到该服务器。 4.4.3.3 least_conn 把请求转发给连接数最少的服务器。 4.4.4 Nginx Plux的四层负载均衡实现 同样是修改nginx.conf文件,添加一个stream模块,其与events、http等模块同级。在其中配置upstream{}与server{}模块。此时需要注意,通行代理配置在server{}中(前面的是配置在server模块的location模块中),且不能再是http://开头的了,因为其负载均衡协议不再是HTTP协议了。 五、动静分离 5.1 Nginx动静分离的实现 下面要搭建的Nginx环境中有三台Nginx主机:一台用于完成负载均衡,两台用于存放项目中的静态资源。另外,还包含前面的两台Tomcat主机。 5.1.1 修改前面的web工程 在前面的web工程的jsp页面中添加一个背景图片,无需在工程中添加images目录及bj.jpg图片。因为这些都是要存放在Nginx静态代理服务器的。 5.1.2 修改前面的web工程 A、修改nginx.conf B、添加静态资源 在/opt/statics下创建images目录,并将bj.jpg存放到该目录。 5.1.3 再复制一台Nginx服务器 以nginxOS1为母机,再复制一台Nginx主机,并命名为nginxOS2。完成以下配置: 修改主机名:/etc/hostname 修改网络配置:/etc/sysconfig/network-scripts/ifcfg-ens33 5.1.4 修改负载均衡Nginx主机 在nginxOS主机的nginx.conf文件中添加静态代理的负载均衡配置。 5.2 项目的启动 5.2.1 启动两台Tomcat服务器 5.2.2 启动两台Nginx静态代理服务器 5.2.3 启动Nginx负载均衡服务器 六、虚拟主机 6.1 总体规划 现在很多生活服务类网络平台都具有这样的功能:不同城市的用户可以打开不同城市专属的站点。用户首先打开的是平台总的站点,然后允许用户切换到不同的城市。其实,不同的城市都是一个不同的站点。 这里我们要实现的功能是为平台总站点,北京、上海两个城市站点分别创建一个虚拟主机。每一个虚拟主机都具有两台Tomcat的负载均衡主机。由于有三个站点,所以共需六台Tomcat主机,克隆Tomcat主机太过麻烦,所以这六台Tomcat我们使用一台主机实现。在一台主机中安装六个Tomcat,它们分别使用六个不同的端口号。 首先要创建一个web工程,其中就一个index.jsp页面,页面除了显示当前城市外,还要显示城市切换的超链接。为了能够再明显的区分出当前访问的Tomcat,再在页面中显示出当前工程所在的主机名与端口号。 6.2 创建三个web工程 直接复制前面的web工程,每个工程都仅需一个JSP即可。最终打为三个war包。三个工程的JSP页面内容各不相同。 6.3 总站 注意,JSP文件的EL中通过request获取的是localAddr与localPort。 <%@ page contentType="text/html;charset=UTF-8"%> <html> <head> <title>entry68</title> </head> <body> 这是68平台总站 <br> 站点切换: <a href="http://bj.68.com">北京</a> <a href="http://sh.68.com">上海</a> <br> <hr> Tomcat Addr = ${pageContext.request.localAddr} <br> Tomcat Port = ${pageContext.request.localPort} <br> </body> </html> 6.4 北京站 <%@ page contentType="text/html;charset=UTF-8"%> <html> <head> <title>bj68</title> </head> <body> 这是68平台【北京】站 <br> 站点切换: <a href="http://www.68.com">总站</a> <a href="http://sh.68.com">上海</a> <br> <hr> Tomcat Addr = ${pageContext.request.localAddr} <br> Tomcat Port = ${pageContext.request.localPort} <br> </body> </html> 6.4 上海站 <%@ page contentType="text/html;charset=UTF-8"%> <html> <head> <title>sh68</title> </head> <body> 这是68平台【上海】站 <br> 站点切换: <a href="http://www.68.com">总站</a> <a href="http://bj.68.com">北京</a> <br> <hr> Tomcat Addr = ${pageContext.request.localAddr} <br> Tomcat Port = ${pageContext.request.localPort} <br> </body> </html> 6.5 修改hosts文件 6.6 配置Tomcat主机 6.6.1 项目部署规划 第一、二台Tomcat中部署着entry68.war包; 第三、四台Tomcat中部署着bj68.war包; 第五、六台Tomcat中部署着sh68.war包。 6.6.2 配置Tomcat主机 打开Tomcat安装目录下的conf/server.xml文件,修改三处端口号。 6.7 配置虚拟主机 6.7.1 直接配置到nginx.conf中 修改nginx的核心配置文件,在其中添加如下内容: 6.7.2 单独配置到一个文件 A、定义vhosts.conf文件 B、修改nginx.conf文件
发表评论
还没有评论,来说两句吧...