Nginx是一种Http和反向代理服务器,善于处理高并发和静态资源(而Tomcat作为web服务器,擅于处理动态资源)
和其它 web 服务器(tomcat、apache)相比,Nginx 有如下几个优势:
高并发 热部署 快 低功耗 可反向代理、负载均衡、处理静态资源文件
基于Linux环境
准备:安装gcc、pcre、zlib、openssl环境
安装:
下载nginx-1.12.2.tar.gz,解压,
生成makefile文件:./configure配置参数
编译并安装:
make
make install
启动 nginx:
cd /usr/local/nginx/sbin/
./nginx
Nginx默认端口号是80,即可以使用ip地址直接访问
注意Linux系统设置防火墙开放相应的端口号(设置开放的端口号 firewall-cmd --add-port=80/tcp --permanent)
nginx.conf 配置文件分为三部分:
从配置文件开始到 events 块之间的内容,主要设置一些影响 nginx 服务器整体运行的配置指令
如worker_processes 1; 表示支持的并发处理量
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 worker_ process 可以同时支持的最大连接数等。
http 块也可以包括 http 全局块、server 块。
① http 全局块 http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
② server 块 这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
指Nginx内部可以提供类似于主机的服务,即自身对外提供服务
在conf文件中配置server,如下
server {
listen 81;#指定监听端口号为:81
server_name localhost;
location / {
root html-1; #指定的是 nginx 安装目录下的某个文件夹的名字
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
按步骤进行测试
第二步:在 nginx 的安装目录下创建一个 html-1 文件夹,并设置 index.html 页面
第三步:重启 nginx :nginx -s reload
第四步:防火墙放开 81 端口号
第五步:在浏览器端测试:http://虚拟机ip地址:80、http://虚拟机ip地址:81
在conf文件中配置server,如下
server {
listen 80;
server_name www.teacher.com;#指定域名
location / {
root html; #指定的是 nginx 安装目录下的某个文件夹的名字
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
第二步:重新加载 nginx 的配置文件
第三步:配置 windows 的 c:/windows/system32/drivers/etc/hosts
虚拟机IP地址 www.teacher.com
第四步:测试,在浏览器输入:www.teacher.com
正向代理:客户端要访问局域网外的外网时需要通过访问代理服务器来实现。如某些。
正向代理是为客户端服务的,可以帮助客户端访问其无法访问到的资源。服务端不知道收到的访问是来自代理的访问还是真实客户端的访问。
反向代理:以代理服务器接收来自Internet的连接请求,并将请求转发给个服务器,然后将从服务器中获取的结果返回给请求的Internet客户端。
反向代理中反向代理服务器和内部服务器对外仅是一个服务器,体现为代理服务器的地址,隐藏了真实服务器的地址。
反向代理是为服务端服务的,可以帮助服务器接收来自客户端的请求,帮助服务器 做请求转发,负载均衡等。
目标:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中 nginx 监听端口为 9001,访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
方法:
1、准备两个Tomcat服务器,端口号分别为8081、8082
2、修改Nginx的conf配置文件的server部分如下
server {
listen 9001;#Nginx入口地址
server_name localhost;
location ~ /edu/ {#设置不同的地址拼接,表示进入不同的tomcat
proxy_pass http://127.0.0.1:8080;
index index.html;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
index index.html;
}
}
3、测试
在浏览器访问:
http://虚拟机IP地址/edu/a.html
http://虚拟机IP地址/vod/a.html
Location [=|~|~*|^~|@] 地址参数{...}
1、=:用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配
2、没有修饰符,必须以指定模式开始[模糊匹配],如‘/a/b’ 匹配路径以/a/b开头的路径,区分大小写
3、~:用于表示 uri 包含正则表达式,并且区分大小写
4、~*:用于表示 uri 包含正则表达式,并且不区分大小写
5、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求
当并发请求数量过高,单个服务器处理不了时,考虑增加服务器的数量,并将请求按一定方式分配由多个服务器处理,将负载分发到不同的服务器,即负载均衡。
目标:将一个客户端请求借助负载均衡分配给两个Tomcat服务器处理
配置好nginx.conf
upstream myserver {#称为上游服务器,即真实处理请求的业务服务器。
server 192.168.142.128:8080;
server 192.168.142.128:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;#:后端服务器连接的超时时间_发起握手等候响应超时时间
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1、轮询(默认)
按时间顺序逐一分配给不同的服务器,若有服务器宕机,则自动忽略。
2、weight
设置服务器的权重,权重越高被分配的次数就越多
3、fair(第三方)
按后台服务器的响应时间来分配请求,优先给响应时间短的服务器分配
4、说明
栗子:
upstream myServer{
server 192.168.142.128 down;
server 192.168.142.128 weight=2;
server 192.168.142.128 backup;
}
down:表示本服务器不参与负载
weight:表示权重
backup:表示备份机,只有在其它所有负载机都down掉的情况下参与负载
Nginx擅于处理静态资源,可以借由Nginx将动态资源和静态资源分配给不同的服务器处理,Nginx负责处理静态资源。
在Nginx配置文件中
location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
root /usr/share/nginx/html;#静态资源的存放路径
}
location ~ \.(jsp|do|action)$ {
proxy_pass http://myserver;#动态资源交由服务器处理
}
client向master发送请求,master再将请求发送给某个worker,一个master往往有一个或多个worker。master获得请求后,worker会通过争抢机制获取该请求,在进行反向代理用Tomcat完成具体操作。
1)可以使用nginx -s reload命令,利于Nginx来进行热部署操作;
2)每个worker是独立的进程,一个worker出现问题不会影响其它worker;
3)Nginx使用IO多路复用机制
静态资源:2个,不用访问Tomcat
动态资源:4个
Nginx 反向代理
Nginx 负载均衡
Nginx 动静分离
Nginx 原理及优化配置