Nginx 入门

Nginx (原来, 如此简单)

什么是nginx

nginx 可以做什么事情

Nginx 是高性能的 HTTP 和 反向代理服务器 处理高并发能力十分强大 有报告表明支持高达 50000 个并发连接数

占用内存少 并发能力强

  • Nginx 作为 web 服务器

    • Nginx 可以作为静态页面的 web 服务器 不支持 java

正向代理

Nginx 不仅可以做反向代理,实现负载均衡 还能用作正想代理来进行上网等功能

正向代理: 如果把局域网外的 Internet 想象成一个巨大的资源库 则局域网中的客户端要访问 internet 则需要通过代理服务器来访问 这种代理服务器就称之为正向服务器

通过代理服务器来访问服务器的过程就是正向代理

比如 vpn 就是正向代理 大陆用户先通过 vpn 服务器 访问 google 网站

反向代理

反向代理, 其实客户端对代理是无感知的, 因为客户端不需要任何配置就可以访问

我们只需要将请求发送到反向代理服务器 由反向代理服务器去选择目标服务器获取数据后 在返回给客户端 此时反响代理服务器和你表服务器对外就是一个服务器 暴露的是代理服务器的地址 隐藏了真是服务器 IP 地址

负载均衡

增加服务器数量 然后将请求发送到各个服务器上 将原先请求集中到单个服务器上的 情况改为将请求分到多个服务器上 将负载分发到不同的服务器 也就是我们所说的负载均衡 客户端发送多个请求到服务器 服务器处理请求 有一些可能要与数据库进行交互 服务器处理完毕请求后 再将结果返回给客户端

动静分离

为了加快网站的解析速度 可以把动态页面和动态页面由不同的服务器来解析 加快解析速度 降低原来单个服务器的压力

下载Nginx (centos7)

nginx官网

上传到服务器 (我这里下载是 nginx 1.19.10)

cd 
tar -zxvf nginx-1.19.10.tar.gz
cd nginx-1.19.10
./configure
make
make install

whereis nginx
# nginx: /usr/local/nginx 配置文件目录



cd /usr/local/nginx
# conf html logs sbin
# sbin 启动文件
访问 nginx
ip (nginx 默认端口80 可直接访问 ip 即可) http://ip/

如果安装正确 没有出现这个页面
检查方向  nginx 的80 是否被占用掉了
Liunx 的防火墙是否没有关闭
阿里云  腾讯云  需要配置 安全组的 端口

 

# nginx 的常用命令
cd /usr/local/nginx/sbin
./nginx # 启动 Nginx
./nginx -s stop # 停止
./nginx -s quit # 安全退出
./nginx -s reload # 重新加载配置文件
ps  aux | grep nginx # 查看 Nginx 的进程

 

Nginx 反向代理 && 负载均衡

模拟测试环境

需求:

  1. 假设我们有俩个 python Flask 项目 现在随着用户越来越多我们我们的对我们的服务器压力越来越大, 用户体验效果越来越不好

  2. 这里我们就使用 Nginx 负载均衡来解决这个问题

  3. 主机 Nginx 120.131 从机 155.76

  4. 要求这个俩个项目要在分别的俩台机器上可以正常运行

  5. 使用轮询!

  6. 怎么可以 了解 iphash redishash ...等等

120.131

  1. 安装 Nginx (上面已经安装过Nginx 不在介绍了)

  2. 启动程序 (注意:俩台服务器上都启动!)

    1. ## 我这里就写了一个 Flaks 小 demo 用来测试
      """
      运行条件 这里必须有 Python 环境 并有 Flask 安装包
      pip3 install Flask
      """
      #/bin/test.py
      from flask import Flask

      app = Flask(__name__)


      @app.route("/")
      def hello():
         # 这里俩台打印输出内容可以不一样 方便测试 我这里就是为了可以更清楚的看到测试结果!
         print("120.131 请求!!!!!!")
         return "hi I'm Snake"


      if __name__ == '__main__':

         app.run(
             host="0.0.0.0"
        )

      # 启动项目
      python3 test.py
      # 或者使用 Liunx 后台启动项目也可以
      nohup python3 test.py &

      浏览器查看项目
      http://ip:5000
    2. # 配置 NGINX 反向代理
      nginx 反向代理
      示例:
      # 注意 ; 结尾!
      proxy_pass http://www.xxx.com/;
      http://192.168.120.131/uri;

      cd /usr/local/nginx/conf
      vi nginx.conf
      # 修改这个俩个地方 nginx 80 反向代理 5000 端口
      server_name 192.168.120.131;
      proxy_pass http://192.168.120.131:5000;

      # 重新加载 Nginx 的配置文件
      cd /usr/local/nginx/sbin/
      ./nginx -s reload

      访问浏览器
      http://192.168.120.131/
      这里就不需要加 端口号!

    3. nginx 反向代理 配置文件

      1.  

         

         

nginx 负载均衡

Nginx 的负载均衡还是很简单的 (有手就行)

cd /usr/local/nginx/conf
vi nginx.conf
http 节点下配置
cd /usr/local/nginx/sbin
./nginx -s reload
# 访问 http://192.168.120.131/
  1. nginx 负载均衡配置

    1. nginx 的负载均衡配置完毕

  2. nginx 更多操作

    1. 操作流程

      1. cd /usr/local/nginx/conf

      2. vi nginx.conf

      3. 配置 nginx 的步骤

    2. 重新加载 nginx 的配置文档

      1. cd /usr/local/nginx/sbin

      2. ./nginx -s reload

      3. 到此结束!!!

  3. nginx 负载均衡的更多配置

    1. 轮询

      1. nginx upstream 是按照 轮询的(默认) 方式进行负载的, 每个请求按时间循序分配到不同后端的服务器
        如果服务器 down 会自动剔除
        http {
          .....
           upstream snake{
               server 192.168.120.131:5000;
               server 106.xx.xx.76:5000;
          }
           server {
               listen       80;
               server_name 192.168.120.131;
               #charset koi8-r;

               #access_log logs/host.access.log main;

               location / {
                   root   html;
                   index  index.html index.htm;
                   proxy_pass http://snake;
              }
          .......
        }
        }
    2. 权重

      1. nginx 的权重就是指定轮询的几率。 weight 和访问比率成正比, 用于后端服务器不均的情况
        例如 一台服务器性能好一点 一台服务器性能不是很好
        我们就可以让好一点的服务器多分配一点权重 让请求多去请求
        下面图的配置就是 155.76 服务器比 120.131 接受请求要多!
      2. http {
          .....
           upstream snake{
               server 192.168.120.131:5000 weight=2;
               server 106.xx.xx.76:5000 weight=6;
          }
           server {
               listen       80;
               server_name 192.168.120.131;
               #charset koi8-r;

               #access_log logs/host.access.log main;

               location / {
                   root   html;
                   index  index.html index.htm;
                   proxy_pass http://snake;
              }
          .......
        }
        }
    3. ip_hash

      1. ip_hash 将每个请求去指定一台web服务器 这样一来这个 ip下的客户端就能建立起稳固的 session

      2. http {
          .....
           upstream snake{
               ip_hash;
               server 192.168.120.131:5000;
               server 106.xx.xx.76:5000;
          }
           server {
               listen       80;
               server_name 192.168.120.131;
               #charset koi8-r;

               #access_log logs/host.access.log main;

               location / {
                   root   html;
                   index  index.html index.htm;
                   proxy_pass http://snake;
              }
          .......
        }
        }
posted @ 2021-05-17 17:04  Handsome、Snake  阅读(73)  评论(0编辑  收藏  举报