Py学习  »  NGINX

Nginx是什么?怎么用?(新手入门版)教程

Object_de_Father • 3 年前 • 284 次点击  

一、Nginx介绍

1.1 引言

  • 为什么要学习Nginx?
  • 问题场景:
    1. 客户端到底要将请求发送至哪台服务器?
    2. 如果所有请求都发送到了服务器1,那么其他的服务器貌似都没什么用

服务器搭建集群后:
在这里插入图片描述
服务器搭建集群后,使用Nginx做反向代理服务器
在这里插入图片描述

1.2 Nginx背景

  • Nginx是由俄罗斯人研发的,应对Rambler的网站,并且2004年发布了第一个版本
  • Nginx的特点:
    1. 稳定性极强。7*24小时不间断运行。
    2. Nginx提供了非常丰富的配置实例。
    3. 占用内存小,并发能力强
    4. 能承受5w并发

二、Nginx安装(重点来喽)

2.1 安装Nginx

思路:使用docker在linux服务器上安装,如果没有docker可参考 ↓↓↓(温馨提示:超简单)

https://blog.csdn.net/Object_de_Father/article/details/109427164

下面我们撸起袖子开始干代码:

version: '3.1'
services:
  nginx:
	 restart: always
	 image: daocloud.io/library/nginx:1.13.0-alpine
	 container_name: nginx
	 ports:
	 	- 80:80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.2 Nginx的配置文件

user  nginx;
worker_processes  1;	//这个值的大小和并发量有关系,值越大支持并发量越大

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;//这个值的大小和并发量有关系,值越大支持并发量越大
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

- nginx.conf 1/32 3%

  • 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
  • 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

2.3修改Docker-compose文件

version: '3.1'
services:
  nginx:
    restart: always
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - /root/app/nginx/conf.d/:/ect/nginx/conf.d
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

三、Nginx的反向代理

3.1 正向代理

  1. 正向代理时由客户端设立的。
  2. 客户端了解代理服务器和目标服务器都是谁。
  3. 帮助咱们突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址。

3.2 反向代理

  1. 反向代理服务器适配实在服务端的。
  2. 客户端是不知道访问的到底是哪一台服务器。
  3. 达到负载均衡,并且可以隐藏服务器真正的ip地址

3.3 基于Nginx实现反向代理

  1. 准备一个目标服务器(tomcat)。
  2. 编写nginxdd的配置文件,通过nginx访问到tomcat服务器
server{
    listen 80;
    server_name localhost;
    #基于反向代理访问到tomcat服务器
    location / {
        proxy_pass http://网址:8080/;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.4 关于Nginx的location路径映射

# 1.精准匹配,例如www.baidu.com就能匹配到,www.baidu.com/×××就不行
location = / {
    # 匹配和定制规则完全相同的路径,优先级最高
}

# 2.通用匹配
location /××× {
    # 匹配所有以/×××开头的路径
}

#3.正则匹配
location ~/××× {
    # 匹配所有以/×××开头的路径,优先级要高于通用匹配
}

#4.匹配开头路径
location ^~ /laojiang/{
    # 匹配所有以laojiang开头的路径,优先级高于正则匹配
}

#5.匹配指定格式路径
~*\.(gif|jpg|png)$ {
    # 匹配以gif或者jpg或者png为结尾的路径
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

四、Nginx的负载均衡

4.1 Nginx默认提供了三种负载均衡策略:

  1. 轮询法
    1. 将客户端发起的请求,平均的分配给每一台服务器。
  2. 加权法
    1. 会将客户端的请求,根据服务器的权重值不同,分配不同的数量。
  3. ip_hash法(源hash法)
    1. 基于发起请求的客户端的ig地址不同,他始终会将请求发送到指定的服务器上。|

4.2 轮询法

  • 想要实现Nginx轮询负载均衡机制只需在文件中添加以下内容

    upstream 自定义名称 {
        server 路径(ip:port);
        server 路径(ip:port);
        ...
    }
    server{
        listen 80;
        server_name localhost;
        
        location / {
            proxy_pass http://上面upstream的名称/;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

4.3 加权法

  • 实现加权法的方式。在轮询法的基础之上进行

    upstream 自定义名称 {
        server 路径(ip:port) weight 加权数;//这里就是和轮询法重要的区别
        server 路径(ip:port) weight 加权数;
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

4.4 ip_hash法(源hash法)

  • 实现ip_hash法(源hash法)的方式。在轮询法的基础之上进行

    upstream 自定义名称 {
        ip_hash;	//加在在这里哦
        server 路径(ip:port);
        server 路径(ip:port);
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

五、Nginx的动静分离

  • Nginx的并发公式:
    • worker_processes * connections / 4 | 2 =Nginx最终的并发能力
    • 原因:动态资源需要 / 4 ,静态资源需要 / 2
    • Nginx通过动静分离,来提升Nginx的并发能力,更快的给用户响应

5.1 动态资源代理

# 配置如下
location / {
    proxy_pass 路径;
}
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

5.2 静态资源代理

# 配置如下
location / {
    root 静态资源路径;
    index 默认访问路径下的什么资源;
    autoindex on; #代表以列表的形式展示静态资源下的全部内容
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74830
 
284 次点击