【Linux】Nignx及负载均衡&动静分离

一、Nginx简介

1.1 什么是nginx?

Nginx(发音同"engine x")是一个高性能的反向代理和 Web 服务器软件,最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年,其源代码基于双条款 BSD 许可证发布,因其系统资源消耗低、运行稳定且具有高性能的并发处理能力等特性,Nginx 在互联网企业中得到广泛应用。

Nginx 是互联网上最受欢迎的开源 Web 服务器之一,它不仅提供了用于开发和交付的一整套应用技术,还是应用交付领域的开源领导者。Netcraft 公司 2019 年 7 月的统计数据表明,Nginx 为全球最繁忙网站中的 25.42% 提供了服务或代理,进一步扩大了其在主机域名领域的占有量,新增 5220 万个站点,总数达 4.4 亿个,市场占有率已经超过 Apache 4.89%。

得益于近几年云计算和微服务的快速发展,Nginx 因在其中发挥了自身优势而得到广泛应用,且有望在未来占有更多的市场份额。

2019 年 3 月,著名硬件负载均衡厂商 F5 宣布收购 Nginx,Nginx 成为 F5 的一部分。F5 表示,将加强对开源和 Nginx 应用平台的投资,致力于 Nginx 开源技术、开发人员和社区的发展,更大的投资将为开放源码计划注入新的活力,会主办更多的开放源码活动,并产生更多的开放源码内容。

百度解释:Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

总结:Nginx(engine x)是一个高性能的HTTP(解决C10k的问题)和反向代理服务器,能够实现动静分离技术(动态请求和静态请求),也是一个IMAP/POP3/SMTP服务器,

1.2、相关名词解释

HTTP:HTTP的服务器端实现程序有httpd、nginx等,而且nginx支持高并发!👉HTTP

反向代理:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

​​

SMTP:SMTP是一种提供可靠且有效的电子邮件传输的协议。(非重点)
Nginx官网https://nginx.org/

1.3、Nginx优势

nginx优势:高并发、I/O多路复用、epoll模型:异步且非阻塞

  • I/O多路复用(重点)

    • 理论:I是input输入,O是output输出,nginx的I/O多路复用,提高了服务器的吞吐能力,同一个线程里面,通过开关的方式,来同时传输多个I/O流,比如你去帮同事解决问题,A同事问你错误原因,B同时问你怎么安装的问题,你同时去帮他们解决;
    • 技术分类:select、poll、epoll(epoll模块实现I/O多路复用)
    • 特点:异步、非阻塞
      • 特点比喻:
      • 同步:比如AB石头剪刀布同时出为同步
      • 异步:石头剪刀布不同时出异步
      • 阻塞:去上厕所,不上完厕所不去干别的事
      • 非阻塞:厕所人多可以先去忙别的

    ​编辑​​

  • 时分多路复用:时分多路复用Time-Division Multiplexing,TDM )是一种数字或者模拟(较罕见)的多路复用技术,比如CPU的分时计算,你想去听歌或者看电影,CPU需要不断的切换去处理你的个人需求,把时间分成块,只不过处理的比较快,个人感觉不到。

  • 频分多路复用:频分多路复用,是在适于某种传输媒质的传输频带内,若干个频谱互不重叠的信号一并传输的方式,比如现在既可以打电话也可以上网,就是用到了此技术。

二. nginx的安装

1. 安装4个依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

​​
2. 下载并解压安装包

wget http://nginx.org/download/nginx-1.13.7.tar.gz

有安装包可以自行导入

进入存放nginx压缩包的文件夹进行解压

tar -xvf nginx-1.13.7.tar.gz

3.安装nginx

# 进入安装包目录
cd nginx-1.13.7

# 编译,执行配置: 考虑到后续安装ssl证书 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
# 安装
make && make install 
  1. 启动 nginx 服务

安装好的 nginx 服务在 /usr/local/nginx 下:

进入 /usr/local/nginx/sbin 目录下启动:

# 启动
./nginx

# 重启
./nginx -s reload

# 关闭
./nginx -s stop

# 或者,指定配置文件启动
./nginx -c /usr/local/nginx/conf/nginx.conf

查看nginx是否使用

下载插件

yum install -y lsof
lsof -i:80

由于没有80端口号所有使用命令开发80端口号

外部访问测试

三. tomcat负载均衡

准备Tomcat

#准备2个tomcat
cp -r apache-tomcat-8.5.20/ apache-tomcat-8.5.20_8081/

第2个修改的配置如下

  1. HTTP端口,默认8082(我这里更改过端口号所以),如下改为8081

2.远程停服务端口,默认8005,如下改为8006

3.AJP端口,默认8009,如下改,8010

启动Tomcat服务器访问

测试访问

http://192.168.195.139:8082/

http://192.168.195.139:8081/

配置nginx负载均衡

重启nginx配置文件

进入/sbin/重启

# 重启
./nginx -s reload

问题1:这个错误,意思是nginx配置的URL地址前缀不正确,后来重新看了下,发现的确是前缀没有写好

问题2:错误的原因:未指定nginx.conf的位置,启动时无法加载配置文件

进入logs目录,发现缺失了nginx.pid文件,配置文件加载了的情况下,是有这个文件的

解决办法:使用nginx -c的参数,指定配置文件的位置

#启动文件nginx在sbin目录中,配置文件在conf目录中
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

四、前端部署

1. 准备

前端项目打包之前需要增加以下的设置

在前端项目中 config文件下的index.js中要增加以下代码 :

assetsPublicPath: './',//修改后

如图:

在前端项目中 build文件下的 utils.js 中增加以下代码 :

// 解决icon路径加载错误

publicPath:'../../'

如图:

在前端项目的跟目录中,cmd打开命令窗口

输入命令 : npm run build ( 进行前端项目打包 )

如图 :

命令执行后,会出现如图中以下文件 dist

在 /usr/local/ 目录下创建一个文件夹,为mypor ,并且进入文件夹,之后将blog文件拖入mypor文件夹中

解压前端

yum install -y unzip

使用命令解压指定解压包

unzip blog.zip

2. 部署

输入命令 : cd /usr/local/nginx/conf/ 找到nginx.conf进行编辑

输入命令 : cd /usr/local/nginx/sbin/

输入命令 :./nginx -s reload 重启nginx

在将后端的war包 传入tomcat服务器中。

并且输入命令 : ./startup.sh (开启访问)

在到文件资源管理器中进入到 以下本地目录

C:\Windows\System32\drivers\etc

找到 hosts 文件进行修改IP的请求

相关推荐
yyycqupt25 分钟前
数据库连接池(二)
linux·数据库·c++·后端·单例模式
白八实1 小时前
ubuntu,rocky的安装和使用远程连接工具连接服务器
linux·服务器·ubuntu
夏天的味道٥1 小时前
Linux 安装 Git 服务器
linux·服务器·git
时光话1 小时前
第九章 使用Apache服务部署静态网站
linux·apache
花糖纸木2 小时前
进程控制(详解)
linux·服务器·c++
weixin_449310842 小时前
钉钉数据如何高效集成到金蝶云星空系统
linux·windows·钉钉
yuerZ62 小时前
anaconda pycharm 使用问题
linux·人工智能·pycharm
枫叶丹42 小时前
【在Linux世界中追寻伟大的One Piece】Reactor反应堆模式
linux·运维·服务器
Littlehero_1213 小时前
C语言中const char *字符进行切割实现
linux·c语言
誓约酱3 小时前
Linux系统常用指令
linux·运维·服务器·c++