Nginx的安装、反向代理、负载均衡及部署项目

news2024/10/5 19:20:55

Nginx

一、Nginx简介

Nginx称为:负载均衡器或 静态资源服务器:html,css,js,img

​ Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。自Nginx 发布来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

应用场景

  • http服务器:Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

  • 虚拟主机:可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。

  • 反向代理/负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

国内有企业有哪些在使用nginx服务器:

​ 国内使用Nginx的网站:新浪、网易、腾讯、CSDN、酷六、水木社区、豆瓣、六房间、小米等

​ 技术论坛:iteye,csdn,51cto,博客园…

二、Nginx安装配置

1、安装

我的nginx 文件目录是/etc/nginx 用文件方式启动 ./nginx -c /etc/nginx/nginx.conf

 -- 升级yum
yum update 

 -- 安装nginx源
yum localinstall http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
 
 -- 安装nginx
 yum install nginx
 
 --查看版本号进入到/usr/sbin
 ./nginx -v
  
 --启动
 ./nginx -c /etc/nginx/nginx.conf

 --关闭
./nginx -s stop
 
 --重加载命令 (不是重启,修改文件后,文件重新加载)
 ./nginx -s reload

安装完后,查看nginx版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TnELsvc3-1681126154195)(C:\Users\lps\AppData\Roaming\Typora\typora-user-images\image-20230410110544155.png)]

三、Nginx反向代理

正向代理,代理的是客户端 (常见的vpn)

反向代理,代理的服务器

反向代理服务器决定哪台服务器提供服务。

返回代理服务器不提供服务器。也是请求的转发。

案例:在nginx中通过反向代理访问两个tomcat服务器

  • 配置第一个tomcat

解压并重命名为tomcat8080

修改tomcat8080/webapps/ROOT/index.jsp

  • 配置第二个tomcat

解压并重命名为tomcat8081

  • 修改tomcat8088/webpps/ROOT/index.jsp

    在这里插入图片描述

  • 修改tomcat8081配置

  • 在这里插入图片描述

    修改server.xml
    <Server port="8006" shutdown="SHUTDOWN">把端口改为没有使用的端口,如8006。
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" /> 把端口改为没有是使用的端口,如8088。
    

    分别启动tomcat8080和tomcat8081

  • 配置nginx

    在nginx.conf(/etc/nginx/conf.d/default.conf)中配置upstream和proxy_pass

    	upstream tomcat {
    		server 127.0.0.1:8080;
    		server 127.0.0.1:8088;
    	 }
        server {
            listen       80;
            server_name  localhost;
            location / {
    			proxy_pass http://tomcat/;
            }
        }
    

四、Nginx负载均衡

如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。

负载均衡策略:转发特定服务器所遵循规格,nginx 的 upstream目前支持 五种方式的分配

1)、轮询(默认),默认:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 
2)、weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 (权重/加权),权重越高分配的请求越多,权重越低,请求越少。默认是都是1
3)、ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。  
4)、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。  
5)、url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

日常使用轮询或weight

1、轮循

修改/etc/nginx/conf.d/default.conf

在http节点里添加:
#定义负载均衡设备的 ip及设备状态 
upstream myServer{//要代理的服务器
	server 127.0.0.1:8080;
	server 127.0.0.1:9090;
}
server{
	listen 80;  //nginx服务器访问端口
	server_name localhost;  //nginx服务器地址
	
	location / {
		proxy_pass http://myServer/;//nginx代理的服务器地址
	}
}

上述的配置中有 2 点需要注意的:

  • upstream 配置项在 http 配置项内,但是在 server 配置项外,它们 3 者整体结构如下(不要写错地方了)

    http {
        # 它们两者平级
        server { ... }
        upstream { ...}
    }
    
  • 你所配置的 upstream 的 name 是自定义的,但是不要出现 - 号,否则会和 tomcat 有冲突。

    你持续访问 http://127.0.0.1 你会发现页面的内容会是交替出现 8080 端口和 9090 端口

2、加权轮循

加权轮循就是在轮循的基础上,为每个单点加上权值。权值越重的单点,承担的访问量自然也就越大。

