走进Nginx
走进Nginx服务器
何为Nginx
Nginx
是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务- 一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
- 支持热部署,启动简单,其中master 管理进程与 worker 工作进程的分离设计,可以在不间断服务下对软件版本或者配置进行升级,可以做到7*24小时不间断运行
- 可以作为 Web 服务端、HTTP 反向代理、负载均衡和前端缓存服务等场景使用
- 使用 BSD 许可协议,免费使用,且可修改源码
- 占有内存少,并发能力强
Nginx的负载均衡
- 负载均衡(Load Balance)就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
- 缓解原先服务器的压力
- Nginx的方式
- 轮询法(默认方法):每个请求按时间顺序逐一分配到不同的后端服务器
- weight权重模式(加权轮询):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的
情况。- ip_hash:如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
- least_conn:根据最少连接方式,把请求优先分配给连接数量少的后端服务
- url_hash:根据url的分配方式,相同的url会被分配到同一个后端服务
- fair:根据响应时间方式,响应时间段的服务将会被优先分配
Nginx实现动静分离
原理:动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式
基本配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 server {
listen 10000;
server_name localhost;
#拦截后台请求
location / {
proxy_pass http:// 192.168.112.101:8888;
proxy_set_header X-Real-IP $remote_addr;
}
#拦截静态资源
#使用正则表达式匹配
#这些请求被定向到 /static/ 目录下。autoindex on; 指令允许 Nginx 自动为目录提供索引页面
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /static/;
autoindex on;
}
}
Nginx实现反向代理
基本介绍
- 正向代理:在本地搭建一个服务器来帮助我们去访问,像VPN 就是正向代理(浏览器中配置代理服务器)
- 反向代理:搭建一个过渡服务器,反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址,是在网络中将客户端的请求转发给后端服务器的技术(在服务器中配置代理服务器)
使用反向代理的好处
- 对客户端暴露的其实是一个 VIP,不是真实的 Web 服务器的 IP,隐藏了真实服务器的地址,保证后端服务安全
- 反向代理的对象是 Web 服务器端,代理服务器和 Web 服务端属于同一个LAN,对客户端来说是透明的
- 可以在多个后端服务器之间分配客户端请求,从而实现负载均衡
- 客户端不需要任何配置就可以访问
- 提高访问速度
配置方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 >... #全局块:配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等
>events { #events块:配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等
...
>}
>http #http块 可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等
>{
... #http全局块
server #server块 配置虚拟主机的相关参数,一个 http 中可以有多个 server
{
... #server全局块
location [PATTERN] #location块 配置请求的路由,以及各种页面的处理情况
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
>}反向代理的配置方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 server {
# 监听80端口
listen 80;
#服务器名称
server_name localhost;
# 设置字符集
#charset koi8-r;
# 设置访问日志的路径和格式
#access_log logs/host.access.log main;
# 请求根 URL (/) 时,Nginx 会从 html/sky 目录提供服务,并查找index.html作为默认页面
location / {
root html/sky;
index index.html index.htm;
}
# 自定义错误页面 显示 html/50x.html 页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# 反向代理,处理管理端发送的请求 将所有 /api/ 下的请求代理到 http://localhost:8080/admin/
location /api/ {
proxy_pass http://localhost:8080/admin/;
#proxy_pass http://webservers/admin/;
}
# 反向代理,处理用户端发送的请求
location /user/ {
proxy_pass http://webservers/user/;
}
# WebSocket
#配置了对 WebSocket 的支持。Nginx 会将所有 /ws/ 下的请求代理到 http://webservers/ws/,并设置必要的头部来支持 WebSocket 握手
location /ws/ {
proxy_pass http://webservers/ws/;
proxy_http_version 1.1;
proxy_read_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "$connection_upgrade";
}
}负载均衡的配置方式
1
2
3
4
5
6
7
8 # 定义了一个名为 webservers 的上游服务器组
# Nginx 将要代理请求到的后端服务器
#采用weight的方式
upstream webservers{
server 127.0.0.1:8080 weight=90 ;
#server 127.0.0.1:8088 weight=10 ;
}注意存放nginx.exe文件夹路径不能有中文
关闭Nginx
- nginx -s stop 快速停止,可能导致数据没有保存下来
- nginx -s quit 有序停止
- taskkill /F /IM nginx.exe > nul 可以直接在cmd界面使用,前两个要在nginx安装路径下
因为浏览器有缓存,关闭后记得刷新浏览器
Nginx和Tomcat的区别
- Tomcat是一个Java Servlet容器,运行在JVM之上,它可以处理HTTP请求并将其传递给Java应用程序进行处理,Tomcat提供了一个容器,用于加载、执行和管理Java Servlet、JavaServer Pages(JSP)和其他Java Web技术
- Nginx是一个高性能的Web服务器和反向代理服务器。它专注于处理静态资源和负载均衡,可以处理大量的并发连接和请求
- Tomcat需要配置Java环境才能运行,Nginx安装后直接就能运行
- 性能不同,Nginx更适用于处理静态资源,Tomcat处理动态资源更迅速,二者通常交互使用
- 当有多个Tomcat实例运行同一个应用程序时,Nginx可以作为负载均衡器,根据一定的策略将请求分发给不同的Tomcat实例,提高系统的可伸缩性和容错性,确保多个Tomcat实例之间均衡分担负载
- Nginx支持缓存静态资源,当客户端请求相同的资源时,直接返回资源的副本,减少网络传输时间和服务器负载,还可以对响应内容进行压缩,减小传输数据的数据量,提高网络传输效率
- 处理请求性能的不同,Nignx采用了事件驱动模型和异步处理方式,具有出色的性能和高并发处理能力
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 XiaoYu!
评论