1. nginx概述
1.1 序言
Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器,特点是占有内存少,并发能力强。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
1.2 Nginx常用功能
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,配合 tomcat,也能实现对java程序的支持。项目中,为了加快网站的解析速度,通常动态页面和静态页面分开,使用不同的服务器来解析,降低单个服务器的工作压力。这个被称为动静分离。
Http代理
- 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
- 反向代理:主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。在这个过程中,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。此时,请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色。
- 负载均衡:反向代理中,多个客户端给服务器发送的请求,nginx服务器接收请求到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。客户端发送的、nginx反向代理服务器接收到的请求数量,被称为负载量,请求数量按照一定的规则进行分发到不同的服务器处理的方式,就是一种均衡规则。所以,将服务器接收到的请求按照规则分发的过程,称为负载均衡。
通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向代理服务器,反向代理了多台真实的业务处理服务器。
动静分离
通常我们把静态资源直接放在 Nginx 服务器上,通过Nginx 直接返回静态资源。动态资源,如tomcat,通过 Nginx 把请求代理转发至tomcat服务器上,通过tomcat来处理动态请求。
2. nginx安装
Nginx官网提供了三个类型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版
2.1 window
安装
进入选择版本下载,下载完成后解压。解压后目录结构如下:
启动
方法一:直接双击nginx目录下的nginx.exe,即可启动nginx。
方法二:cmd进入nginx目录,输入nginx回车。
访问
打开浏览器,http://localhost,返回如下界面,表示启动成功。
停止
推荐方法一:命令行进入nginx根目录,执行如下命令,停止服务器。
方法二:打开window任务管理器,找到所有的nginx进程,点击借宿进程。
2.2 Linux安装
环境准备
安装nginx
下载或上传nginx源码包
编译安装
配置firewall
启动、检查、停止
3.1 配置文件说明
nginx是一个功能非常强大的web服务器加反向代理服务器,使用最多的三个核心功能是反向代理、负载均衡和静态服务器。这三个功能的使用,都和nginx的配置密切相关。
nginx的配置信息主要集中在nginx.conf文件中,Nginx默认的配置文件是在安装目录下的 conf目录下,后续对 Nginx的使用基本上都是对此配置文件进行相应的修改。配置文件中,“#”开头的表示注释内容。修改过nginx.conf配置文件,需要重启Nginx服务。
默认的nginx.conf文件结构如下:
配置选项可以分为一下几个模块:
- main:用于进行nginx全局信息的配置,一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events:用于nginx工作模式的配置。配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http:用于进行http协议信息的一些配置。可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server:用于进行服务器访问信息的配置,配置虚拟主机的相关参数,一个http中可以有多个server。
- location:用于进行访问路由的配置,配置请求的路由,以及各种页面的处理情况。
3.2 动态和静态分离
一般来说,动态资源其实就是指那些后台资源,如tomcat、spring boot等程序,而静态资源就是指HTML,JavaScript,CSS,img等文件。动静分离的意思,就是将就是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,后台应用服务器只负责动态数据请求,降低对后台应用服务器的压力。
实现方法
目前比较流行的做法是将静态资源部署在Nginx上,而Web应用服务器只处理动态数据请求。
配置Nginx动静分离
修改nginx.conf配置,配置location块,其中第一location个负责处理后台请求,第二个location负责处理静态资源。
在Nginx 下创建static目录,将图片,js, css 等文件夹拷贝到该目录下
启动tomcat,重启Nginx,使用命令: ./nginx -s reload 重新启动Nginx,浏览器访问http://localhost:9000/
3.3 代理与反向代理