分布式文件系统 -Nginx部分

1. 初识 Nginx

1.1 什么是 Nginx?

Nginx(发音为“engine x”)是一款开源的高性能服务器软件,由俄罗斯的工程师 Igor Sysoev 开发。它是用 C 语言编写的,并以其出色的性能和灵活性广受欢迎。此外,淘宝还基于 Nginx 修改开发了 Tengine 以适应其特定需求。

1.2 Nginx 能做什么?

Nginx 的功能非常多样化,主要包括:

  • Web 服务器:它可以解析 HTTP 协议,处理网站的静态内容。
  • 反向代理服务器:Nginx 可以充当反向代理,将客户端的请求转发到内部服务器,从而隐藏内部结构,增加安全性和负载均衡。
  • 邮件服务器:它能够解析邮件相关的协议,如 POP3、SMTP 和 IMAP,实现邮件服务功能。

1.3 Nginx 的优势

Nginx 之所以受到广泛欢迎,主要得益于以下几个优势:

  • 高性能:在高峰期,Nginx 能够处理数万的并发连接,相比其他 Web 服务器,它的响应速度更快。
  • 高扩展性:Nginx 采用低耦合设计,支持丰富的第三方模块,能够灵活扩展功能。
  • 高可靠性:Nginx 经过大规模网站的检验,例如 sina.com.cn、xunlei.com 和 163.com。每个 worker 进程相对独立,出现错误时可以快速启动新的 worker 进程。
  • 低内存消耗:在 Nginx 中,一般情况下,10000 个非活跃的 HTTP Keep-Alive 连接仅消耗 2.5M 内存。单机支持超过 10 万个并发连接,实际数量远未封顶。
  • 热部署:Nginx 采用 master 和 worker 分离设计,可以在不中断服务的情况下升级 Nginx 可执行文件。
  • 宽松的 BSD 许可协议:BSD 许可协议允许用户免费使用、修改 Nginx 源码,并重新发布修改版(如淘宝的 Tengine)。

2. 正向与反向代理

2.1 正向代理

正向代理是一种位于客户端和原始服务器之间的服务器。客户端需要将请求发送给代理服务器,然后由代理服务器转发给原始服务器。原始服务器处理请求后,将响应数据返回给代理服务器,最后由代理服务器将数据传递给客户端。正向代理的典型用途包括:

  • 局域网访问外部资源:例如,学校或公司网络中的客户端通过正向代理访问互联网。


反向代理

反向代理方式是指代理原始服务器来接受来自
Internet
的链接请求,然后将请求转发给内部网络上的原始 服务器,并将从原始服务器上得到的结果转发给Internet
上请求数据的客户端。那么顾名思义,反向代理就是位于Internet
和原始服务器之间的服务器,对于客户端来说就表现为一台服务器,客户端所发送的请 求都是直接发送给反向代理服务器,然后由反向代理服务器统一调配。

3. Nginx 的安装与配置

3.1 安装步骤

  1. 下载相关依赖

    依赖的安装步骤:

    # OpenSSL
    ./configure
    make
    sudo make install
    
    # ZLib
    ./configure
    make
    sudo make install
    
    # PCRE
    ./configure
    make
    sudo make install
    
  2. 安装 Nginx

    下载 Nginx 的源码包后,执行以下命令来安装:

    ./configure --with-openssl=../openssl-master --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11
    make
    sudo make install
    
  3. Nginx 目录结构

    • 默认安装目录/usr/local/nginx
    • 配置文件目录/usr/local/nginx/conf
    • 静态资源目录/usr/local/nginx/html
    • 日志目录/usr/local/nginx/logs
    • 可执行程序目录/usr/local/nginx/sbin

    Nginx 可执行程序的路径为 /usr/local/nginx/sbin/nginx

  4. 配置环境变量

    • /usr/local/nginx/sbin/ 添加到环境变量 PATH 中,或创建软链接:

      ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
      
  5. 启动、停止与重新加载 Nginx

    • 启动 Nginx:

      sudo nginx
      
    • 立即停止 Nginx:

      sudo nginx -s stop
      
    • 平滑停止 Nginx(待当前操作完成后停止):

      sudo nginx -s quit
      
    • 重新加载配置:

      sudo nginx -s reload
      
  6. 测试安装是否成功

    知道 Nginx 所在主机的 IP 地址,例如 192.168.1.100,在浏览器中访问该 IP 地址。如果看到 Nginx 的欢迎界面,则说明安装成功。

Nginx 配置指南

配置文件的位置

Nginx 的主配置文件通常位于:

/usr/local/nginx/conf/nginx.conf

配置文件的组织结构

Nginx 的配置文件分为几个主要模块:

  • http 模块:用于配置 HTTP 相关的通信设置。

    • server 模块:定义每台 Web 服务器的配置。
    • location 模块:处理客户端请求的具体匹配和操作。
  • mail 模块:处理邮件相关的配置和操作。

