乌班图部署若依(nginx)

news2024/11/25 21:17:03

Nginx

什么是Nginx

Nginx(发音为"engine x")是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年,如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名,适用于静态和动态内容的服务,以及负载均衡和反向代理等多种应用场景。中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

官网地址:nginx news

Nginx优缺点

优点

  • 高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应。
  • 内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所以它是轻量级的(至于区别在哪?后面内容进行分析)。
  • 简单稳定:一般在使用 Nginx 中,针对单个域名配置文件配置接口,学习成本很低。相比 Apache 配置简单很多。
  • 模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。
  • 支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。
  • 低成本:Nginx可以做负载均衡,且Nginx是开源免费的,如果使用商业软件F5等硬件来做负载均衡,硬件成本比较高。
  • 支持多系统:Nginx是由C语言开发,适用于各个平台。

缺点

  • 动态处理能力较差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。
  • rewrite弱:虽然Nginx支持rewrite功能,但是相比于Apache来说,Apache比Nginx 的rewrite 强大。Apache 配置 rewrite 是通过项目下面的.htaccess 文件做配置还有就是打开 Apache 配置中的 rewrite 模块。而 Nginx 则需要在做域名配置时,对 rewrite 做配置。

正向代理与反向代理

正向代理

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过代理服务器访问的

例如:通过浏览器我们并不能直接访问谷歌,但是我们可以借助VPN来实现访问,其实这就是一个比较简单的正向代理的例子。

反向代理

客户端不需要任何配置就能访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外就一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。代理对象是服务端,不知道客户端是谁。

例如:当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理

快速入门

使用apt安装Nginx

apt search nginx

sudo apt -y install nginx

apt方式安装nginx,它的安装根目录为/etc/nginx。

查看nginx版本:

# 显示 nginx 的版本
nginx -v
# 显示 nginx 的版本,编译器版本和配置参数
nginx -V
  • nginx目录结构
    • /usr/sbin/nginx 服务文件
    • /etc/nginx 配置目录
    • /usr/share/nginx/html 发部项目
  • 服务名: nginx.service
  • ps -ef | grep nginx
  • apt install -y net-tools
  • netstat -tlnp 显示tcp协议进程pid端口使用情况

配置防火墙

将nginx默认访问端口80进入到防火墙中。

sudo ufw allow 80/tcp
sudo ufw reload

启动后效果

# 启动nginx服务
sudo systemctl start nginx
# 查询nginx服务启动状态
sudo systemctl status nginx

启动成功后,在浏览器中输入访问地址,效果如下:

redis安装

# 安装
apt install -y redis-server
# 查看安装结果redis-server.service
# 查看服务状态
systemctl status redis-server
# 查看redis安装信息
  • redis目录
    • /usr/bin/redis-server 服务命令
    • /etc/redis配置目录

若依项目部署发布

下载略


前端部署

当项目开发完毕,只需要运行一行命令就可以打包你的应用

# 打包正式环境
npm run build:prod

# 打包预发布环境
npm run build:stage

构建打包成功之后,会在根目录生成 文件夹,里面就是构建打包好的文件,通常是 、、 等静态文件。dist***.js***.cssindex.html

全部选打为一个dist.zip包

将原来的index.html删除

rm -rf index.html

--安装解压zip工具
apt install -y unzip

--解压上传的包
unzip dist.zip

