Nginx代理服务器

1.Nginx的认识

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 50,000 个并发连接数的响应.

【注:nginx它是一个反向代理的服务器,而且占用内存小,并发能力强。默认并发2w. 】

2.使用Nginx的好处

并发量高且代理后面的服务器提高安全性

3.使用Nginx

下载Nginx包

https://nginx.org/en/download.html

【注:一定要下载linux版本】

3.1安装c语言环境

由于Nginx是由c语言开发,要想使用就必须配置C语言环境

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

3.2 把下载的nginx放入linux系统

这里依然放入  /usr/local/app

解压该压缩文件

tar -zxvf nginx-1.24.0.tar.gz

3.3创建Nginx安装目录

cd 进入到  /usr 文件夹下创建 名为 Nginx的文件夹作为Nginx的安装目录

cd /usr

mkdir Nginx

3.4指定Nginx安装路径

再次进入到Nginx解压目录,也就是 /usr/local/app 下的解压后的Nginx文件

cd进入

ls查看文件

输入命令指定Nginx的安装路径

 ./configure --prefix=/usr/nginx

3.5编译和安装

 还是在解压后的Nginx文件中进行编译安装

make install 

编译并安装,成功后查看 ls  /usr/Nginx

 下的文件

 有上面图片中的文件即安装成功

3.6Nginx中文件概述

conf: nginx的配置目录 nginx.conf

html: 静态资源目录

logs: 日志----如果启动nginx出现错误时,会在该目录下的日志文件中显示

sbin: 启动和关闭nginx的脚本目录

3.7启动与关闭Nginx

此时进入到Nginx的安装目录中的sbin目录

cd /usr/nginx/sbin

输入

./nginx

 启动Nginx

查看是是否启动成功:

ps -ef | grep nginx

 

 启动成功!

关闭和重新加载命令:

./nginx        #开启Nginx

ps -ef | grep nginx   #查看Nginx进程

./nginx -s stop   #关闭nginx

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

 【注:第一次启动成功时一定不要忘了防火墙放行其端口且刷新防火墙】

 【注:Nginx默认端口80】

此时,启动成功并放行80端口后,打开浏览器输入 你的虚拟机或者服务器的ip地址:80

 

4.nginx的配置文件的介绍

现在我们进入到 /usr/nginx/conf

ls查看文件找到 名为nginx.conf 的文件并打开

4.1复写server

现在我们模仿人家,自定义一个server标签

server{
    listen         82;
    server_name localhost;

    location / {
    root www;
    index index.html index.htm;
    }
    }

更改配置文件后退出保存

刷新其文件,因为更改了配置

cd /usr/nginx/sbin
./nginx -s reload

 我在  /usr/nginx/ 下新建了目录名为www,其中创建了一个index.html文件

其中index.html文件写了一句HelloWord

现在我们启动Nginx服务【注:如果没启动就启动,启动了就跳过】

./nginx

打开浏览器输入服务器或者虚拟机ip地址:82

 成功!!!

5.Nginx的核心功能

【1】反向代理

【2】负载均衡

【3】动静分离
【4】nginx的高可用

6.Nginx反向代理

 知识扩充:

6.1正向代理概念:

vpn服务就是正向代理,由于国内被限制禁止访问国外的一些网站,所以有的时候我们需要借助vpn来达到目的

当我们使用VPN时,我们向国外服务器发起请求,vpn会代理这些请求转发给国外的服务器,国外的服务器会把服务器返回给vpn解析后返回给我们

此时,国外的服务器并不知道vpn后的真实服务,这就是正向代理

6.2反向代理概念:

那么理解正向代理后,反向代理也就不难理解,其也就是通过Nginx代理服务器或其他代理服务器,代理一台或多个服务器接受客户端的请求,Nginx代理服务器会把这些请求分发给后面的服务器,这时,客户端并不知道代理服务器后服务器的真实ip地址,只知道是有Nginx代理的服务器

6.3使用反向代理

准备的环境:

(1)搭建nginx服务器--5.0标题之前搭好了

【需要准备两台虚拟机或者服务器演示】

(2)准备一个真实服务器---springboot项目

 打开Idea新建springboot工程,勾选web依赖

进入后打开pom文件,更改SpringBoot版本为2.3.2

在java包下com.aaa下新建controller层  【注:我的包名是叫com.aaa】

新建HelloController类

给上@RestContortller

新写方法

@GetMapping("/hello")
pubilc String Hello(){
return "Hello~~~~~~~~~~~~";
}

 且打包导出

 

将打包后的jar包拖入到linux系统中,我这里就直接放入/根目录

 运行项目:

java -jar 你拖入的jar包名

 【注:linux环境中必须安装了jdk。】

 ·此时,我们到第二台虚拟机中:

在这中,也需要相应的Nginx环境配置,与第一台虚拟机一样

进入 /usr/nginx/conf 中编辑nginx.conf 文件更改配置

server{
    listen 		81; #【注:这里是一会要直接访问的端口】
    server_name localhost;

    location / {
   proxy_pass   http://192.168.235.135:8080;#【注:这里的ip地址需要写被代理的服务器ip,也就是运行jar包的那台服务器ip地址】
    }
    }