常用配置项

  • user:

    user nobody;
    

    指定 Nginx 进程的运行用户。若遇到权限问题,可以将 nobody 更改为 root

  • worker_processes:

    worker_processes 1;
    

    设置 Nginx 工作进程的数量。推荐设置为 CPU 核心数。

  • error_log:

    error_log logs/error.log;
    

    指定错误日志文件的位置。

  • pid:

    pid logs/nginx.pid;
    

    指定存放 Nginx 进程 ID 的文件。

  • events 模块:

    events {
        use epoll;
        worker_connections 1024;
    }
    
    • use epoll;:指定使用 epoll 作为多路 IO 复用模型。
    • worker_connections 1024;:每个工作进程的最大连接数。
  • http 模块:

    http {
        server {
            listen 80;
            server_name localhost;
            charset utf8;
            
            location / {
                root yundisk;
                index index.html index.htm;
            }
        }
    }
    
    • listen 80;:指定 Web 服务器监听的端口(HTTP 默认端口是 80,HTTPS 是 443,FTP 是 21,SSH/SFTP 是 22)。
    • server_name localhost;:指定服务器域名。
    • charset utf8;:指定字符编码。
    • location / { ... }:处理根路径请求,root yundisk; 指定静态文件目录,index index.html index.htm; 指定默认首页文件。

配置静态网页

  1. 设置静态网页存储目录

    默认目录是:

    /usr/local/nginx/html
    

    你可以创建一个新的目录,例如:

    mkdir /usr/local/nginx/yundisk
    
  2. 部署静态网页

    /usr/local/nginx/yundisk 目录下放置你的静态网页文件,例如 login.html。要使其可通过 HTTP 访问,请在配置文件中设置 location 模块:

    location / {
        root /usr/local/nginx/yundisk;
        index index.html index.htm;
    }
    

    配置完成后,重新加载 Nginx 配置:

    sudo nginx -s reload
    

    通过访问 http://192.168.80.254/login.html 来测试配置是否生效。
    以下是优化后的博客内容:


Nginx 配置示例

1. 如何配置目录和静态文件

1.1 目录和文件的存放

  • hello:这是一个目录名,用于存放静态网页文件。
  • reg.html:应放置在 hello 目录中。

1.2 配置 Nginx 的 location

要让 Nginx 正确处理 hello 目录下的文件,需要在配置文件中添加相应的 location 配置。例如:

location /hello/ {
    root /usr/local/nginx/yundisk;
    index xx.html;
}
  • location /hello/ { ... }:指定处理以 /hello/ 开头的请求。
  • root /usr/local/nginx/yundisk;:指定静态文件的根目录。
  • index xx.html;:当访问 /hello/ 目录时,如果没有指定文件,Nginx 会返回 xx.html

2. 配置默认网页

2.1 访问目录

当你访问 http://192.168.80.254/upload/ 时,Nginx 会显示目录下的默认网页 upload.html,因为:

location /upload/ {
    root /usr/local/nginx/yundisk;
    index upload.html;
}
  • location /upload/ { ... }:指定处理以 /upload/ 开头的请求。
  • root /usr/local/nginx/yundisk;:指定静态文件的根目录。
  • index upload.html;:当访问 /upload/ 目录时,Nginx 会返回 upload.html 文件。注意,index 指令只在访问目录时生效,当直接请求文件时不会使用 index 指定的默认文件。

配置文件示例

以下是一个完整的 Nginx 配置示例,展示了如何处理静态文件和目录:

http {
    server {
        listen 80;
        server_name localhost;

        location /hello/ {
            root /usr/local/nginx/yundisk;
            index xx.html;
        }

        location /upload/ {
            root /usr/local/nginx/yundisk;
            index upload.html;
        }
    }
}

配置完成后,重新加载 Nginx 配置使更改生效:

sudo nginx -s reload

优化后的博客内容如下:


3. 负载均衡

3.1 什么是负载均衡?

负载均衡(Load Balancing)是一种将网络流量或应用请求分配到多个服务器上的技术,以实现高可用性和高性能。在负载均衡架构中,请求会根据负载均衡算法分发到不同的应用服务器上。这样,即使某个服务器出现故障,其他服务器仍然可以处理请求,从而实现高可用性。此外,通过集群模式中的负载均衡,应用服务器可以支持纵向扩展,以应对业务增长带来的高并发场景。

3.2 负载均衡算法

常见的负载均衡算法包括轮询、权重和 IP 哈希。默认算法为轮询。

(1)轮询算法

轮询算法将请求按顺序逐一分配给不同的服务器。如果某个服务器出现故障,并且请求超过最大失败次数 max_fails(默认为 1 次),则在失效时间 fail_timeout(默认为 10 秒)内不会再向该节点发送请求。

示例配置:

upstream defaultReverseProxyServer {
    server 192.168.0.1:8080;
    server 192.168.0.2:8080;
}

(2)权重算法

权重算法根据服务器的权重分配请求。服务器权重可以根据其处理能力设置。如果某个服务器出现故障,并且请求超过最大失败次数 max_fails(可以设置为 N 次),则在失效时间 fail_timeout(默认为 10 秒,可设置)内不会再向该节点发送请求。

示例配置:

upstream weightReverseProxyServer {
    server 192.168.0.1:8080 weight=10 max_fails=2 fail_timeout=5s;
    server 192.168.0.2:8080 weight=5 max_fails=2 fail_timeout=5s;
}

(3)IP 哈希算法

IP 哈希算法根据用户访问 IP 的哈希结果分配请求。如果来自同一 IP 的请求会被分配到同一台服务器,这种方法适用于需要保持会话状态的应用,如动态网页。

示例配置:

upstream ipHashReverseProxyServer {
    ip_hash;
    server 192.168.0.1:8080;
    server 192.168.0.2:8080;
}

选择合适的算法

在实际应用中,基于权重的负载均衡算法常被使用,因为许多集群部署的服务器资源不均匀。通过设置不同的权重,可以更高效地利用资源并提高并发处理能力。

posted @ 2024-08-14 13:54  daligh  阅读(59)  评论(0)    收藏  举报