upstream myServer{//要代理的服务器
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:9090 weight=2;
}

按照上述配置,9090 端口的服务将承担 2/3 的访问量,而 8080 端口则承担 1/3 的访问量。

将配置改为上述样子并重启 Nginx 后,再持续访问 http://127.0.0.1 你会发现 8080 端口和 9090 端口会以 1-2-1-2-... 的次数交替出现。

除了 weight 外,常见的状态参数还有:

配置方式说明
max_fails允许请求失败次数,默认为 1 。通常和下面的 fail_timeout 连用。
fail_timeout在经历了 max_fails 次失败后,暂停服务的时长。这段时间内,这台服务器 Nginx 不会请求这台 Server
backup预留的备份机器。它只有在其它非 backup 机器出现故障时或者忙碌的情况下,才会承担负载任务。
down表示当前的 server 不参与负载均衡。

例如:

upstream myServer {
    server 192.168.78.128 weight=1 max_fails=1 fail_timeout=30s;
    server 192.168.78.200 weight=2 max_fails=1 fail_timeout=30s;
    server 192.168.78.201 backup;
    server 192.168.78.210 down;
}

3、ip_hash 负载

ip_hash 方式的负载均衡,是将每个请求按照访问 IP 的 hash 结果分配,这样就可以使来自同一个 IP 的客户端固定访问一台 Web 服务器,从而就解决了 Session 共享问题。

upstream myServer {
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:9090;
}

使用上例配置后,你会发现无论你请求多少次 http://127.0.0.1 你所看到的端口始终是 80809090 中的某一个。

五、部署项目到Nginx

1、将vue脚手架项目打包

​ 运行:npm run build命令将vue cli项目打包。

​ 打包后的内容在项目的dist目录中,将dist目录复制到nginx的根目录中

2、修改nginx

启动nginx后即可访问前端项目

如果发布到nginx 上把vue.config.js 代理去掉
在这里插入图片描述

3、将服务端项目打为jar包后上传到linux

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dx6oij2G-1681126154196)(assets\image-20210907152833317.png)]

输入:java -jar 项目名  启动服务程序