firewall-cmd --add-port=81/tcp --zone=public --permanent #【注:放开刚刚设置的81端口】

systemctl restart firewalld #【注:放开端口后刷新防火墙】

 此时到浏览器上输入第二台的ip地址:81/hello

反向代理成功!!!!

7.Nginx负载均衡

随着产品生命周期的发展。达到了最顶峰,日访客流量日益增多,一台服务器已经满足不了这么大的负担,这时,Nginx提出了负载均衡,指用服务器集群【注:服务器集群指多台服务器组成的群体】来均衡负载这些向服务器发出的请求,本来由一台服务器来负担这些请求,现在由一群服务器来负担请求

这里就用三台服务器来演示:

两台服务器用来搭载软件平台,另一台服务器单独作为Nginx代理服务器

将第6标题中的jar包分别拖入到两台服务器中,这里就直接拖入到根目录下

随后在代理服务器中将两台服务器分别反向代理、负载均衡

打开/usr/local/cof/nginx.cofig配置文件

#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream  aaa{
server 192.168.235.135:8080;
server 192.168.235.136:8080;
}

#定义负载均衡代理端口
server {
    listen 83;
    server_name localhost;
    
    location /{
    proxy_pass http://aaa;
    }
}

#第一台服务器反向代理
server {
    listen 81;
    server_name localhost;
    
    location /{
    proxy_pass http://192.168.235.135:8080;
    }
}

#第二台服务器反向代理
server {
    listen 82;
    server_name localhost;
    
    location /{
    proxy_pass http://192.168.235.136:8080;
    }
}

测试:

运行两个服务器中的jar包

java -jar jar包名称

打开浏览器访问Nginx服务器的IP地址:83/hello

发送请求,发现请求会被均摊到两台服务器中,第一发请求在第一台服务器,第二次发请求在第二台服务器中,不断以此循回

7.1负载均衡的策略:

  1. 轮询====默认的策略

  2. 负载====根据服务的硬件不同,配置不同的载重。

7.2负载均衡中的权重

 在这其中

#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream  aaa{
server 192.168.235.135:8080;
server 192.168.235.136:8080;
}

可以在各个服务器ip地址后加上权重

以人性化减轻各个服务器的负担

比如性能好的服务器就多抗一点负担请求,性能不好的服务器就少一点负担请求

例:

#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream  aaa{
server 192.168.235.135:8080 weight=2;
server 192.168.235.136:8080 weight=1;
}

 【注:权重比值越大,承受的负担请求也就大,反之就小】

7.3负载的ip哈希算法

ip哈希策略。---nginx会根据客户的ip---进行哈希计算----根据计算的结果把请求转发给对应的真实服务器。如果客户的ip没有变化,那么它访问的真实服务器也不会发生改变。

#定义被负载均衡的所有服务器地址【upstream: 定义集群信息】
upstream  aaa{
server 192.168.235.135:8080;
server 192.168.235.136:8080;
ip_hash;
}

8.Nginx动静分离

【注:把真实服务器中静态资源和动态资源分开。 把静态资源交于nginx来处理。】

【注:适合单体项目---不适合前后端完全分离的项目】

8.1操作Nginx动静分离

  1. 首先你需要的是一个jar包,jar中要有静态网页,这里就随便弄了几张图片进去,打包成jar包
  2. 准备一台服务器
  3. 将jar拖入到服务器中,这里就直接拖入到根目录下【注:该 jar中没有静态资源,这里将静态资源(指js、css、图片音频等)单独拎出来】
  4. 修改Nginx服务器中的配置文件配置, /usr/nginx/cof/nginx.config
   server{
    listen 		81;
    server_name localhost;

    location / {
   proxy_pass   http://192.168.235.135:8080;
    }
    #以jpg或css或js或png结尾的资源有nginx来处理,去static目录查找对应资源名称。
    location ~ \.jpg|.css|.js|.png$ {
          root static;
     }
    }

【注:把static目录放入到nginx的目录下】

运行测试:

确实很完美

9. Nginx的高可用

【注:高可用是指提升Nginx的可用性,例如当突然停电时或者Nginx服务器出现故障时,会有第二台Nginx服务器瞬间来代替主机,减少不必要的损失】

 

9.1准备

准备两台nginx服务器。

192.168.235.132[master] 192.168.235.135[backup]

首先进行安装Keepalived

yum -y install keepalived  #安装keepalived

9.2修改keepalived配置文件

【注:默认Keepalived安装路径 /etc/keepalived】

9.2.1 nginx_check.sh脚本

 

将脚本文件放在咱们指定的目录中 /usr/local/src/

9.2.2 启动keepalived服务

systemctl start keepalived

现在人为关闭主机Nginx服务,模拟Nginx主机服务器出故障

杀掉Nginx主机服务器ip

pkill -9 nginx

或者

 再次运行访问虚拟ip

 

发现访问的是备用Nginx服务器

成功!!!!

【注:两台Nginx服务器都要启动Keepalived 和 Nginx服务】


 

 以上便是Nginx代理服务器中的内容,如有漏缺请在下方留言告知,我会及时补充 

posted @ 2023-08-25 15:09  九极致之术  阅读(248)  评论(0编辑  收藏  举报