Nginx基本使用

73 阅读6分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

Nginx基本使用

Nginx基本使用

目录结构

基本运行原理 Nginx配置文件

解析域名

反向代理、正向代理模型

反向代理在系统架构中的应用场景

动静分离

目录结构

进入Nginx的主目录我们可以看到这些文件夹

image-20220823025526668

  • conf

用来存放配置文件相关

  • html

用来存放静态文件的默认目录 html、css等

  • sbin

nginx的主程序

基本运行原理

Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。worker进程主要处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。

image-20220823025600164

Nginx配置文件

image-20220823025733422

nginx.conf

去掉注释的简单版如下:

worker_processes  1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个
​
events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
    worker_connections  1024;
}
http {
    #文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;
​
    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on;
    
     #长连接超时时间,单位是秒
    keepalive_timeout  65;
 #虚拟主机的配置
    server {
    #监听端口
        listen       80;
        #域名,可以有多个,用空格隔开
        server_name  localhost;#配置根目录以及默认页面
        location / {
            root   html;
            index  index.html index.htm;
        }
    #出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
        
    }
}

解析域名

我们可通过购买域名来配置我们的ip地址,这里使用腾讯云简单演示。

腾讯云地址:腾讯云 - 产业智变 云启未来 (tencent.com)

image-20220823030324295

这里购买域名后,点击DNS解析。

image-20220823030435661

image-20220823030511748

简单配置一下这2个地方,就可以了,然后就可以通过域名访问你刚刚填入的ip地址了。(国内服务器ip需要备案)

反向代理、正向代理模型

正向代理

描述:正向代理意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后由代理向原始服务器转交请求并将获得的内容返回给客户端。

简单的说类似于采用校园网来访问网站:

image-20220823030641926

反向代理

描述:反向代理是指以代理服务器来接受连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器,而且整个过程对于客户端而言是透明的。

image-20220823030704458

隧道式代理:一进一出一个口

区别正向代理、反向:

都是站在客户端的角度,看代理服务器是帮客户端代理,还是帮服务端代理

反向代理在系统架构中的应用场景

image-20220823030803431

image-20220823030819364

使用proyx_pass进行代理配置

浏览器访问 http://127.0.0.1:80 就会跳转到 frozenpenguin.cn/,同时域名没有变化(不支持https),可以有多个server。

image-20220823031120654

负载均衡基本配置(轮询案例)

image-20220823031302499

httpds,负载均衡的name?,通过name匹配upstream?访问(localhost) http://127.0.0.1:80 ,反复刷新界面即可看到效果(雨露均沾)

负载均衡策略

  • weight:权重
  • down : 当前server暂不参与负载均衡
  • backup : 预留的备份服务器; 其它所有的非backup机器down或者忙的时候,请求backup机器。
  • max_fails : 请求失败次数限制
  • fail_timeout : 经过max_fails后服务暂停时间
  • max_conns : 限制最大的连接数

负载均衡调度算法

  • 轮询:默认算法按时间顺序逐一分配到不同的后端服务器;

  • 加权轮询:Weight值越大,分配到访问几率越高;

  • ip_hash:为每一个请求访问的IP的hash结果分配,可以将来自一个IP的固定访问一个后端服务器;

  • url_hash:需要安装模块安装访问的URL的hash结果来分配,这样每个URL定向到同一个后端服务器

  • least_conn:按照某台机器最少连接数的进行分配访问;

  • hash关键数值: hash 自定义 KEY

    这里就简单举个例子,具体的可以百度。

    方式1:权重

    权重指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如

upstream test {
  server blblccc.top:8081 weight=1;
  server blblccc.top:8080 weight=9;  #那么10次一般只会有1次会访问到8081,而有9次会访问到8080
} 

方式2: 轮询

RR(默认轮询)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉能自动剔除。

upstream test {
  server blblccc.top:8080;
  server blblccc.top:8081;
}
​
server {
  listen  81;
  server_name  blblccc.top;
  client_max_body_size 1024M;
  location / {
    proxy_pass http://test;
    proxy_set_header Host $host:$server_port;
  }
} 

动静分离

image-20220823031752138

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路;

HTML以及图片和css以及js放到wwwroot目录下

upstream test{
  server weiyigeek.top:8080;
  server weiyigeek.top:8081;
}
​
server {
  listen       80;
  server_name  weiyigeek.top;
  location / {
      root   e:wwwroot;//文件夹路径
      index  index.html;
  }
​
  # 所有静态请求都由nginx处理,存放目录为nginx中的html
  location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
      root    e:wwwroot;
  }
  # 例子,比如
  #location /css{
    #root html;
    #index index.html index.htm;
  #}
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   e:wwwroot;
  }
} 

例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了