Nginx的安装使用----反向代理服务器

article/2025/8/22 5:14:13

Nginx

 代理服务器--使用比较多的为nginx代理服务器。

1.什么是nginx

tomcat是web应用服务器。

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。开源软件,服务器软件.能够支持高达 50,000 个并发连接数的响应,

并发: 再同一时间段内处理请求的个数。tomcat并发能力大概1000. nginx的并发50000.

1.反向代理web服务器。

2.并发能力高

3.占用内存小

4.负载均衡

现在由哪些企业正在使用nginx?

1. 京东  2.淘宝 3.腾讯 4. 新浪 5.网易等

2.为什么使用nginx

在传统的Web项目中,并发量小,用户使用的少。

所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。

而在互联网项目下,因单个tomcat默认并发量有限制。如果请求量过大,会产生如下问题:

Tomcat8 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
操作系统对于进程中的线程数有一定的限制:
Windows 每个进程中的线程数不允许超过 2000
Linux 每个进程中的线程数不允许超过 1000
(在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。)
​
Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。
maxThreads="150" 最大并发数 
minSpareThreads="10"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

3.如何使用nginx

(1)安装nginx软件所需的依赖插件

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

(2)把我们的nginx安装包上传到linux中并解压,推荐可以把它放在  /usr/local下

安装包nginx官网下载

nginx – nginxhttps://trac.nginx.org/nginx/browser

 我上传到了/usr/local,解压该压缩包

tar -zxvf nginx-1.18.0.tar.gz

(3)创建一个目录作为nginx的安装目录

 mkdir /usr/nginx

(4)进入nginx的解压目录

 (5)设置nginx的安装路径为上面创建的文件夹   /usr/nginx

 ./configure --prefix=/usr/nginx

(6) 编译并安装

make    ----编译源码
make install ---安装编译后的代码

 (7)进入/usr/nginx

 这就安装成功了

nginx的目录结构

conf: nginx配置文件的目录 很重要

html: nginx的一些静态资源的目录。

logs: nginx的日志文件。

sbin: nginx的脚本目录 启动nginx的脚本

​ ./nginx ----启动nginx

​ ./nginx -s stop ---关闭nginx

​ ./nginx -s reload --重新加载配置文件

(7)启动nginx

./nginx 开启nginx

./nginx -s stop 关闭nginx

./nginx -s reload 重新加载配置文件---修改完配置文件后使用该命令

如何查看进程

(8) 访问nginx服务器

 如果无法访问是因为防火墙没有放行或者关闭

//firewall-cmd --list-port       查看放行了哪些端口号

firewall-cmd --add-port=80/tcp --zone=public --permanent         放行指定端口号


systemctl stop firewalld                         关闭防火墙----慎重【关闭】 开启还会启动

 4. nginx配置文件的介绍

配置代理的服务信息介绍:

 我们可以配置多个端口号 

首先我们在/usr/nginx安装目录下创建一个文件夹my,里面创建一个html页面,然后我们对比下面的代码写了个81端口号

 我们可以通过nginx所在服务器的ip+81端口号就能访问到我们刚刚配置的代理服务器了

5.nginx三大核心功能---重点 

1.反向代理

2.负载均衡

3.动静分离

5.1.反向代理

正向代理: 该服务器代理的是客户端,对于服务器来说,不知道真实客户端的ip。比如: 翻墙软件。

反向代理: 该服务器代理的是服务端,对于客户端来说,不知道访问的真实服务器地址。 比如: nginx

 

它反向代理了我们的项目所在的服务器ip,用户访问时访问的是nginx的代理服务器的ip,然后代理服务器负责访问我们的真实项目所在的服务器的ip,这样可以不让用户知道我们真实的服务器的ip,一定程度上也起到了保护作用 

如何使用nginx完成反向代理

 准备一个真实项目和Tomcat服务器 并把项目部署到Tomcat.---springboot项目

 在根目录下创建一个project目录,把项目放进里面

mkdir /project

 启动真实项目

java -jar qy151-springboot---------.jar

修改nginx配置文件

cd /usr/nginx/conf

vi nginx.conf

 重新加载nginx

 cd ../sbin

./nginx -s reload

访问nginx所在服务器ip+nginx监听的端口号 

