• 企业应用--Nginx&web部署


    一、Nginx介绍

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。

    Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

    其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,

    中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    Nginx是一款由俄罗斯的程序设计师所开发高性能的Web和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器

     轻量级的web服务器

    延伸版本tengine(淘宝)、openresrt(章亦春)等

    http://nginx.org 官网

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

     

    Nginx管理

    Nginx优化

    Nginx负载均衡

    声明

    Nginx安装

    官网源码包--必须从官网下载

    配置:
    1)检查环境 是否 满足安装条件  依赖解决
    2)指定安装方式  配置文件  命令文件  各种文件放哪里  开启模块功能[内置模块 三方模块]
    3)指定软件安装在哪里

    视频是在在虚拟机上进行项目部署 

    下载并放在/usr/src目录下:

    wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src

    cd /usr/src
    解压 tar xf nginx-1.15.5.tar.gz
    cd nginx-1.15.5
    安装依赖包:yum -y install gcc pcre-devel zlib zlib -devel


    把所有软件安装到直到目录下:./configure --prefix=/usr/local/nginx
    把源码进行编译生成可执行程序:make
    安装:make install
    启动nginx:
    1 cd /usr/local/nginx/
    2 /usr/local/nginx/sbin/nginx
    查看端口是否被占用:
    1、lsof -i:80
    2、netstat -ntpl

    虚拟机安装流程

     

    -------

    安装模块的命令:yum -y install lsof

    验证Nginx是否启动:

    1、服务器公网地址访问:

    2、文本

    先安装 sudo yum -y install elinks 才能执行

    elinks http://120.79.2.67 --dump

    -------

    nginx配置文件详解

    变量文件

    #启动子进程程序默认用户
    #user  nobody;
    #一个主进程和多个工作进程。工作进程是单进程的,且不需要特殊授权即可运行;这里定义的是工作进程数量
    worker_processes  1;
    
    #全局错误日志的位置及日志格式
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        #每个工作进程最大的并发数
        worker_connections  1024;
    }
    
    
    #http服务器设置
    http {
        #设定mime类型,类型由mime.type文件定义
        include       mime.types;
        
        #
        default_type  application/octet-stream;
    
        #日志格式
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
        #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
        #$remote_user:用来记录客户端用户名称;
        #$time_local: 用来记录访问时间与时区;
        #$request: 用来记录请求的url与http协议;
        #$status: 用来记录请求状态;成功是200,
        #$body_bytes_sent :记录发送给客户端文件主体内容大小;
        #$http_referer:用来记录从那个页面链接访问过来的;
        #$http_user_agent:记录客户浏览器的相关信息;
    
        #全局访问日志路径 
        #access_log  logs/access.log  main;
        #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
        sendfile        on;
        
        #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
        #tcp_nopush     on;
    
        #长连接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #开启压缩
        #gzip  on;
    
        #配置虚拟主机
        server {
            #虚拟主机使用的端口
            listen       80;
            #虚拟主机域名
            server_name  localhost;
    
            #虚拟主机支持的字符集
            #charset koi8-r;
    
            #虚拟主机的访问日志路径
            #access_log  logs/host.access.log  main;
    
            #定义web根路径
            location / {
                #根目录路径
                root   html;
                #索引页
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
    
            #根据错误码 返回对应的页面
            error_page   500 502 503 504  /50x.html;
    
            #定义页面路径
            location = /50x.html {
                root   html;
            }
    
            #定义反向代理服务器 数据服务器是lamp模型
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
    
            #定义PHP为本机服务的模型  
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #拒绝apache DR目录及子目录下的.htaccess文件访问
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        #https的配置方案
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    nginx配置文件

    查看配置文件命令:

    vim ./conf/nginx.conf

    进入配置文件
    cd /usr/local/nginx/
    cd ./conf
    先敲一些就可以进行编译
    在配置文件下查看进程数:
    cat /proc/cpuinfo |grep "flags"|wc -l

    再末尾输入:q重新回到命令行

    Nginx默认网址

     

     Nginx虚拟主机

    虚拟主机的介绍:

    一个web服务器器软件默认情况下只能发布一个web,         因为一个web分享出去需要三个条件(IP、Port(端口)、Domain name(域名))
    一个web服务器器软件如何发布多个web呢?

    虚拟主机:就是把⼀一台物理理服务器器划分成多个“虚拟”的服务器器,每一个虚拟主机都可以有独立的域名和独立的目录

    目的是让一个web服务器发布多个网站

    基于IP的虚拟主机


    server {
    listen 192.168.10.42:80;
    location / {
    root html/abc;
    index index.html index.htm index.php;
    }
    }
    server {
    listen 192.168.10.52:80;
    location / {
    root html/cbd;
    index index.html index.htm;
    }
    }

     基于端口的

    server {
    listen 80;
    #server_name www.abc.com;
    location / {
    root html/abc;
    index index.html index.htm index.php;
    }
    }
    server {
    listen 8080;
    #server_name www.abc.com;
    location / {
    root html/cbd;
    index index.html index.htm;
    }
    }

    同一个ip下的不同端口

    基于域名的

    server {
    listen 80;
    server_name www.abc.com;
    location / {
    root html/abc;
    index index.html index.htm index.php;
    }
    }
    server {
    listen 80;
    server_name www.cbd.com;
    location / {
    root html/cbd;
    index index.html index.htm;
    }
    }

    小微企业 ------买网站空间

    不用买服务器就可以托管网站

     Ngnix的反向代理

    反向代理介绍:

    代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,
    再向主机发出,并接收目的主机返回的数据,存放在代理理服务器器的硬盘中,再发送给客户机。

    买车人   4s店   厂家

     堡垒机场景
    
    • 内网服务器器发布场景
    • 缓存场景

     反向代理原理

    • 1) 客户端通过浏览器器 发起请求 代理理服务器器
    • 2)代理理服务器器 接受请求
    • 3) 代理理服务器器 发起请求 业务服务器器
    • 4)业务服务器器 接受请求
    • 5)业务服务器器 处理理请求
    • 6) 业务服务器器 响应请求 代理理服务器器
    • 7)代理理服务器器 响应请求 客户端
    • 8)客户端通过浏览器器渲染请求并展示给⽤用户

    反向代理实现

    location / {
    index index.php index.html index.htm; #定义⾸首⻚页索引⽂文件的名称
    proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器器列列表
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m; #允许客户端请求的最⼤大单⽂文件字节数
    client_body_buffer_size 128k; #缓冲区代理理缓冲⽤用户端请求的最⼤大字节数,
    proxy_connect_timeout 90; #nginx跟后端服务器器连接超时时间(代理理连接超时)
    proxy_send_timeout 90; #后端服务器器数据回传时间(代理理发送超时)
    proxy_read_timeout 90; #连接成功后,后端服务器器响应时间(代理理接收超时)
    proxy_buffer_size 4k; #设置代理理服务器器(nginx)保存⽤用户头信息的缓冲区⼤大⼩小
    proxy_buffers 4 32k; #proxy_buffers缓冲区,⽹网⻚页平均在32k以下的话,这样设置
    proxy_busy_buffers_size 64k; #⾼高负荷下缓冲⼤大⼩小(proxy_buffers*2)
    proxy_temp_file_write_size 64k; #设定缓存⽂文件夹⼤大⼩小,⼤大于这个值,将从upstream服务器器传
    }

    Nginx限速

     

    限速介绍:

    • 限速该特性可以限制某个用户在⼀一个给定时间段内能够产生的HTTP请求数。请求可以简单到就是⼀一个对于主⻚页的GET请求或者一个登陆表格的POST请求。
    • 限速也可以用于安全目的上,⽐比如暴暴⼒力力密码破解攻击。通过限制进来的请求速率,并且(结合日志)标记出目标URLs来帮助防范DDoS攻击。
    一般地说,限流是用在 保护上游应⽤用服务器器不不被在同⼀一时刻的⼤大量量⽤用户请求湮没。

    应用场景

    • DDOS防御
    • 下载场景保护IO

    限速原理

    算法思想是:
    水(请求)从上方倒入水桶,从水桶下方流出(被处理理);
    来不不及流出的水存在水桶中(缓冲),以固定速率流出;
    水桶满后水溢出(丢弃)。
    这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。

    实现方式

    Nginx官方版本限制IP的连接和并发分别有两个模块:
    limit_req_zone 用来限制单位时间内的请求数,即速率限制。
    limit_req_conn 用来限制同一时间连接数,即并发限制。

    模式使用方法

    • limit_req_zone 参数配置
    • Syntax: limit_req zone=name [burst=number] [nodelay];
    • Default: —
    • Context: http, server, location

     Nginx URL重写 

    •rewrite模块(ngx_http_rewrite_module)
    • Rewrite功功能是Nginx服务器器提供的⼀一个重要功能。几乎是所有的web产品必备技能,⽤用于实现URL重写。URL重写是非常有用的功能,比如它可以在 我们在改变⽹网站结构后,不不需要客户端修改原来的书签,也不不需要其他⽹网站修改对我们⽹网站的友情链接,还可以在一定程度上提高网站的安全性,能够 让我们的网站显得更更专业。
    • Nginx服务器器Rewrite功能的实现是依赖于PCRE(Perl Compatible Regular Expression。Perl兼容的正则表达式)的支持,所以在编译安装Nginx之前, 需要安装PCRE库。

    应用场景

    • 域名变更更 (京东)
    • 用户跳转 (从某个连接跳到另⼀一个连接)
    • 伪静态场景 (便便于CDN缓存动态页面数据)

    实现:

    1) set    设置变量量
    2) if    负责语句句中的判断
    3) return  返回返回值或URL
    4) break   终止后续的rewrite规则
    5) rewrite  重定向URL

    set指令 ⾃自定义变量量
    Syntax:
    set $variable value;
    Default:
    —
    Context:
    server, location, if
    • 将http://www.ayitula.com 重写为 http://www.ayitula.com/baism
    location / {
    set $name baism;
    rewrite ^(.*)$ http://www.ayitula.com/$name;
    }

    Nginx优化 

    • 标准情况下,软件默认的参数都是对安装软件的硬件标准来设置的,⽬目前我们服务器器的硬件资源远远⼤大于要求的标准,
    所以为了了让服务器器性能更更加出众,充分利利⽤用服 务器器的硬件资源,我们一般需要优化APP的并发数来提升服务器器的性能。

     

     Nginx集群

     

    传统web访问模型

    单点故障解决方案

    • 1) 部署一台备份服务器器,宕机直接切换
    • 2) 部署多台服务器器,根据DNS的轮询解析机制去实现⽤用户分发
    问题:
    1方案:服务器器利利⽤用率低,成本⾼高,切换不不及时,服务器器压力力依然⼤大
    2方案: 优势是用户处理理速度得到了了提升,但是当其中一台故障,就会有一部分用户访问不不了了⽹网站

    集群概念

    • 将多个物理理机器器组成一个逻辑计算机,实现负载均衡和容错
    • 计算机集群简称集群,是一种计算机系统, 它通过一组松散集成的计算机软件或硬件连接起来⾼高度紧密地协作完成计算 工作。在某种意义上,他们可以被看作是一台计算机。 (百度解释)

    • 组成要素
    1)VIP: 一个IP地址 2)分发器器: nginx 3)数据服务器器: Web服务器器

     部署一个基于python语言的web发布环境

    1) 一门面向对象的语言
    2)拥有丰富的库
    3)可移植性
    4)免费、开源
    5)简单易易学
    可做软件开发、人工智能、web开发等等

    部署流程:

    Cnetos7.5+Nginx+python+Django+uwsgi+mysql
    实验部署流程
    1)安装Nginx
    2)安装python
    3)安装mysql
    4)部署发布平台
    5)测试

    1、前面已经安装了Nginx

    2、mysql_install(中小型公司)

    ⼀一个关系型数据库,由瑞典的AB公司开发,后来卖给了了oracle公司,⽬目前分为商业版和社区版
    ⽬目前有量量⼤大版本 mysql5 和 mysql8
    ⽬目前建议⼤大家先使⽤用5.7最新版本即可。官⽅方提供了了RPM和源码两种格式
    1)安装依赖包
    2) 升级cmake⼯工具
    3) 升级boost库⽂文件
    4) 安装mysql
    5) 启动测试
    mysql_install
    ⼀一、前期准备
    依赖包
    1)cmake命令 2.8以上
    https://cmake.org/download/
    boost Boost库是⼀一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进
    程的开发引擎之⼀一
    https://www.boost.org/
    mysql
    https://dev.mysql.com/downloads/mysql/5.7.html#downloads
    ⼆二、install
    yum -y install ncurses-devel gcc-* bzip2-*
    1)cmake install
    tar xf cmake-3.6.0-rc1.tar
    cd cmake-3.6.0-rc1
    ./configure
    make
    make install
    2)boost
    tar xf boost_1_59_0.tar.bz2
    mv boost_1_59_0 /usr/local/boost
    3)mysql
    useradd -s /sbin/nologin -r mysql
    mkdir -pv /usr/local/mysql/data
    tar xf mysql...tar.xx
    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/
    usr/local/mysql/data/ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
    -DDOWNLOAD_BOOST=0 -DWITH_INNODBBASE_STORAGE_ENGINE=1 -
    DENABLE_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -
    DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DWITH_DEBUG=0
    -DWITH_EMBEDED_SERVER=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/
    boost
    ##解释
    -DCMAKE_INSTALL_PREFIX 指定安装路路径
    -DMYSQL_DATADIR 指定存放数据⽂文件的⽬目录位置
    -DMYSQL_UNIX_ADDR 指定mysql.sock的路路径
    -DDOWNLOAD_BOOST=0 不不下载boost库⽂文件
    -DWITH_INNODBBASE_STORAGE_ENGINE=1 指定默认存储引擎
    -DENABLE_LOCAL_INFILE=1 允许客户端使⽤用local data
    local 导⼊入本地数据⽂文件
    -DEXTRA_CHARSETS=all ⽀支持所有字符集
    -DDEFAULT_CHARSET=utf8 默认字符集是UTF-8
    -DDEFAULT_COLLATION=utf8_general_ci 数据库校对规则
    -DMYSQL_USER=mysql 管理理⽤用户是mysql
    -DWITH_DEBUG=0 关闭debug
    -DWITH_EMBEDED_SERVER=0 ⽣生成⼀一个libmysqld.a(.so)的
    库,这个库同时集成了了mysql服务与客户端API
    -DWITH_BOOST=/usr/local/boost 指定boost的路路径
    make
    make install
    4)安装后操作
    cp support-files/mysql.server /etc/init.d/mysql
    chmod 755 /etc/init.d/mysql
    chown mysql.mysql /usr/local/mysql/ -R
    ln -sf /usr/local/mysql/bin/* /usr/bin/
    ln -sf /usr/local/mysql/lib/* /usr/lib/
    ln -sf /usr/local/mysql/libexec/* /usr/local/libexec
    ln -sf /usr/local/mysql/share/man/man1/* /usr/share/man/man1
    ln -sf /usr/local/mysql/share/man/man8/* /usr/share/man/man8
    /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/
    usr/local/mysql/ --datadir=/usr/local/mysql/data/
    修改配置⽂文件 确保路路径正确
    [root@web01 ~]# egrep -v "^#|^$" /etc/my.cnf
    [mysqld]
    datadir=/usr/local/mysql/data
    socket=/usr/local/mysql/mysql.sock
    symbolic-links=0
    [mysqld_safe]
    log-error=/var/log/mysql.log
    pid-file=/var/run/mysql.pid
    !includedir /etc/my.cnf.d
    5)启动mysql
    初始化 root@localhost: /q%Zpaoio5i1
    6)密码修改
    View Code

    先安装依赖

  • 相关阅读:
    浏览器—CORS 通信的学习总结
    前端算法
    移动端适配时对meta name="viewport" content="width=device-width,initial-scale=1.0"的理解
    react和vue的区别
    对xss攻击和csrf攻击的理解
    前端如何解决跨域
    你没那么重要
    五福
    天道
    决策
  • 原文地址:https://www.cnblogs.com/foremostxl/p/10267025.html
Copyright © 2020-2023  润新知