神器 Nginx 的学习手册 ( 建议收藏 )

神器 Nginx 的学习手册 ( 建议收藏 )转载:DevOps技术栈Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺


d7bfd15913bca56a3cd667a134b1bb81.png



转载:DevOps技术栈

Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。

Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数。

01

Nginx 知识网结构图

Nginx 的知识网结构图如下:

e73696533ff2ce2a3d58085a65592943.png

02反向代理

正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。

3bd61825ce63aee2242971fec6a7af8f.png

反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。

此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

afa77fda1aedd6277a17452664e38cb8.png

03

负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端。

普通请求和响应过程如下图:

9ab7324aaae4abb3bc9d3a6d2f977e00.png

但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。

我们首先想到的是升级服务器配置,可以由于摩尔定律的日益失效,单纯从硬件提升性能已经逐渐不可取了,怎么解决这种需求呢?

我们可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。

图解负载均衡:

d74a2d1d00f2bfe2447ebab9315fac8b.png

假设有 15 个请求发送到代理服务器,那么由代理服务器根据服务器数量,平均分配,每个服务器处理 5 个请求,这个过程就叫做负载均衡。

04动静分离

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力。

动静分离之前的状态:

9d8ff95562944b8b698fcf9344c117c7.png

动静分离之后:

d6ed84d321657cd8273ed979c3b64c88.png

05Nginx安装

Nginx 如何在 Linux 安装

参考链接:

https://blog.csdn.net/yujing1314/article/details/97267369

Nginx 常用命令

查看版本:

./nginx -v

启动:

./nginx

关闭(有两种方式,推荐使用 ./nginx -s quit):

./nginx -s stop
 ./nginx -s quit

重新加载 Nginx 配置:

./nginx -s reload

Nginx 的配置文件

配置文件分三部分组成:

①全局块

从配置文件开始到 events 块之间,主要是设置一些影响 Nginx 服务器整体运行的配置指令。

并发处理服务的配置,值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。

8f3cbe0131bd40b9e4df23d73a5cceb6.png

②events 块

影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 workprocess 下的网络连接进行序列化,是否允许同时接收多个网络连接等等。

支持的最大连接数:

0f56f0f91b1cb47c9391e90a1528ff1b.png

③HTTP 块

诸如反向代理和负载均衡都在此配置。

location[ = | ~ | ~* | ^~] url{

}

location 指令说明,该语法用来匹配 url,语法如上:

  • =:用于不含正则表达式的 url 前,要求字符串与 url 严格匹配,匹配成功就停止向下搜索并处理请求。

  • ~:用于表示 url 包含正则表达式,并且区分大小写。

  • ~*:用于表示 url 包含正则表达式,并且不区分大小写。

  • ^~:用于不含正则表达式的 url 前,要求 Nginx 服务器找到表示 url 和字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再匹配。

  • 如果有 url 包含正则表达式,不需要有 ~ 开头标识。

06反向代理实战

①配置反向代理

目的:在浏览器地址栏输入地址 www.123.com 跳转 Linux 系统 Tomcat 主页面。

②具体实现

先配置 Tomcat,因为比较简单,此处不再赘叙,并在 Windows 访问:

69689acafe0742cd587edb81c2ae88cf.png

具体流程如下图:

2e266f116cd359f786d23e7ef8b4a6cf.png

修改之前:

65d5c52f02c0da87656c05032f0b334b.png

配置如下:

23680964bbdea95f418fafe9941030a2.png

再次访问:

63aa8bfae1011bf48ba3b50d124d5a99.png

③反向代理 2

目标:

  • 访问 http://192.168.25.132:9001/edu/ 直接跳转到 192.168.25.132:8080

  • 访问 http://192.168.25.132:9001/vod/ 直接跳转到 192.168.25.132:8081

准备:配置两个 Tomcat,端口分别为 8080 和 8081,都可以访问,端口修改配置文件即可。

2b65182beb4b538d1dae9b335ffff4d0.png

8e88022c6f18631ac1abd22b3dd4a31a.png

新建文件内容分别添加 8080!!!和 8081!!!

af450b1c19e6de4e68cc012b418b21f3.png

2cb7100f34313bc3ce68a5ea2d4231fe.png

响应如下图:

b50037c61a839ec05592c400e31488cf.png

995d6d215f74196e88ef828761d767f5.png

具体配置如下:

