什么是Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
其特点是占有内存少,并发能力强,nginx的并发能力在同类型的网页服务器中表现较好,而且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。
Nginx作用
- 反向代理:为服务器做代理,接收客户端的的请求,并将服务器的响应转发给客户端
- 负载均衡:将负载合理地分配到各个服务器去处理
- 动静分离:将网站的动态与静态资源分开(如前后端分离),可以对静态文件做缓存,提高响应速度
使用场景:
- 一个项目存在于多台服务器,想要实现每一次用户请求都打在不同的服务器上,但又不想让用户感知到访问的是不同服务器
正向/反向代理
正向代理是指客户端通过代理服务器(如VPN)去接收和响应目标服务器的请求,代理的是客户端。用户对国外网站的访问就需要通过代理服务器来转发请求。
而反向代理就是服务器通过一个代理服务器去接受和返回客户端的请求,因为代理在是服务器端,所以叫反向代理。对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了。
总结:正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;而反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。
负载均衡
负载就是工作量(或者流量),将总的流量按照一定策略分配到各个主机上去的过程就是负载均衡。
反向代理实现的是:你访问一台服务器,它会转发给一台别的服务器;而负载均衡实现的是,你访问一台服务器,它会转发给多个服务器
中的一台,所以说负载均衡是基于反向代理的,只不过代理的是一群服务器。
动静分离
动静分离就是将前端的静态资源(html、css、JavaScript、图片等)与后端分开,或者说静态请求与动态请求分开,也就是实现前后端分离。
本质上就是以Nginx作为前端资源的服务器,后端正常用Tomcat作为服务器。访问前端静态资源时,直接通过Nginx所在服务器的文件系统找,访问后端动态资源时,才是通过tomcat所在服务器对应的接口去访问。
Nginx基本使用
启动
打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe
,回车
直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!
重载配置
nginx -t # 检查配置文件语法
nginx -s reload # 重新加载
关闭
输入nginx命令 nginx -s stop
(快速停止nginx) 或 nginx -s quit
(完整有序的停止nginx)
Nginx配置
在conf文件夹中的nginx.conf是nginx的核心配置文件
注意:修改配置文件后不会立即生效,必须执行nginx -s reload
才会生效
里面主要包括三块,分别是全局配置、事件配置和http配置,可以看到默认配置的nginx监听的端口为80
# 全局配置
#user nobody;
worker_processes 1;
# 事件配置
events {
worker_connections 1024;
}
# http配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# sever配置
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
...
}
}
Nginx实践
有一个应用,在两个不同的服务器中运行(或者同一台服务器不同端口),先要求使用Niginx做反向代理,使得用户访问本机的80端口时会自动映射到对应的两个主机应用上(反向代理),并且配置主机1的访问频率是主机2的两倍(负载均衡)。
步骤
分别用7090和7091号端口启动一个hello world的应用,访问这里两个url的结果都是得到一个hello world
1.在http配置内加入myhost的配置
# 配置myhost,负载均衡(默认是轮询策略)
upstream myhost{
server 127.0.0.1:7090 weight=2;
server 127.0.0.1:7091 weight=1;
}
2.再在80端口的sever中配置反向代理(代理上述定义的myhost),只需要添加一行proxy_pass即可
# sever配置
server {
listen 80;
server_name localhost;
location / {
#配置反向代理,转到myhost
proxy_pass http://myhost;
}
}
具体修改如下
cmd中进入nginx目录,输入nginx -s reload,重新加载配置文件
结果
此时,访问127.0.0.1或者localhost(默认是80端口),就会自动转到127.0.0.1:7090和127.0.0.1:7091了(实现反向代理),且访问两个程序的比例是1:2(实现负载均衡)