• Nginx教程(一)-全面认知


    什么是 nginx

    nginx 是一款高性能的 http 服务器,反向代理服务器,电子邮件(IMAP/POP3)代理服务器;

    它的特点就是高性能,占用内存少,支持高并发,运行稳定;

    官方测试 可支持 5万 的并发量;

    nginx 的用途

    nginx 可以用于多种场景,最常用的是反向代理,其他场景也需要反向代理实现

    http 服务器:nginx 是一个 http 服务器,可以独立提供 http 服务,可以做 web 静态资源服务器

    正向代理:客户端代理

    反向代理:反向代理是它最重要,也是最常用的一个场景

    负载均衡:把多个请求近似平均的分配到多个服务器上

      // 也就是说负载均衡需要多个服务器       【一个服务器多个端口应该也行,我没试过,使用时请自行测试】

      // 负载均衡的本质其实也是反向代理

    动静分离:把 web 静态资源和动态资源放在不同的服务器上,然后加上反向代理 

    配置高可用集群:组件分布式 nginx,防止 单 nginx 宕机导致 web 服务挂掉

    功能框架

    常规 web 框架

    我们先看下常规 web 服务的 请求响应 过程,加入后台需要操作数据库,如下图

    开发环境的 web 服务器是单线程的,多个请求必须排队

    反向代理

    nginx 作为反向代理,隐藏真实 IP,在 windows 上配置 域名-ip 解析器,使用域名通过 代理(nginx) 访问 真实服务(tomcat) 

    负载均衡

    把 多个 request 平均分配到 多个 服务器上,避免单服务器的排队,提高并发

     

    动静分离

    把 web 动态资源和静态资源 分开存储

    安装

    nginx 安装有多种方式,详细过程 参照 官方安装文档,这里只简单介绍 tar 包安装。

    nginx 需要安装依赖

    //一键安装四个依赖
    yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

    下载 tar 包并解压,下载地址 官网下载,进入目录,执行如下命令

    ./configure
    make
    make install

    解压后如下图

    简单配置

    nginx 默认 80 端口,这个端口一般被 apache 占用,默认 IP一般是 localhost,由于我们经常会搞一些其他事情把 hostname 改掉,所以这里先换成 IP

     server {
            listen       8765;
            server_name  localhost;

    启动并查看版本

    [root@node conf]# /usr/local/nginx/sbin/nginx 
    [root@node conf]# /usr/local/nginx/sbin/nginx -v
    nginx version: nginx/1.16.1

     /usr/local/nginx/sbin 就是上图那个解压后的 sbin

    可以看到安装成功

    web 端可访问

    常用命令

    nginx -s stop       快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
    nginx -s quit       平稳关闭Nginx,保存相关信息,有安排的结束web服务。
    nginx -s reload     因改变了Nginx相关配置,需要重新加载配置而重载。
    nginx -s reopen     重新打开日志文件。
    nginx -c filename   为 Nginx 指定一个配置文件,来代替缺省的。
    nginx -t            不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
    nginx -v            显示 nginx 的版本。
    nginx -V            显示 nginx 的版本,编译器版本和配置参数。
    nginx         启动

    详细配置

    配置文件解读

         1  worker_processes  1;         #worker进程的数量

    2 events { #事件区块开始 3 worker_connections 1024; #每个work进程支持的最大连接数 4 } #事件区块结束

    5 http { #http区块开始 6 include mime.types; #nginx支持的媒体类型库文件包含 7 default_type application/octet-stream; #默认的媒体类型 8 sendfile on; #开启高效传输模式 9 keepalive_timeout 65; #连接超时

    10 server { #第一个server区块开始,表示一个独立的虚拟主机站点 11 listen 80; #提供服务的端口,默认80 12 server_name localhost; #提供服务的域名主机名

    13 location / { #第一个location区块开始 14 root html; #站点的根目录,相对于nginx安装目录 15 index index.html index.htm; 16 } 17 error_page 500 502 503 504 /50x.html; 18 location = /50x.html { 19 root html; 20 } 21 } 22 }

    反向代理配置

    server {
        listen       80;                                                         
        server_name  localhost;                                               
        client_max_body_size 1024M;
     
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host:$server_port;
        }
    }

    上面是 反向代理的 IP:PORT,下面是被代理的 服务, / 对应 url, 当访问 localhost:80 时,相当于访问 localhost:8080

    负载均衡配置

    负载均衡需要分配 request 到不同服务器,那如何分配呢?有几种策略 

    RR 策略

    nginx 的默认策略,按时间顺序把请求逐个分配到不同服务器,如果某个服务器挂掉,会自动剔除。

    upstream test {
        server localhost:8080;
        server localhost:8081;
    }
    server {
        listen       80;                                                         
        server_name  localhost;                                               
        client_max_body_size 1024M;
     
        location / {
            proxy_pass http://test;
            proxy_set_header Host $host:$server_port;
        }
    }

    upstream  代表多个服务器,假如有个服务器挂掉了,nginx 会自动判断,不给他分配 request,所以不影响 web 的使用。

    注意 upstream 后面的 test 与 http 后面的要保持一致

    权重策略

    给每台服务器分配权重,权重大的越容易被分配 request,性能好的机器自然权重大,这种策略就是用于 服务器性能 差异较大的场景。

    upstream test {
        server localhost:8080 weight=9;
        server localhost:8081 weight=1;
    }
    server {
        listen       80;                                                         
        server_name  localhost;                                               
        client_max_body_size 1024M;
     
        location / {
            proxy_pass http://test;
            proxy_set_header Host $host:$server_port;
        }
    }

    比如有 10 个 request,可能 8080 处理 9 个,8081 处理 1 个

    还有 ip_hash 策略,包括上面两种是 nginx 自带的策略;

    还有第三方策略 fair 策略、url_hash 策略,具体配置我就不写了,大同小异,参考 各种策略的详细配置

    参考资料:

    http://www.nginx.cn/doc/index.html  Nginx中文文档

    https://blog.csdn.net/weixin_41835612/article/details/83738188  有具体配置

    https://www.cnblogs.com/xiaohuochai/p/9093819.html  有具体配置

    https://www.jianshu.com/p/15e7f2adb463  有具体配置

    https://www.jianshu.com/p/15e7f2adb463   有具体配置

    https://www.cnblogs.com/ysocean/p/9392908.html  理论挺详细

    https://blog.csdn.net/duguyuyun12345/article/details/83471821  Nginx使用教程

  • 相关阅读:
    Linux特殊权限分析(第二版)
    Linux用户配置文件(第二版)
    Vim/Vi实用技巧(第二版)
    Vim/Vi常用操作(第二版)
    GRUB与Linux系统修复(第二版)
    inittab文件剖析[CentOS 5.X](第二版)
    CentOS 6.X启动流程
    /etc/fstab文件出错,无法进入Linux系统
    Linux引导流程(第二版)
    Linux备份策略(第二版)
  • 原文地址:https://www.cnblogs.com/yanshw/p/11207756.html
Copyright © 2020-2023  润新知