我这个版本的问题他这个nginx不是可以直接加载的,所有可以把原来的nginx.conf换掉

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
		charset utf-8;

        location / {
            root   /usr/share/nginx/html; #设置虚拟主机的网站根目录
           try_files $uri $uri/ /index.html; #依次尝试资源
            index  index.html index.htm; #设置虚拟主机默认访问的网页
        }
		
		location /prod-api/ {
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://localhost:8080/; #设置代理转发地址
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

后端部署

将原来的jar包方式改为war包

排除springboot中自带的tomcat

<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>

配置日志储存位置

mkdir -p /home/ruoyi/logs

maven打包

在target中就会有一个war包

在乌班图中到tomcat的位置

cd /usr/local/apache-tomcat-8.5.20/webapps

--删除原来tomcat默认显示的页面,删除这个文件夹
rm -rf ROOT    

--创建ROOT文件夹
mkdir ROOT

将刚刚maven打包的文件解压,不要rouyi-admin目录,在重新选择这三个打包

将此文件夹上传到乌班图中tomcat的ROOT目录中解压

远程连接搭建数据库

http://192.168.21.138:80

动静分离

什么是Nginx动静分离

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过Nginx来分开。

配置

将SPA项目压缩并上传到/usr/nginx/html目录,再解压。

# 创建目录
sudo mkdir -p /usr/nginx/html
# 切换目录
cd /usr/nginx/html
# 上传SPA项目
sudo rz dist.zip
# 解压
sudo unzip dist.zip

修改nginx核心配置文件/etc/nginx/sites-enabled/default

# 切换目录
cd /etc/nginx/sites-enabled
# 备份
sudo cp default default.bak
# 编辑conf.d文件
sudo vim default

并添加SPA项目访问映射规则。

location / {
    #该句代码是为解决history路由不能跳转的问题,在vue-router官网有介绍 
    try_files $uri $uri/  /index.html;
}

最后,重启nginx服务并访问SPA项目。

# 重启nginx服务
sudo systemctl restart nginx

Nginx负载均衡

什么是负载均衡

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

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

我们首先想到的可能是升级服务器的配置,比如提高CPU执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

Nginx实现反向代理

修改nginx核心配置文件/etc/nginx/conf.d,配置nginx反向代理。

server {
    listen       80;
    server_name  www.zking.com;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location ^~ /edu/ {
    	proxy_pass http://127.0.0.1:8080/;
    }
    location ^~ /zki/ {
    	proxy_pass http://127.0.0.1:8081/;
    }
}

proxy_pass说明是动态请求,需要进行转发,比如代理到Tomcat上。

直接在浏览器中输入访问地址:http://www.zking.com/zki/ssm/ 。

切换到nginx日志目录,查看日志信息。

# 切换到nginx的日志目录
cd /var/log/nginx/
# 查看日志信息
sudo tail -f error.log

Nginx实现负载均衡

拷贝一个Tomcat,将其端口信息修改为8081,并将8081端口加入到防火墙允许访问规则中,然后分别启动这两台Tomcat。

修改nginx核心配置文件/etc/nginx/conf.d,配置nginx负载均衡

upstream tomcats{
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=2;
}

server {
    listen       80;
    server_name  www.zking.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location ^~ /edu/ {
        proxy_pass http://127.0.0.1:8080/;
    }

    location ^~ /api/ {
        proxy_pass http://tomcats/;
    }
}

第一,通过upstream来定义一组Tomcat,并指定负载策略(IPHASH、加权论调、最少连接),健康检查策略(Nginx可以监控这一组Tomcat的状态)等。 第二,将proxy_pass替换成upstream指定的值即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!

目录 Qwen2-VL: 更清晰地看世界Elasticsearch 再次拥抱开源&#xff01; Qwen2-VL: 更清晰地看世界 历经一年研发&#xff0c;阿里云推出新一代视觉语言模型 Qwen2-VL&#xff0c;支持多语言、长视频理解、视觉推理及智能体交互&#xff0c;性能超越 GPT-4o 等模型&#xff0c…

Oracle 常用函数大全

文章目录 一、空校验1. NVL 空校验2. COALESCE 空校验 二、排序1. ORDER BY 排序2. ORDER BY DECODE 指定值排序 三、排名1. RANK 排名2. DENSE RANK 密集排名 四、限制条数1. ROWNUM 限制2. FETCH 限制 五、字符串处理1. TO_CHAR 字符串转换2. || 字符串拼接3. CONCAT 字符串拼…

9.2C++

思维导图

咸鱼代写代码的都是什么人?真的能有收入么?

大家好&#xff0c;我是程序员鱼皮。看到一个帖子&#xff0c;是一位博主分享自己读研期间在咸鱼上靠帮别人代写代码接单的经历。由于内容过于真实&#xff0c;看完之后竟让我有些红温了。 我估计也有很多学编程的同学想自己接单帮别人代写代码&#xff0c;那代写代码真的能有收…

聚水潭ERP集成用友U8(用友U8主供应链)

源系统成集云目标系统 用友U8介绍 用友U8是一套企业级的解决方案&#xff0c;可满足不同的制造、商务模式下&#xff0c;不同运营模式下的企业经营管理。它全面集成了财务、生产制造及供应链的成熟应用&#xff0c;并延伸客户管理至客户关系管理&#xff08;CRM&#xff09;&…

支付宝开放平台-开发者社区——AI 日报「9 月 3 日」

1 逛完世界机器人大会&#xff0c;投资人说再也不想投人形机器人了 腾讯科技丨阅读原文 在2024 年世界机器人大会上&#xff0c;尽管人形机器人成为焦点&#xff0c;但一位长期关注该领域的投资人表示不再考虑投资。原因是目前人形机器人在工业和家用场景中表现不够突出&…

Error when attempting to add data source to Azure OpenAI api

题意&#xff1a;尝试向 Azure OpenAI API 添加数据源时出现错误 问题背景&#xff1a; My code is working for a call to Azure OpenAI when I dont have a datasource added. However, when I do add my datasource with the following parameters I get an error: 当我没…

AIGC时代从新手到高手:B端竞品分析实战案例与技巧分享

文章目录 1&#xff09;B端产品的信息获取困难2&#xff09;B端产品标准化程度低3&#xff09;需要具备业务知识1&#xff09;竞品画布就像一个菜谱&#xff0c;帮助新手快速上手2&#xff09;竞品画布相当于竞品分析报告的MVP&#xff08;最小可用产品&#xff09;&#xff0c…

新手如何下载微信视频号里面的短视频?推荐7种方法!

根据大数据分析我们发现还有不少用户不知道如何使用微信视频号下载视频&#xff1f;对此也发现不少小伙伴对内容阅读有所差异&#xff0c;对此专门为大家整理了图文以及视频相关教程&#xff0c;希望对大家有所帮助。 短视频下载 短视频下载一般包括市面上大部分的短视频内容为…

【BES2500x系列 -- RTX5操作系统】Battery模块 -- 创建电池检测定时器 --(十五)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

【Linux】进程状态(RSDT 阻塞 僵尸 孤儿)

目录 进程状态 进程状态的查看 R和S 运行状态 T/t 暂停状态 kill命令 D &#xff08;disk sleep&#xff09;状态、 Z 状态&#xff08;僵尸状态&#xff09; 孤儿状态 运行状态 阻塞状态 进程状态 一个进程通常有三种状态 ◉ 就绪状态&#xff08;Ready&#xff0…

Qt 去掉QDialog对话框的问号

QT 对话框的问号是什么&#xff1f; QDialog默认的window flag中包含了Qt::WindowContextHelpButtonHint,这个flag意思是在窗口上提供“上下文帮助”按钮 使用方式/调用方式 void QWidget::setWhatsThis(const QString &)比如&#xff1a; ui->lineEdit_1->setWh…

用亚马逊AI代码开发助手Amazon Q Developer开发应用(上篇)

快用人工智能帮程序员写代码&#xff01;今天小李哥就来介绍亚马逊推出的国际前沿人工智能AI代码开发助手Amazon Q Developer。目前该代码助手在Hugging Face代码生成权威测试集SWE-bench中排名第一&#xff0c;可以根据我们的需求生成整个代码项目&#xff0c;并可以帮助我们解…

C++入门基础,看这篇就足够了!

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 0.前言1. C的关键字2.命名空间2.1 命名空间的定…

vue 中计算属性可以接收参数

代码中的value就是接收的参数 计算属性要接收参数要写在返回的时候 computed: {isButtonDisabled() {return (value) > {const num parseInt(value);return isNaN(num) || num < 0}},},//计算属性aaa(){return (value) >{写逻辑return 返回值}} 使用 <el-butto…

【数学建模】国赛论文写作技巧教学——模型假设与变量说明

一、模型假设 1、内容要求 模型假设是建立数学模型中非常关键的一步&#xff0c;这会关系到模型的成败和优劣。所以&#xff0c;应该细致地分析实际问题&#xff0c;从大量的变量中筛选出最能表现问题本质的变量&#xff0c;并简化它们的关系。由于假设一般不是实际问题直接提…

2024Hvv漏洞汇总(128个POC)

2024Hvv漏洞整理&#xff08;128个POC&#xff09; ​&#xff08;网上漏洞零零散散&#xff09;下面是收集到的且有POC的漏洞整理合集&#xff0c;鄙人分了三种格式供各位提取&#xff0c;下面贴上目录与图片&#xff0c;由于字数有点大&#xff0c;各位请移步网盘自行提取。…

MySQL 基础命令

目录 一、MySQL简介 1.MySQL 的主要特点包括 2.MySQL 的主要用途包括&#xff1a; 二、MySQL 基础命令 1. 基本操作 1.1 进入 1.2 选择数据库 1.3 修改密码 1.4 所有命令后面都要加 “;” 2. 创建 2.1 创建数据库 2.2 创建数据表 2.3 常见字段 3. 修改/更新 3.1…

[数据集][目标检测]街道乱放广告牌检测数据集VOC+YOLO格式114张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;114 标注数量(xml文件个数)&#xff1a;114 标注数量(txt文件个数)&#xff1a;114 标注类别…

关于LLC知识15

右手螺旋定则&#xff1a;四指指向电流的方向&#xff0c;拇指的方向就是磁通方向 变压器副边会产生一个和原磁通方向相反的磁通来阻碍它变大 这样原边绕组的电感量会变小&#xff1a;U/Ldi/dt对应的电流会变大 电感量越大&#xff0c;抑制电流能量越强 原边开路时候&#x…