5.2.负载均衡

在公司里我们的项目会被运行在好几台服务器上,这些服务器运行的都是同一个东西,为的就是提高并发量。用户访问Nginx代理服务器以后,由代理服务器负责分配用户到底访问哪一个服务器,它会根据我们分配的策略来进行合理分配(默认不设置会进行轮询分配,轮询分配可以理解为发牌员的发牌)。

(1)启动两台项目

 (2)修改nginx配置文件

 (3)重新加载配置文件

 cd /usr/nginx/sbin

./nginx -s reload

 (4)访问

根据上面的配置,我们创建了一个集群,名称为ban151,集群中一共由两个服务,相当于两台服务器(因为只有一台电脑,所以只能用端口号的不同来区别这两个服务器,真正使用时这些服务器的ip都不相同)。然后让我们的nginx直接代理这个集群。用户访问nginx的代理ip:81,nginx就会以轮询的方式分配服务器。

 nginx负载均衡的策略:

默认负载均衡的策略为轮询策略。

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2)、weight    值越大权重越大

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)、ip_hash

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

4)、fair(第三方)

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

5)、url_hash(第三方)

 负载均衡的策略不能同时使用,只能根据需求任选其一。

5.3.动静分离

动静分离就是让静态资源由我们的nginx来管理,这样当我们修改静态资源时,只是修改了代理服务器上的内容,而不是每一个真实服务器的内容都要修改,这样大大节省了效率。

先来一个springboot项目

【1】pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.wzh</groupId><artifactId>springboot-nginx1</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-nginx1</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!--thymeleaf模板引擎理解为:jsp模板引擎是一样的,只是springboot内置的tomcat不支持jsp模板引擎,默认支持的模板引擎是thymeleaf--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

 【2】创建controller层

【3】 在templates下创建index.html

 【4】启动项目并访问http://localhost:8080/index

 可以正常访问,templates目录下的html文件不能直接访问

 

明明请求了一个路径,为什么发了三个请求,步骤如下图 

(1)为什么要使用动静分离

解决: 

 

搭建集群,当添加新的静态资源时,就不需要在每个服务器上修改,只需要修改nginx上的静态资源。 

 (2)如何使用nginx搭建动静分离

将springboot项目中的static文件提取出来,将不带static文件的项目打包成jar,放到linux中(一般都放在 /project中),然后将static文件放到nginx的根目录下(/usr/nginx/)。然后修改我们的配置文件:

 

配置了一个server:

把项目中的静态资源static放入nginx安装路径下,删除项目中的静态资源 

 

重新加载配置文件

./nginx -s reload

运行项目(java -jar 工程),如果我们直接访问真实服务器地址,静态资源无法加载,但是通过nginx代理服务器访问项目,静态资源就可以加载。这就实现了我们的动静分离的原则。

 我们发现直接访问8080静态资源无法加载

 如果访问nginx的81可以加载静态资源

这里涉及到springboot框架的一个小知识点,spingboot中的tomcat不支持jsp模板引擎,springboot中templates包下的页面只能使用html,也只能被重定向到该页面,无法通过浏览器直接访问。

6. nginx的高可用

我们的Nginx虽然承受并发的能力非常强,但不排除由意外情况导致我们的nginx会宕机。为了尽可能使我们的项目正常运行,这时我们可以启用备胎计划,也就是再搞一台服务器当做代理服务器,这两台代理服务器之间有一个主从关系。平常我们的备胎代理服务器不会使用,当标记为MASTER的主代理服务器宕机了,我们的被标记为BACKUP的从代理服务器就可以成功上位,充当MASTER的位置实现代理功能,当MASTER的代理服务器正常运行以后,BACKYUP就退居二线,不再使用。
 

 准备条件:

1.192.168.19.151----> master主节点
2.192.168.18.152---->backup从节点

检查:

两台linux是否可以正常启动nginx

两台linux都安装keepalived

yum -y install keepalived  安装keepalived
rpm -q -a keepalived 查看本地是否安装keepalived

默认keepalived的配置文件在    /etc/keepalived下

把keepalive的配置文件覆盖---两台机器  