c3179843044d985f70701d24cdd20329.png

重新加载 Nginx:

./nginx -s reload

访问:

bd2fa71a0468a92384adb176b44359ff.png

9bc5232e5bf39bfe22e6e1e2080958c8.png

实现了同一个端口代理,通过 edu 和 vod 路径的切换显示不同的页面。

反向代理小结

第一个例子:浏览器访问 www.123.com,由 host 文件解析出服务器 ip 地址
192.168.25.132 www.123.com。

然后默认访问 80 端口,而通过 Nginx 监听 80 端口代理到本地的 8080 端口上,从而实现了访问 www.123.com,最终转发到 tomcat 8080 上去。

第二个例子:

  • 访问 http://192.168.25.132:9001/edu/ 直接跳转到 192.168.25.132:8080

  • 访问 http://192.168.25.132:9001/vod/ 直接跳转到 192.168.25.132:8081

实际上就是通过 Nginx 监听 9001 端口,然后通过正则表达式选择转发到 8080 还是 8081 的 Tomcat 上去。

07

负载均衡实战

①修改 nginx.conf,如下图:

cbccada38b8059ee6ae59457bd9b197c.png

1b3b4bd2f882db8453cc2cf150e695b7.png

②重启 Nginx:

./nginx -s reload

③在 8081 的 Tomcat 的 webapps 文件夹下新建 edu 文件夹和 a.html 文件,填写内容为 8081!!!!

④在地址栏回车,就会分发到不同的 Tomcat 服务器上:

e7ab8b528049b8341d51285fa987a668.png

ec54bf021876e46d8cf38357a0ec68b1.png

负载均衡方式如下:

  • 轮询(默认)。

  • weight,代表权,权越高优先级越高。

  • fair,按后端服务器的响应时间来分配请求,相应时间短的优先分配。

  • ip_hash,每个请求按照访问 ip 的 hash 结果分配,这样每一个访客固定的访问一个后端服务器,可以解决 Session 的问题。

f8a3470e075ab0eb13ab0c4b2d17d189.png

55e845eb88d35130f9a1acc7a7db79f4.png

436e73e54dba2aa1e88e5236d025f224.png

08

动静分离实战

什么是动静分离?把动态请求和静态请求分开,不是讲动态页面和静态页面物理分离,可以理解为 Nginx 处理静态页面,Tomcat 处理动态页面。

动静分离大致分为两种:

  • 纯粹将静态文件独立成单独域名放在独立的服务器上,也是目前主流方案。

  • 将动态跟静态文件混合在一起发布,通过 Nginx 分开。

动静分离图析:

25fb878f4b3a563528e2d4380b9e8596.png

实战准备,准备静态文件:

3f8340b310741c07f9d06a9da20a2378.png

0d47c1be225c8d0e0f63be7e38d703e0.png

配置 Nginx,如下图:

edfefd4f458947348176ee1d389b73c8.png

Nginx 高可用

如果 Nginx 出现问题:

e549e77805fa92070451f87583a10c1d.png

解决办法:

df18bb3659427ce2fd5ef21829c05ab6.png

前期准备:

  • 两台 Nginx 服务器

  • 安装 Keepalived

  • 虚拟 ip

安装 Keepalived:

[root@192 usr]# yum install keepalived -y
[root@192 usr]# rpm -q -a keepalived
keepalived-1.3.5-16.el7.x86_64

修改配置文件:

[root@192 keepalived]# cd /etc/keepalived
[root@192 keepalived]# vi keepalived.conf

分别将如下配置文件复制粘贴,覆盖掉 keepalived.conf,虚拟 ip 为 192.168.25.50。

对应主机 ip 需要修改的是:

  • smtp_server 192.168.25.147(主)smtp_server 192.168.25.147(备)

  • state MASTER(主) state BACKUP(备)

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.25.147
   smtp_connect_timeout 30
   router_id LVS_DEVEL # 访问的主机地址
}

vrrp_script chk_nginx {
  script "/usr/local/src/nginx_check.sh"  # 检测文件的地址
  interval 2   # 检测脚本执行的间隔
  weight 2   # 权重
}

vrrp_instance VI_1 {
    state BACKUP    # 主机MASTER、备机BACKUP    
    interface ens33   # 网卡
    virtual_router_id 51 # 同一组需一致
    priority 90  # 访问优先级,主机值较大,备机较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.25.50  # 虚拟ip
    }
}

