社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

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

Object_de_Father • 4 年前 • 382 次点击  

一、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
 
382 次点击