global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_ server 192.168.19.152smtp_connect_timeout 30router_id 192.168.19.152
}vrrp_script chk_http_ port {script "/usr/local/src/nginx_check.sh"interval 2weight 2
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth type PASSauth pass 1111}virtual_ipaddress { 192.168.19.50}
}

 把启动脚本放入指定目录 /usr/local/src/        文件名为nginx_check.sh

#!/bin/bash
# 检查是否开启nginx
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then# 开启nginx nginx脚本所在的路径/usr/nginx/sbin/nginxsleep 2# 开启nginx失败 则执行关闭keepalivedif [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenpkill -9 keepalivedfi
fi

 或

 这个需要先安装killall

yum install psmisc   

然后启动nginx和keepalived

./nginx 
systemctl start keepalived

测试     这里的地址为虚拟ip的地址。

 测试从代理服务器 有没有起到作用

主nginx的nginx关闭:

nginx -s stop
systemctl stop keepalived

当我们MASTER机的nginx stop运行,脚本启动,同时关闭了我们的keepalived。

这时负责代理功能的服务器就是标记为BACKUP的我们的从服务器。当主代理服务器正常运行时,负责代理功能的服务器就是标记为MASTER的代理服务器,BACKUP服务器不负责代理。

注意:你在keepalived.conf里面配置的是你的nginx代理服务器的ip,每个代理服务器的nginx.conf里面配置的都是真实项目所在服务器的ip集群。两台代理服务器的nginx.conf配置文件的内容应当相同,毕竟代理的都是相同的服务器。
 


http://chatgpt.dhexx.cn/article/Xxbl0mVB.shtml

相关文章

nginx反向代理服务器的工作原理

最近有打算研读nginx源代码&#xff0c;看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡。所以搜罗了一些关于反向代理服务器的内容&#xff0c;整理综合。 一 概述 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的…

反向代理proxy

跨域&#xff1a;跨域是指一个域下的文档或脚本试图去请求另一个域下的资源&#xff0c;基于同源策略的保护&#xff0c;请求不到数据 同源策略&#xff1a;同协议&#xff0c;同端口&#xff0c;同域名 如果缺少了同源策略&#xff0c;浏览器很容易受到XSS、CSFR等攻击 跨域…

Nginx反向代理服务器(请求转发)

1.Nginx反向代理服务器作用&#xff1a;请求转发&#xff0c;负载均衡&#xff0c;动静分离 2.什么是请求转发 在大型的项目中&#xff0c;因为服务器在后端较多&#xff0c;访问端口不同&#xff0c;此时就会造成请求每个服务器路径的端口号不一致&#xff0c;这样不方便跳转…

Nginx----web服务器,反向代理服务器

一. Nginx介绍 1.1 什么是Nginx&#xff1f; Nginx是一款轻量级的Web 服务器、反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;中国大陆使用nginx网站用户有&#xff1a;百度、京东、新浪、网易、腾讯、淘宝等。 1.2 Nginx的特点 反向代…

代理服务器和反向代理服务器详解

通常我们所说的代理&#xff0c;都是指的客户端向外界发起请求时&#xff0c;并不是直接与目标服务器连接&#xff0c;而是经过一个代理服务器&#xff0c;将所有请求交给代理服务器&#xff0c;由它去负责连接外界的目标服务器&#xff0c;同时从服务器返回的数据&#xff0c;…

Nginx搭建反向代理服务器

前面学了web资源服务器的搭建&#xff0c;这篇博文就总结一下如何搭建反向代理服务器。 为什么需要反向代理 反向代理是实现负载均衡的一种方法。假设&#xff0c;很多人同时对订单进行支付&#xff0c;此时&#xff0c;用于支付服务的上游服务器挂掉了&#xff0c;用户就没有…

nginx服务器有什么作用以及什么是反向代理?

最近再用在配置Nginx&#xff0c;学习记录下。 一.背景介绍 1.什么是Nginx&#xff1f; Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。 Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器&#xff0c;并在一个BSD…

反向代理服务器nginx-proxy-manager

一直以来&#xff0c;老苏都是使用群晖内置的反向代理&#xff0c;虽然很方便易用&#xff0c;但在某些情况下显得并不灵活。比如老苏打算安装 Authelia&#xff0c;需要修改 nginx 转发规则&#xff0c;必须通过 SSH 登录后找到相应的文件修改&#xff0c;这一点上不如 nginx-…

