Liang2uv's blog Liang2uv's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • 面试总结
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 小程序笔记
    • TypeScript笔记
    • 数据结构笔记
    • mongoDB笔记
    • nginx笔记
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • 关于
  • 作品集

Liang2uv

我也想成为前端大佬
首页
  • 前端文章

    • JavaScript
    • Vue
    • 面试总结
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 小程序笔记
    • TypeScript笔记
    • 数据结构笔记
    • mongoDB笔记
    • nginx笔记
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • 关于
  • 作品集
  • JavaScript文章

  • Vue文章

  • 学习笔记

    • 《JavaScript教程》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 小程序笔记
    • TypeScript笔记
    • 数据结构笔记
    • mongoDB笔记
    • nginx笔记
      • 下载与安装
      • 防火墙相关
      • nginx常用命令
      • nginx的配置文件
      • nginx配置实例-反向代理
      • nginx配置实例-负载均衡
      • nginx的动静分离
      • nginx的高可用
      • nginx的原理
  • 面试总结
  • 前端
  • 学习笔记
Liang2uv
2019-12-03

nginx笔记

# nginx笔记

# 下载与安装

  1. 官网下载nginx和pcre压缩包

  2. 安装pcre依赖

    • 先解压tar -xvf pcre2-10.34.tar.gz

    • 进入解压的文件cd pcre2-10.34

    • 执行配置./configure

    • 编译并安装make && make install

    • 查看版本号pcre-config --version

  3. 安装其他依赖yum -y install make zlib zlib-devel gcc c++ libtool openssl openssl-devel

  4. 安装nginx

    • 先解压tar -xvf nginx-1.16.1.tar.gz
    • 执行配置./configure
    • 编译并安装make && make install
    • 安装成功之后/usr/local/nginx/sbin文件夹
  5. 启动nginx,cd /usr/local/nginx/sbin,执行./nginx,查看进程ps -ef | grep nginx

  6. 在/usr.local/nginx/conf目录下有nginx.conf配置文件

# 防火墙相关

  1. 开启防火墙systemctl start firewalld
  2. 查看防火墙状态systemctl status firewalld
  3. 查看防火墙开放端口firewall-cmd --list-all
  4. 永久开放httpfirewall-cmd --add-service=http --permanent
  5. 开放某个端口firewall-cmd --add-port=80/tcp --permanent
  6. 关闭某个端口号firewall-cmd --remove-port=80/tcp --permanent
  7. 重启防火墙firewall-cmd --reload
  8. 关闭防火墙systemctl stop firewalld

# nginx常用命令

前提条件:进入/usr/local/nginx/sbin目录中

  • 查看nginx版本号:./nginx -v
  • 启动nginx:./nginx
  • 关闭nginx:./nginx -s stop
  • 重新加载nginx(改了nginx.conf就重新加载):./nginx -s reload

# nginx的配置文件

  • 所在位置:/usr/local/nginx/conf/nginx.conf

  • 文件组成与说明:

    ### ----------------- start 全局块 --------------------------
    ### 全局块从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令
    
    #user  nobody;
    worker_processes  1; ### worker_processes值越大,可以支持的并发处理量越大
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    ### ----------------------- end 全局块 ---------------------------
    ### ----------------------- start events块 --------------------
    ### events块主要影响nginx服务器与用户的网络连接
    
    events {
        worker_connections  1024; ### 支持的最大连接数
    }
    
    ### -------------------- end events块 ----------------------------
    
    ### ----------------------- start http块 --------------------
    ### 服务器配置最频繁的一部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
    ### http块包含http全局块和server块
    ### (1)http全局块: 文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等
    ### (2)server块:和虚拟主机有密切相关,里面包括了全局server和location
    http {
        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"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #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;
    
            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;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # 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
            #
            #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 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;
        #    }
        #	}
    }
    ### ----------------------- end http块 --------------------
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125

# nginx配置实例-反向代理

# 实例一

  1. 实现效果:

    (1)打开浏览器,输入www.123.com,跳转到linux中的某个主页,这里以http://106.54.2.108:3000为例

  2. 访问过程分析:

  1. 配置windows的host文件,C:\Windows\System32\drivers\etc\host,打开host在最后一行添加106.54.2.108 www.123.com

  2. 在nginx配置反向代理

    (1)server_name改成nginx接收的ip地址,端口是80

    (2)location配置转发路径,即实现服务器ip

  3. 重启nginx./nginx -s reload