4、使用nginx解决跨域问题

  • 修改前端所在nginx服务器配置
 server {
        listen       80;
        server_name  localhost;

        location / {
            root   dist;#配置vue项目的根目录
            index  index.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  • 修改nginx服务器配置文件

    
    server {
        listen       80;
        server_name  localhost;
    
         location / {
             root   dist;
             index  index.html;
         }
    
         location /api {
    	    	proxy_pass http://127.0.0.1:8088;
    	    	rewrite "^/api/(.*)$" /$1 break;
         }
     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
     
    }
    

5、 proxy_pass配置问题

  • 客户端所有以 http://localhost:80 开始的 URL 都会访问到 Nginx 。

    这和我们使用 Tomcat 时类似。 例如:

    当你访问 http://localhost:80/department/main.html 时,这代表着你向 Nginx 请求一个 html 页面,(结合其它相关配置)如果 Nginx 服务器上有的话,它会将这个 html 页面回复给你。

  • 客户端所有发往 Nginx 的请求中,URI 以 /api 开头的请求都是 Nginx『帮』别人收的。

    所有 URI 以 /api开头的请求都会被 Nginx 转给 http://127.0.0.1:8080/api 地址并等待它的回复。

    例如,你所发出的 http://localhost:80/api/departments/9527,会被 Nginx 发往 http://127.0.0.1:8080/api/departments/9527

Nginx 的转发配置规则

  1. 无论如何配置你配置 proxy_pass 的内容最后一定会『完全地』包含在转发、去往的路径中。
  2. 转发的规则和 proxy_pass 减去 http://ip:port 之后还有没与内容有关。最少的『有内容』的情况是仅有一个 /
    • 如果『有内容』(哪怕只有一个 /),转发路径是 proxy_pass + (path - location)
    • 如果『没内容』,转发路径就是 proxy_pass + path
  3. location 是否以 / 结尾问题不大,因为 Nginx 会认为 / 本身就是 location 的内容本身(的一部分)。

` 。

Nginx 的转发配置规则

  1. 无论如何配置你配置 proxy_pass 的内容最后一定会『完全地』包含在转发、去往的路径中。
  2. 转发的规则和 proxy_pass 减去 http://ip:port 之后还有没与内容有关。最少的『有内容』的情况是仅有一个 /
    • 如果『有内容』(哪怕只有一个 /),转发路径是 proxy_pass + (path - location)
    • 如果『没内容』,转发路径就是 proxy_pass + path
  3. location 是否以 / 结尾问题不大,因为 Nginx 会认为 / 本身就是 location 的内容本身(的一部分)。

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

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

相关文章

DOM(上)

DOM&#xff08;文档对象模型&#xff09;&#xff1a;处理可扩展标记语言(HTML或XML&#xff09;的标准编程接口&#xff0c;可以改变网页的内容、结构和样式。DOM树&#xff1a; …

大数据项目实战之数据仓库:电商数据仓库系统——第2章 数据仓库建模概述

第2章 数据仓库建模概述 2.1 数据仓库建模的意义 如果把数据看作图书馆里的书&#xff0c;我们希望看到它们在书架上分门别类地放置&#xff1b;如果把数据看作城市的建筑&#xff0c;我们希望城市规划布局合理&#xff1b;如果把数据看作电脑文件和文件夹&#xff0c;我们希…

CMake——从入门到百公里加速6.7s

目录 一、前言 二、HelloWorld 三、CMAKE 界面 3.1 gui正则表达式 3.2 GUI构建 四 关键字 4.1 add_library 4.2 add_subdirectory 4.3 add_executable 4.4 aux_source_directory 4.5 SET设置变量 4.6 INSTALL安装 4.7 ADD_LIBRARY 4.8 SET_TARGET_PROPERTIES 4.9…

[JavaEE]----Spring03

文章目录Spring_day031&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知…

测试-子查询及数据更新

测试-子查询及数据更新 目录测试-子查询及数据更新1、修改borrow表增加一列&#xff1b;修改日期数据&#xff08;两条语句完成&#xff09;题目代码题解2、 SQL更新&#xff1a;删除-删除“吴宾”的所有成绩记录题目代码3、SQL查询&#xff1a;查询没有被订购的商品题目代码4、…

CMake GUI工具使用 MinGW 64构建工程

系列文章目录 文章目录系列文章目录前言一、open Project是灰色&#xff1f;前言 CMake GUI 打开 CMake GUI。 在 “Where is the source code” 字段中&#xff0c;选择 Krita 源代码目录&#xff1a;E:/krita-dev/krita。 在 “Where to build the binaries” 字段中&#x…

9.Java面向对象----封装

Java面向对象—封装 面向对象简称 OO&#xff08;Object Oriented&#xff09;&#xff0c;20 世纪 80 年代以后&#xff0c;有了面向对象分析&#xff08;OOA&#xff09;、 面向对象设计&#xff08;OOD&#xff09;、面向对象程序设计&#xff08;OOP&#xff09;等新的系统…

Python 小型项目大全 26~30

二十六、斐波那契 原文&#xff1a;http://inventwithpython.com/bigbookpython/project26.html 斐波那契数列是一个著名的数学模式&#xff0c;被认为是 13 世纪意大利数学家斐波那契的杰作&#xff08;尽管其他人发现它的时间更早&#xff09;。序列从 0 和 1 开始&#xff0…

SAR ADC系列16:CDAC上机实践+作业

目录 作业和上机实践&#xff1a; 通过仿真确定桥接电容Ca的尺寸 采样技术和CDAC相结合 电容校正 为什么在100...0和011...1之间最差&#xff1a;电容的瓶颈在MSB上面 为什么INL最差也发生在中间Code 其他问题 频谱混叠 上级板采样网络时序问题 共模相关问题 关于V…

数据库----------约束、主键约束

目录 1.简介 1.概念 2.作用 3.分类 2.主键约束 1.概念 2.操作 1.添加单列主键 2.添加多列联合主键 3. 通过修改表结构添加主键 4.删除主键 1.简介 1.概念 约束英文: constraint 约束实际上就是表中数据的限制条件 2.作用 表在设计的时候加入约束的目的就是为了…

系统无损迁移、硬盘系统复制完整教程(常用于升级更大硬盘的场景)

阿酷TONY / 2023-4-15 / 长沙 这个教程的应用背景或场景是这样的&#xff1a; 原本使用的ThinkPad笔记本电脑是250G的SSD固态硬盘&#xff0c;使用了一两年后&#xff0c;空间不足了&#xff0c;这个时候需要换一块500G或更大的SSD硬盘&#xff0c;那么问题来了&#xff0c;通…

人员跌倒识别检测系统 yolov7

人员跌倒识别检测系统通过PythonYOLO7网络模型算法&#xff0c;人员跌倒识别检测算法模型对现场画面中有人员倒地摔倒行为实时分析预警&#xff0c;发现则立即抓拍存档告警同步提醒后台值班人员及时处理。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队…

(十二)排序算法-插入排序

1 基本介绍 1.1 概述 插入排序属于内部排序法&#xff0c;是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 插入排序的工作方式非常像人们排序一手扑克牌一样。开始时&#xff0c;我们的左手为空并且桌子上的牌面朝下。然后&#xff0c;…

Flink处理大型离线任务稳定性与性能调优探索

Apache Flink作为分布式处理引擎&#xff0c;用于对无界和有界数据流进行状态计算。其中实时任务用于处理无界数据流&#xff0c;离线任务用于处理有界数据。通过本文你将掌握让大型离线任务运行稳定的能力&#xff0c;同时能够通过分析离线任务运行特点&#xff0c;降低任务运…

150.网络安全渗透测试—[Cobalt Strike系列]—[DNS Beacon原理/实战测试]

我认为&#xff0c;无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感&#xff01;&#xff01;&#xff01; 文章目录一、DNS Beacon原理1、DNS Beacon简介2、DSN Beacon工作原理二、DNS Beacon实战测试1、实战测试前提2、实战测试过程一、DNS Beacon原理 1、…

大数据分析工具Power BI(三):导入数据操作介绍

导入数据操作介绍进入PowBI&#xff0c;弹出的如下页面也可以直接关闭&#xff0c;在Power BI中想要导入数据需要通过Power Query 编辑器&#xff0c;Power Query 主要用来清洗和整理数据。文件资料下载&#xff1a;https://download.csdn.net/download/xiaoweite1/87587711一、…

Wijmo JavaScript UI 5.20222.877 Crack

Wijmo使用更快、更灵活的 JavaScript UI 组件构建更好的应用程序 使用 Wijmo&#xff0c;利用我们引人注目的 UI 组件库&#xff0c;将更多时间花在应用程序的核心功能上。要求零依赖&#xff0c;Wijmo sports弹性网格&#xff0c;业内最好的 JavaScript 数据网格&#xff0c;提…

JVM性能调优方法和模板

每天 100 万次登陆请求&#xff0c;8G 内存该如何设置 JVM 参数&#xff0c;大概可以分为以下 8 个步骤 。 第一步、新系统上线如何规划容量&#xff1f; 1. 套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和 JVM 的内存参数&#xff0c;这个容量与资源规划并不…

关于 AI ,大家关心的问题

阅读本文大概需要 1.46 分钟。兄弟们&#xff0c;自从我跟曹老师准备合伙做一个 AI 生态的新社群之后&#xff0c;很多人问我最多的问题就是&#xff1a;AI 时代对我们普通人来说意味着什么&#xff1f;普通人又该如何去把握 AI 时代的机会&#xff1f;那么&#xff0c;今天&am…

nodejs+vue家庭菜谱食谱管理系统

目 录 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 1 1.1开发背景 1 1.2开发意义 1 1.3研究内容 1 第2章 主要技术和工具介绍 5 第3章 系统分析 4 3.1可行性分析 4 3.1.1经济可行性 4 3.1.2技术可行性 4 3.1.3操作可行性 4 3.2需求分…