Nginx反向代理服务器

1、nginx简介 Nginx 是⼀个⾼性能的HTTP和反向代理web服务器&#xff0c;核⼼特点是占有内存少&#xff0c;并发能⼒强。 Nginx的应用场景&#xff1a; Http服务器&#xff08;Web服务器&#xff09; 1、性能⾮常⾼&#xff0c;⾮常注重效率&#xff0c;能够经受⾼负载的考验…

反向代理服务器的工作原理

最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡。所以搜罗了一些关于反向代理服务器的内容,整理综合。 一 概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的…

Nginx反向代理服务器搭建(超详细)

一、简介 Nginx &#xff08;engine x&#xff09; 是一个高性能的Web服务器和反向代理服务器&#xff0c;也可以作为邮件代理服务器。 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上…

什么是反向代理?

正向代理 当客户端访问一台服务器有障碍&#xff0c;访问不到的时候&#xff0c;这时候就可以找一台可以访问到该服务器的另外一台服务器去代替他去访问&#xff0c;这台代替他去访问的服务器称之为代理服务器。然后客户端就可以把请求发送给代理服务器&#xff0c;然后通过代…

服务器反向代理

一、定义 正向代理 正向代理&#xff0c;代理的是客户端&#xff0c;为客户端发送请求&#xff0c;对服务器隐藏自己的真实客户端。 由下图可见&#xff0c;通过代理服务器&#xff0c;可以访问局域网外的服务器&#xff0c;突破自身ip的访问权限。比如翻墙访问外网。 一般而言…

什么是反向代理(代理服务器解释

什么是反向代理(reverse proxy)&#xff1f; A reverse proxy protects web servers from attacks and can provide performance and reliability benefits. Learn more about forward and reverse proxies. 反向代理是位于 Web 服务器前面的服务器&#xff0c;将客户端&…

反向代理服务器

反向代理服务器的概念 反向代理服务器位于用户与目标服务器之间&#xff0c;但是对于用户而言&#xff0c;反向代理服务器就相当于目标服务器&#xff0c;即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时&#xff0c;用户不需要知道目标服务器的地址&#xff0…

超全Nginx反向代理服务器原理+实战篇

文章目录 1.Nginx简介和安装部署1.1.什么是Nginx1.2.Nginx的用途1.3.正向代理服务器1.4.反向代理服务器1.5.nginx安装部署1.6.线上访问服务器应用流程解析1.7.本地虚拟机配置宿主机域名映射2.Nginx核心基础知识2.1.Nginx目录结构2.2.Nginx核心配置文件2.3.Nginx搭建前端静态服务…

什么是反向代理服务器

我们常会看到‘反向代理服务器’这个名词&#xff0c;例如常看到文章上说 nginx 是一个反向代理服务器、varnish 是一个反向代理服务器 …… 下面就了解下这个概念 含义 ‘反向代理服务器’ 有两个概念&#xff0c;一是‘代理服务器’&#xff0c;二是‘反向’ ‘代理服务器’比…

入门Nginx反向代理服务器

前言 博主最近学习了Nginx&#xff0c;故想通过撰写博客的方式加强对知识的认识和记忆&#xff0c;所涉及知识浅薄&#xff0c;如有错误&#xff0c;敬请指正 一.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff1b;其特点是占有内存少&#xff0…

推导大O阶方法

1、用常数1取代运行时间中的所有加法常数&#xff1b; 2、只保留最高阶项&#xff1b; 3、去除最高阶项的常数&#xff1b; 常数阶是O&#xff08;1&#xff09;&#xff1b; 线性阶是O&#xff08;n&#xff09;; 对数阶是O&#xff08;logn)&#xff1b; 平方阶是O&…

大O算法复杂度表示

序言&#xff1a;算法的时间复杂度和空间复杂度都是用“ 大O表示法” 来表示的。其中O是个常量。 常见的 排序算法的时间复杂度&#xff1a; 冒泡排序、插入排序、希尔排序、选择排序的时间复杂度是O&#xff08;n^2&#xff09;&#xff1b; 快速排序的时间复杂度是 O&#…