# 实例二

  1. 实现效果: (1)访问http://106.54.2.108:9001/edu/,直接跳转到127.0.0.1:8080

    (2)访问http://106.54.2.108:9001/vod/,直接跳转到127.0.0.1:8081

  2. nginx的配置:

    • location说明:

      location [= | ~ | ~* | ^~] uri {
      }
      
      1
      2
      1. = : 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理请求
      2. ~ : 用于uri前包含正则表达式,并且区分大小写
      3. ~* : 用于uri前包含正则表达式,并且不区分大小写
      4. ^~ : 用于不含正则表达式的uri前,要求nginx服务器找到标识uri和关键字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

# nginx配置实例-负载均衡

  1. 实现效果:

    (1)浏览器地址栏输入地址http://106.54.2.108:9001/fzjh/,负载均衡效果,平均到8080和8081端口中

  2. 先在配置文件中创建upstram,里面配置srever存放负载均衡的服务器

  3. 在nginx服务器server里的location配置proxy_pass为http://你的创建的upstream名称

  • 负载均衡分配策略:

    1. 轮询(默认)

      每个请求按时间顺序逐一分配到不同服务器,如果服务器down掉,能自动删除

    2. 权重weight

      权重越高,被分配的几率越大

      upstream myserver {
             server 127.0.0.1:8080 weight=5;
             server 127.0.0.1:8081 weight=10;
      }
      
      1
      2
      3
      4
    3. ip_hash

      每个请求访问按ip的hash结果进行分配,这样每个访客固定访问一个后端服务器,可以解决session问题

      upstream myserver {
             ip_hash;
             server 127.0.0.1:8080;
             server 127.0.0.1:8081;
      }
      
      1
      2
      3
      4
      5
    4. fair方式

      按照后端服务器的响应时间进行分配,响应时间越短的优先分配

      upstream myserver {
             fair;
             server 127.0.0.1:8080;
             server 127.0.0.1:8081;
      }
      
      1
      2
      3
      4
      5

# nginx的动静分离

# 什么是动静分离

  • 简单来说就是不动态请求和静态请求分离开,而不是简单的把静态资源和动态资源物理分离,目前实现动静分离的方式分为两种:一是把静态文件放在一个独立的服务器,动态资源放在另一个服务器。二是动态和静态文件混合发布,使用nginx区分开。

  • 通过location可以指定不同的后缀名实现不同的请求转发,通过expries参数设置,可以设置浏览器缓存时间,减少与服务器之间的请求和流量。具体expries定义:是给一个资源设置一个过期时间,无需服务器去验证,直接通过浏览器自身确认是否过期即可。

# 实例

  1. 实现效果:

    通过http://106.54.2.108:9001/www/可以访问到服务器上的/data/www文件夹下文件,通过http://106.54.2.108:9001/image/可以访问到服务器上的/data/images文件夹下文件

  2. 分别创建文件夹/data/www和/data/images,分别往里面放置html文件和图片文件

  3. 配置nginx

  4. 注意:使用root配置的实际资源路径是root + location,但是使用别名alias配置的实际路径就是alias

# nginx的高可用

# 什么是高可用

  1. 需要两台服务器
  2. 需要keep-alive
  3. 需要虚拟ip

# nginx的原理

# master和worker

# worker如何工作

# 一个master和多个worker的好处

  1. 可以使用nginx -s reload热部署,利用nginx热部署操作

  2. 每个worker是一个独立的进程,不需要加锁,如果有其中的一个worker出现了问题,其他worker可以继续进行争抢,实现请求过程,不会中断

  3. nginx同redis类型采用了io多路复用

  4. 每个worker数(worker_processes)和服务器cpu数量相等最为合适

  5. 连接数worker_connections

    • 发送请求,占用几个连接数?

      答案:2(普通静态访问的时候)或者4(有反向代理的时候)个

    • nginx有一个master,有四个worker,每个worker支持的最大连接数1024,那支持的最大并发数是多少?

      答案:①普通的静态访问的时候,最大并发数为:worker_connections * worker_processes / 2 ②HTTP作为反向代理来说,最大并发数为:worker_connections * worker_processes / 4

上次更新: 2020/12/06, 21:12:00
mongoDB笔记
面试总结

← mongoDB笔记 面试总结→

最近更新
01
第十章:排序
11-05
02
第九章:查找
11-05
03
第八章:图
11-05
更多文章>
Theme by Vdoing | Copyright © 2020-2021 Liang2uv | 桂ICP备19012079号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式