启动代码如下:

[root@192 sbin]# systemctl start keepalived.service

30008e59dd26a6a104d8061a3a39fb2a.png

访问虚拟 ip 成功:

48f32d22957cbc7df97b3625c36ca0ec.png

关闭主机 147 的 Nginx 和 Keepalived,发现仍然可以访问。

原理解析

379e2e771a3ed1c122af9f37e2ec0e71.png

如下图,就是启动了一个 master,一个 worker,master 是管理员,worker是具体工作的进程。

7052692f570194071c3a0fb8aa4608e1.png

worker 如何工作?如下图:

a8328b61ed48aa51c3f7d71e4d354889.png

小结

worker 数应该和 CPU 数相等;一个 master 多个 worker 可以使用热部署,同时 worker 是独立的,一个挂了不会影响其他的。

【热门内容】
再见 count(*)

Spring Boot中自带的这些工具类,你用过几个?

int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了!

张朝阳建议年轻人不要努力过头
阿里不让多表join?我偏要!
为什么 Java 中“1000==1000”为false?

300多本程序员经典技术书籍高清PDF
加我微信,备注:资料

扫码备注:资料,自动获取
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192232.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月16日 下午5:43
下一篇 2026年1月16日 下午6:15


相关推荐

  • rust-vmm 学习

    rust-vmm 学习V0.1.0featurebaseknowledge:ArchitectureoftheKernel-basedVirtualMachine(KVM)用rust-vmm打造未来的虚拟化架构KVM内核文档阅读笔记<MasteringKVMVirtualization>:第二章KVM内部原理UsingtheKVMAPI(org)…

    2026年2月14日
    5
  • 1. OpenClaw小龙虾+飞书本地部署:小白10分钟搞定,保姆级教程

    1. OpenClaw小龙虾+飞书本地部署:小白10分钟搞定,保姆级教程

    2026年3月17日
    2
  • Linux安装tomcat详细教程

    Linux安装tomcat详细教程Tomcat 是 Apache 软件基金会 ApacheSoftwa 的 Jakarta 项目中的一个核心项目 由 Apache Sun 和其他一些公司及个人共同开发而成 由于有了 Sun 的参与和支持 最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现 Tomcat5 支持最新的 Servlet2 4 和 JSP2 0 规范 因为 Tomcat 技术先进 性能稳定 而且免费 因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可 成为比较流行的 Web 应用服务器

    2026年3月18日
    0
  • CloudFlare免费CDN加速使用方法

    CloudFlare免费CDN加速使用方法前言 cloudflare 是一家国外的 CDN 加速服务商 还是很有名气的 提供免费和付费的加速和网站保护服务 百度云加速的国外节点就是和 cloudflare 合作使用的 cloudflare 的节点 cloudflare 提供了不同类型的套餐 即使是免费用户 cloudflare 提供的功能也是很全面的 对于访客来自于国外的网站很不错 对于访客来自于国内的网站加速效果有限 有些甚至会变慢 不过其安全防护功能也很不错 添加网站官网 www cloudflare com 使用

    2026年3月18日
    2
  • java和python的就业前景_Java和Python哪个发展前景好?老男孩教育

    java和python的就业前景_Java和Python哪个发展前景好?老男孩教育对薪资不满意 担心自己以后不好找工作 不少人都会选择参加培训 转行 IT 行业 当然很多想要转行 IT 的人 都会犹豫选择哪门编程语言学习比较好 Python Java 大数据作为比较热门行业技术 不少人都很疑惑转行学 Java Python 大数据哪个好 今天老男孩 IT 教育北京校区的老师为大家详细的说说吧 Java Java 可以从事 web 开发 大数据开发 安卓开发 服务器开发 桌面开发以及游戏开发等 Ja

    2026年3月20日
    2
  • RewriteCond和13个mod_rewrite应用举例Apache伪静态

    RewriteCond和13个mod_rewrite应用举例Apache伪静态1.给子域名加www标记RewriteCond%{HTTP_HOST}^([a-z.]+)?example.com$[NC]RewriteCond%{HTTP_HOST}!^www.[NC]RewriteRule.?http://www.xample.com%{REQUEST_URI}[R=301,L]这个规则抓取二级域名的%1变量,如果不是以www开始,

    2022年6月6日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号