将Vue项目经行打包
第一步:找到vue.config.js文件输入: publicPath:process.env.NODE_ENV==="production"?'./':'/',
第二步:经行打包
下面的 npm run bulid,开始运行;上线的时候使用的就是编译之后的文件
如上图,运行成功,文件目录会出现以下内容
通过右键找到“在外部资源打开”,找到文件路径把它复制出来,单独的粘在桌面上
注:生产环境使用的就是dist文件夹
然后打开文件夹中的index.html的文件,开始访问路径,要是页面一片空白,建议修改一下
路由模式:修改路径:src/router/index.js
Nginx简介
Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。
Apache的发展时期很长,而且是毫无争议的世界第一大服务器。但是它是不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。
然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。
由于:
Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊~)
Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
这些优秀的设计带来的是极大的稳定性
所以,Nginx火了!
Nginx用武之地
Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能 力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
nginx作为服务器
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。
nginx可以7*24小时不间断运行;
关于代理
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;
此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。
正向代理
正向代理:客户明确知道自己访问的网站是什么 (隐藏客户端的信息,客户端和代理服务器是一起的)
反向代理
反向代理:客户访问一个网站 (隐藏服务端信息,代理服务器和服务端是一起的)
正向代理和反向代理两者的区别
Nginx安装和配置
第一步,去Ngin官网下载tar包
第二步:安装依赖:yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
第三步:我是在usr/yym文件夹下新建了一个nginx文件夹,并把nginx压缩包放在了目录下
mkdir nginx 新建文件夹
加压 文件 tar -zxvf nginx-1.15.10.tar.gz
第四步: cd nginx-1.15.10进入到nginx的文件夹下面 进行默认的配置 ./configure
第五步:menk && menk install
第六步:whereis nginx
第七步:启动nginx
cd sbin
./nginx
注:访问之前一定要关闭防火墙或者放行指定的端口号
当前nginx,默认的端口号是80
192.168.146.8
显示这个页面,就是代码安装nginx成功。
关闭nginx: ./nginx -s stop 相当于windows系统的强制关机;(粗暴)
重新加载:./nginx -s reload;
退出nginx:./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。(优雅)
查询nginx进程:
ps aux|grep -v grep|grep nginx
ps -ef|grep -v grep|grep nginx
反向代理实例
配置反向代理配置(找到nginx.conf配置文件路径/usr/local/nginx)
进入到conf文件下nginx.conf
查看文件默认配置内容: vim nginx.conf
不想让nginx访问vue原来的页面
先查看是否有原来的页面 find / -name index.html(原来页面的名字);
让nginx访问dist文件(反向代理文件)
第一步:先把文件放在liunx操作系统路径中,随便放,我这里放在了/usr/yym文件下
第二步:配置nginx.conf文件内容
vim nginx.conf 找到默认配置
修改为
重新加载一下nginx /usr/local/nginx/sbin/nginx -s reload
如上图,显示的一样就是已经加载过了nginx;
再次访问 ,如下图,反向代理成功
反向代理SpringBoot后端代码
第一步:查看进程 ps -ef|grep qy172
如果有其他的文件使用杀死进程命令杀死 kill -9 进程号
ls
第二步:更改配置之前先启动 cd /usr/yym文件夹下 nohup java -jar qy172.jar &
再把日志打印出来 tail -f nohup.out
测试一下看是否可以访问
确保可以访问的话,然后在配置反向代理文件
注:当我们访问nginx服务器的时候 直接指向的是 192.168.146.8:8080 这个地址
然后在重新加载一下 /usr/local/nginx/sbin/nginx -s reload,再次访问,成功
反向代理———根据不同的路径访问不同的服务器
第一步:切换到/usr/yym文件下执行 nohup java -jar qy172.jar &
第二步:启动nginx cd/usr/local/nginx/sbin文件下 ./nginx
第三步:vim nginx.conf进行配置代理
当访问nginx默认路径时,代理服务器会带你进入win项目172.16.2.55;
当访问test路径时,代理服务器会带你进入liunx项目192.168.146.8;
uri表达式(注意:nginx版本过低,可能使用不了uri表达式)
~:用于表示 uri 包含正则表达式,并且区分大小写。
~*:用于表示 uri 包含正则表达式,并且不区分大小写。
= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。
^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。 注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
Nginx负载均衡配置
准备工作:
第一步:准备三台服务器,一台运行nginx,另外两台运行项目(8,9,10服务器名字);
第二步:把克隆的两台服务器IP修改一下
使用命令vim /etc/sysconfig/network-scripts/ifcfg-ens32,
服务器8的ip: 192.168.146.8
服务器9的ip: 192.168.146.9
服务器10的ip: 192.168.146.10
我们让9,10服务器跑系统,8服务器跑nginx
第三步:验证两个服务是否可以正常启动;
9,10服务器分别运行 cd /usr/yym nohup java -jar qy172.jar &
执行完,测试访问是否可以获取到数据
第四步:配置nginx (注:配置在8服务器里配置 /usr/local/nginx/conf 修改nginx.conf文件)
轮询
配置upstream算法(默认算法使用的是轮询)
轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
cd /usr/local/nginx/conf/nginx.conf
使用:upstream 上游 这里的反向代理服务器代理的就是另外两台服务器上的项目
配置完,重新启动一下nginx /usr/local/nginx/sbin ./nginx
为了方便区分,我这里将10服务器的项目里的200修改为了2000;
负载均衡遵循“轮循规则”
weight
weight 代表权重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况
upstream zhao{
server 192.168.146.9:8080 weight=10;
server 192.168.146.10:8080 weight=100;
}
权重配置完以后,重新加载一下,/usr/local/nginx/sbin/nginx -s reload
这里9服务器的访问权重几率为90%,10服务器的访问权重几率为10%;
ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题;(注:根据访问的ip地址给你算出来一个hash值,根据这个hash值分配一个服务器,下次来的时候还是这个固定的服务器)
upstream aaa{
ip_hash;
server 192.168.159.34:8080 ;
server 192.168.159.34:8081 ;
}
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream aaa{
fair;
server 192.168.159.34:8080 ;
server 192.168.159.34:8081 ;
}
动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
静态资源访问
配置静态资源
约定:静态资源 location / {}
访问 192.168.146.8/dist
要是不想使用dist路径,可以使用alias起别名
location /有特殊意义的名字{
将root替换成 alias /usr/yym/dist;
index index.html;
}
alias 给/usr/yym/dist目录起了一个别名zhao;
cd /usr/local/nginx/conf/nginx.conf
配置完成以后重新加载一下 /usr/local/nginx/sbin/nginx -s reload
配置nginx开机启动
切换到/lib/systemd/system/目录,创建nginx.service文件vim nginx.service
cd /lib/systemd/system/
vim nginx.service
添加内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
或者可以执行 vim /lib/systemd/system/nginx.service命令
配置完成以后,先查看一下nginx的进程 ps -ef|grep nginx
使用kill -9 端口号名 把上面两个进程先杀死掉
然后在使用systemctl start nginx
systemctl status nginx
然后在nginx进程
软件装配架构图
重启nginx:systemctl restart nginx
启动nginx:systemctl start nginx
查看nginx状态:systemctl status nginx
keepalived-2.0.10
准备工作:
主服务器 08
备用服务器 11
主要目的是让nginx一直处于可用的状态
第一种安装keepalived-2.0.10
第一步:在 /usr/java文件夹下新建一个 keepailved文件夹;
第二步:执行命令:yum -y install keepalived
第三步:安装完成以后,执行 systemctl start keepalived启动
第四步:查看启动状态 systemctl status keepalived
如上图,安装成功;
配置keepalived
注意:启动keepalived之前一定要启动nginx
启动nginx systemctl start nginx
查看nginx状态 systemctl status nginx
启动keepalived systemctl start keepalived
查看keepalived状态 systemctl status keepalived
第一步:vim 进入到/etc/keepalived/keepalived.conf里 配置主服务器文件
将下面的文件代码复制到文件里面,只需要修改划红框的代码
global_defs {
notification_email {
123@qq.com #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from master@qq.com #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.146.8 #定义路由标识信息,相同局域网唯一
}
vrrp_script aaa {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小2
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens32 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.146.8 #发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 51 # 虚拟路由编号,主从要一直0-255
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
aaa #(调用检测脚本)
}
virtual_ipaddress {
192.168.146.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
配置备用服务器的文件,方法是一样的
global_defs {
notification_email {
123@qq.com #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from master@qq.com #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.146.11 #定义路由标识信息,相同局域网唯一
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小5
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens32 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.146.11 #发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 51 # 虚拟路由编号,主从要一直
priority 98 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.146.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
主服务器和备用服务器都需要配置 vim /usr/local/src/check_nginx_pid.sh
注:以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
配置完成以后,提高一下文件的权限 chmod 777 /usr/local/src/check_nginx_pid.sh
第二种安装keepalived-2.0.10
第一步:在 /usr/java下面创建keepalived文件夹
下载keepalived安装包
wget https://www.keepalived.org/software/keepalived-2.0.10.tar.gz
[root@localhost keepalived]# tar -zxvf keepalived-2.0.10.tar.gz
[root@localhost keepalived]#
yum -y install popt-devel libnl libnl-devel libnfnetlink-devel net-tools
[root@localhost ~]# cd keepalived-2.0.10
[root@localhost keepalived-2.0.10]#
./configure --prefix=/usr/java/keepalived
安装执行
[root@localhost keepalived-2.0.10]# make && make install
第二步:配置keepalived
将脚本文件复制到/etc/init.d 文件夹里
cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
在etc里面创建 一个文件夹 keepalived
mkdir /etc/keepalived
将配置文件拷贝到刚才创建的文件夹里面
cp /usr/java/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
将keepalived的文件信息存放到/etc/sysconfig/里面
cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
将可执行的文件存放到sbin文件夹里面
cp /usr/java/keepalived/sbin/keepalived /usr/sbin/
启动验证keepalived
[root@os004 keepalived-2.0.10]# systemctl start keepalived 启动
[root@os004 keepalived-2.0.10]# systemctl status keepalived 查看状态
[root@os004 keepalived-2.0.10]# ps -aux|grep keepalived
shutdown -h now 关机(关闭虚拟机)
测试keepalived的抢占模式
修改192.168.146.8的配置文件/etc/keepalived/keepalived.conf
重启keepalived服务,通过ssh 192.168.146.100(虚拟ip)发现虚拟ip在主机192.168.146.8上。
关闭192.168.146.8机器,通过ssh 192.168.146.100(虚拟ip)发现虚拟ip切换到备机192.168.146.11上。
启动主机192.168.146.8,通过ssh 192.168.146.100(虚拟ip)发现虚拟ip切换回主机192.168.146.8上。
访问http://192.168.146.100/一切正常http://192.168.153.222/qy73nginx/一切正常,无论是tomcat机器还是nginx都避免了单点故障。
启动nginx服务报错:
systemctl start nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
查看nginx状态和错误信息:systemctl status nginx.service
● nginx.service - nginx Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 五 2024-01-19 18:51:15 CST; 3min 48s ago Process: 24529 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (code=exited, status=1/FAILURE) 1月 19 18:51:15 localhost.localdomain systemd[1]: Starting nginx... 1月 19 18:51:15 localhost.localdomain nginx[24529]: nginx: [emerg] unknown directive "lial" in /usr/local/nginx/conf/nginx.conf:70 1月 19 18:51:15 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1 1月 19 18:51:15 localhost.localdomain systemd[1]: Failed to start nginx. 1月 19 18:51:15 localhost.localdomain systemd[1]: Unit nginx.service entered failed state. 1月 19 18:51:15 localhost.localdomain systemd[1]: nginx.service failed.
解决方法:进入到/usr/local/nginx/confo/nginx.conf文件下找到70号,把70行的代码删除就可以了