• Nginx很难吗???


    学习目标

    1、Nginx简介
    2、Nginx的安装
    3、Nginx负载均衡
    
    • 1
    • 2
    • 3

    1、Nginx简介

    Nginx是一个轻量级、高性能、稳定性高、并发性强的HTTP和反向代理服务器。目前在互联网企业中应用非常广泛,如:百度、京东、新浪、网易、腾讯、淘宝等。

    1.1 Nginx能做什么

    Nginx的作用主要有:

    • http服务器

      Nginx一般用于部署静态资源,和部署动态资源的服务器(如:Tomcat) 分开部署,实现动静分离,达到服务器性能的最大化。

    • 反向代理

      代理后台服务器,通过配置实现灵活的路由

    • 负载均衡

      将大量的用户请求,均衡的分配给多台服务器,提高系统的负载能力

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0kElASL1-1654994039942)(Nginx.assets/image-20211220090724714.png)]

    1.2 正向/反向代理

    Nginx的一个重要作用是反向代理,那么我们首先需要搞清楚什么是反向代理。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNExPrqN-1654994039944)(Nginx.assets/1609294533535.png)]

    正向代理和反向代理的区别是:

    • 正向代理,代理的是客户端

      如:国内用户不能直接访问国外网站(Google、Facebook等),可以通过VPN代理服务器间接访问国外网站,这就是一种正向代理

    • 反向代理,代理的是服务器

      如:淘宝的业务部署到不同的服务器上,如商品服务器、商户服务器、订单服务器等,用户访问淘宝时,通过Nginx将请求转发到不同的后台服务器上

    2、Nginx的安装

    2.1 Linux中安装Nginx

    1) 安装依赖库

    yum install -y gcc-c++
    yum install -y pcre pcre-devel
    yum install -y zlib zlib-devel
    yum install -y openssl openssl-devel
    
    • 1
    • 2
    • 3
    • 4

    2) 下载Nginx

    cd /usr/local
    wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
    
    • 1
    • 2

    3) 解压

    tar -zxvf nginx-1.12.0.tar.gz
    
    • 1

    4)进行默认配置

    cd nginx-1.12.0
    ./configure
    
    • 1
    • 2

    5)编译安装

    make
    make install
    
    • 1
    • 2

    6)启动nginx

    编译安装后,会出现nginx目录

    cd /usr/local/nginx/sbin/
    ./nginx 
    
    • 1
    • 2

    其他命令:

    停止
    ./nginx -s stop
    退出
    ./nginx -s quit
    重启
    ./nginx -s reload
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7) 打开80端口

    firewall-cmd --zone=public --add-port=80/tcp --permanent 
    
    • 1

    打开浏览器,输入IP地址,出现Nginx页面

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cfJZznAe-1654994039945)(Nginx.assets/1609296234072.png)]

    2.2 Windows中安装Nginx

    1)去官网下载Nginx

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

    2)解压,双击nginx.exe就可以了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yV0kP6xd-1654994039946)(Nginx.assets/1609296588657.png)]

    3、反向代理配置

    Nginx作为反向代理服务器可以对服务器的域名和端口进行映射,起到的作用有:

    1. 隐藏真正服务器的地址,提高安全性
    2. 解决跨域问题,将不同的域名和端口映射为相同的
    3. 负载均衡,将大量请求分发给不同的服务器处理
    4. 动静分离,将对不同资源的请求分发给处理各自资源的服务器等

    反向代理案例:

    在SpringBoot项目中添加控制器,端口是默认的8080

    RestController
    public class HelloController
    {
        @GetMapping("/hello")
        public String hello(){
            return "Hello Nginx";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    通过URL:http://localhost:8080/hello 可以正常访问
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s27Uwg5o-1654994039947)(Nginx.assets/1.png)]

    现在需要通过URL:http://manage.blb.com/hello 也能访问到该接口
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJBFMV0v-1654994039948)(Nginx.assets/2.png)]

    这就需要:

    1. 将域名localhost映射到manage.blb.com上
    2. 将端口8080映射到80端口上(浏览器默认)

    实现步骤:

    1. 在C:\Windows\System32\drivers\etc\host文件中添加:
    127.0.0.1 manage.blb.com
    
    • 1

    让windows系统支持manage.blb.com域名

    1. 修改nginx.conf,添加配置
    server {
        listen       80;
        server_name  manage.blb.com;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    proxy_pass 是原来的域名和端口,127.0.0.1就是localhost
    server_name 后面是映射后的域名
    listen 后面是映射后的端口

    1. 重启nginx
    nginx -s reload
    
    • 1

    PS:

    Windows 查看端口占用命令: netstat -ano

    杀死进程:taskkill /F /pid 进程号

    4、Nginx负载均衡

    4.1 负载均衡概念

    每台服务器处理请求数都有上限,超过这个上限就可能挂掉,那么多部署几台服务器就可以解决这个问题吗?

    也不一定,假设所有请求都打到一台服务器上,还是会挂掉。

    负载均衡(Load balancing),是一种计算机技术,能将用户请求按一定的负载均衡算法,分配给集群中的每一台服务器上,从而避免单台服务器过载,也提高了服务器集群处理请求的响应速度,达到服务器资源的优化配置。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63pPdzzR-1654994039949)(Nginx.assets/clipboard-1609308313189.png)]

    负载均衡可以通过客户端、服务器端和硬件实现,Nginx属于服务器端负载均衡技术。

    4.2 负载均衡配置

    1) 服务器设置

    为了测试方便起见,可以在一台电脑上启动几个SpringBoot项目,以端口区别,模拟多台服务器

    RestController
    public class HelloController
    {
        @GetMapping("/hello")
        public String hello(){
            return "Hello 8081";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2) 修改Nginx配置

    在http中添加upstream,配置服务器列表,myservers是列表名称,内部每个server后面是服务器的IP和端口

    upstream myservers { 
    	server 192.168.0.113:8081;
    	server 192.168.0.113:8082;
    	server 192.168.0.113:8083;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加server,配置代理将请求发送给myservers处理

    server {
            listen       8088;
            server_name  localhost;
            charset utf-8;
            location / {
    			proxy_pass http://myservers;
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3) 重启Nginx

    ./nginx -s reload
    
    • 1

    4) 测试

    在浏览器测试8088端口访问hello接口时,发现接口的调用是轮询式的。

    5)配置权重

    每个服务器的处理能力不同,可以配置权重weight,让能力强的服务器处理更多请求

    upstream myservers { 
    	server 192.168.0.113:8081 weight=1;
    	server 192.168.0.113:8082 weight=2;
    	server 192.168.0.113:8083 weight=1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、Nginx部署Vue项目

    1. 构建Vue项目

      npm run build

      生成dist目录

    2. 部署nginx的html目录下

    3. 添加配置

          server {
              listen       8088;
              server_name  localhost;
      
              root        html/dist;
      
              location / {
                  try_files $uri $uri/ @router;
                  index  index.html index.htm;
              }
      
              location @router {
                  rewrite ^.*$ /index.html last;
              }
          }	
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
  • 相关阅读:
    供应原厂电流继电器 - HBDLX-21/3 整定电流范围0.1-1.09A AC220V
    小程序页面跳转
    Rust 实战丨绘制曼德博集
    【Linux】信号简介与触发信号的几种方式
    网络安全宣传周|这些网络安全知识赶紧get起来~
    什么是JDBC?如何实现MySQL和Java程序的连接?
    C++ Tutorials: C++ Language: Compound data types: Other data types
    基于uni-app框架的小程序——点击跟随事件
    MATLAB基础应用精讲-【基础知识篇】MATLAB程序优化-通过Profiler进行程序运行分析
    软件工程毕业设计课题(14)基于python的毕业设计python运动场地预约系统毕设作品源码
  • 原文地址:https://blog.csdn.net/weixin_44953152/article/details/125241704