Nginx 基础

Posted by Beyonderwei on 2020-08-03
Words 1.6k and Reading Time 6 Minutes
Viewed Times

一、简介

高性能的HTTP和反向代理服务器,占用内存少,并发能力强,为性能优化而开发,并发连接数高达五万。支持热部署,不间断运行。专门用来做静态资源服务器

相关概念

  • 正向代理:用户通过浏览器配置代理服务器,然后通过访问代理服务器的方式来访问互联网中的远程服务器。

  • 反向代理:客户端无需做任何配置,只需要将请求发给反向代理服务器,由反向代理服务器去选择目标服务器获取数据,再返回给客户端,对外暴露代理服务器,反向代理服务器实现了将真实服务器IP地址隐藏。

  1. 负载均衡:实现路由分发,将请求分发到不同的服务器。
  2. 动静分离:把动态页面静态页面由不同的服务器来解析,加快解析速度,降低服务器压力。后端部署时,将静态资源与动态资源分开部署,由Nginx来根据客户端不同请求来访问。
  3. 高可用

二、Docker安装Nginx

预安装

说明: Nginx的运行依赖pcre、zlib、OpenSLL库,

  • pcre:pcre库支持正则表达式,Nginx的配置文件以及Nginx的HTTP模块需要使用它来解析正则表达式。

    安装命令:sudo apt install libpcre3-dev

    查看版本:pcre-config --version

  • zlib:zlib库用于对HTTP包的内容做gzip格式的压缩,通过在Nginx中配置gzip on指定某些响应内容使用gzip压缩来减少网络传输量。

    安装命令:sudo apt install zlib1g-dev

    查看版本:``

  • OpenSLL:用来支持https(Ubuntu系统默认已经安装)。

    安装命令:sudo apt-get install openssl libssl-dev

    查看版本:openssl version

安装Nginx

  1. 运行命令:最好通过数据卷映射的方式映射配置文件,不然需要在容器内安装vim。

    docker run --name my-nginx -p 8080:80 -d 镜像名

    • —name:容器名
    • -p:端口号
    • -d:后台运行

    通过宿主机配置文件映射方式启动容器(无法访问问题):

    docker run --name my-nginx -p 80:80 -v /xuwei/mynginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /xuwei/mynginx/conf/default.conf:/etc/nginx/conf.d/default.conf -d nginx

  2. 进入容器:

    docker exec -it 容器ID bash

  3. 启动nginx(执行位置:cd usr/local/sbin

    nginx

  4. 配置文件地址:nginx.conf

    cd etc/nginx

Nginx命令

命令执行位置

​ 所有的命令在进入容器后,进入下面的目录:

cd usr/local/sbin

常用命令

  1. 查看版本号

    nginx -v

  2. 停止运行(会直接停止容器)

    nginx -s stop

  3. 启动nginx(重新开启容器)

    docker start 容器ID

  4. 重新加载(不会重启,在改了配置文件后执行,会重新加载配置文件)

    nginx -s reload

配置文件

注:Docker 中 default.conf 与 nginx.conf 将配置文件一分为二,default.conf 即原配置文件中 http server块。

全局块

  • 位置:配置文件开始到events之间的部分
  • 作用:会影响nginx整体运行的哦欸之指令
  • worker_processes 1; 表示支持的并发数。

events块

  • 作用:涉及的内容影响Nginx服务器与用户的网络连接
  • worker_connection 1024; 支持最大的连接数

http块(用的最多)

http全局块
  • 位置:http块中server之前的内容
http server块
  • 位置:http块中server中的内容

三、反向代理

直接反向代理

即 http server 块中的location /{ }

1
2
3
4
5
location / {
root html;
proxy_pass 要代理的网址;
index index.html index.htm;
}

根据不同的路径进行反向代理

根据请求路径中包含的内容来分别代理到不同服务器。

1
2
3
4
5
6
7
location ~ /user/ {
proxy_pass 要代理的网址;
}

location ~ /exercise/ {
proxy_pass 要代理的网址;
}

四、负载均衡

说明:

​ 相当于对我访问的接口的ip和端口进行了替换,如nginx服务器的ip为118.25.50.72,则当访问:118.25.50.72:5000/api/user/query 时,将118.25.50.72:5000替换成192.168.1.101:8080或192.168.1.102:8080。

  1. 在 http 全局块内添加:(ziyue为项目名字)

    1
    2
    3
    4
    5
    upstream ziyue {
    # 服务器负载列表
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    }
  2. 在 server 的 location 中添加upstream

    1
    2
    3
    4
    5
    location / {
    proxy_pass http://ziyue;
    root html;
    index index.html index.htm;
    }

请求策略:

  1. 轮询:是默认的策略,当某个服务器宕掉时,nginx会自动将它删除。

  2. 权重策略:

    在每个配置后加一个权重,默认值为1;根据权重分配,即按照权重比例分配。

    1
    2
    3
    4
    5
    upstream ziyue {
    # 服务器负载列表
    server 192.168.1.101:8080 weight=4;
    server 192.168.1.102:8080 weight=2;
    }
  3. ip_hash策略:

    直接加上ip_hash,按照每个请求的hash结果进行分配,这样每个访客固定的访问一个后端服务器,可以解决共享session问题。

    1
    2
    3
    4
    5
    6
    upstream ziyue {
    ip_hash;
    # 服务器负载列表
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    }
  4. fair方式:

    按照服务器的响应时间来分配,响应时间短的优先被分配

    1
    2
    3
    4
    5
    6
    upstream ziyue {
    fair;
    # 服务器负载列表
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    }

五、动静分离

什么是动静分离

动态与静态请求分开,不是简单的将动态界面和静态界面分开,即将动态请求和静态请求分开,即用Nginx处理静态界面,用tomcat处理动态界面。

常用的静态资源服务器:Nginx,node,anywhere。

架构图

实现方式

  1. 将静态资源单独部署到一个服务器上,动态请求单独部署到另外的独立服务器的tomcat中。
  2. 动态请求和静态请求混合部署,通过nginx将其分开。(不推荐

实现原理

通过 location指定不同的后缀名,实现不同的请求转发,通过 expires 参数设置,可以设置资源在浏览器缓存的过期时间(如1d),加快访问速度,适合不经常变动的资源。缓存资源的返回码为 304。

配置方式

资源放置:

  1. 在系统中 /data/xxx/ 目录下放置 a.html文件,配置如下:

在http server块添加内容:

1
2
3
4
5
location /xxx/ {
root /data/;
index index.html index.htm;
expires 1d;
}

访问:http://192.168.101:8000/xxx/a.html 即可访问到该资源。


本文为作者原创文章,未经作者允许不得转载。

...

...

00:00
00:00