nginx之使用与配置教程

news2024/11/24 23:11:39

目录

简介

优点

安装

目录结构

nginx.conf配置文件结构

server虚拟主机配置

listen

server_name

location

root

index

try_files

proxy_pass

使用

反向代理

配置语法

常用指令

proxy_pass

proxy_set_header

proxy_redirect

负载均衡

负载均衡策略

轮询(默认策略)

加权轮询

iphash

动静分离

服务器限流

正常限制访问频率

突发限制访问频率

限制并发服务数

缓存集成

proxy_cache_path

proxy_cache

算法

漏桶算法

令牌桶算法


简介

        nginx是一个高性能的http和反向代理的web服务器

正向代理

反向代理

优点

速度更快、并发更高:单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快

配置简单,扩展性强:由很多模块组成,这些模块的使用可以通过配置文件的配置来添加

高可靠:多进程模式运行,其中有一个master主进程和N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务

热部署:可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能

成本低:开源

安装

Nginx的官方网站为: nginx news

nginx有多种安装方式,本文章基于nginx的源码简单安装,其他安装方式不进行介绍。

1.进入官网查找下载版本链接地址

wget http://nginx.org/download/nginx-1.16.1.tar.gz

2.解压缩

tar -xzf nginx-1.16.1.tar.gz

3.进入资源文件中,寻找configure

./configure

4.编译

make

5.安装

make install

6.启停命令

进入nginx的安装目录:

cd /sbin

启动:

./nginx

停止:

./nginx -s stop

7.访问

ip+端口

看到这个画面说明启动正常

目录结构

[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf                             # Nginx所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   # Nginx主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相关参数文件
│   ├── scgi_params.default           #default结尾的都是备份文件
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # Nginx默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # Nginx日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # Nginx命令目录
│   └── nginx                        # 这是'nginx命令的目录'如Nginx的启动命令
├── scgi_temp                        # 临时目录
└── uwsgi_temp                       # 临时目录
————————————————

nginx.conf配置文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    {
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
    }
}

1.全局块:从配置文件开始到events块之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令

2.events块:配置影响nginx服务器或与用户的网络连接

3.http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置

4.server块:配置虚拟主机的相关参数,一个http中可以有多个server

5.location块:配置请求的路由,以及各种页面的处理情况

server虚拟主机配置

 server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

listen

用于配置网络监听

listen *:80 | *:8080 #监听所有80端口和8080端口
listen  IP_address:port   #监听指定的地址和端口号
listen  IP_address     #监听指定ip地址所有端口
listen port     #监听该端口的所有IP连接

server_name

用于虚拟主机的配置

1.基于域名的虚拟主机,通过域名来区分虚拟主机

需要建立/data/www目录,对应域名网站目录下新增index.html文件;

#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

格式:

server_name  name......;

对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开;可以使用通配符“*”

2.基于端口的虚拟主机,通过端口来区分虚拟主机

使用端口来区分,浏览器使用域名或ip地址:端口号 访问

#当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
     server {
        listen       8080;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

3.基于 IP 地址的虚拟主机配置

语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。

server_name  192.168.1.1

location

location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作

 location [ = | ~ | ~* | ^~] uri {
 
 }

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配

#优先级1,精确匹配,根路径
    location =/ {
        return 400;
    }
 
    #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
    location ^~ /av {
       root /data/av/;
    }
 
    #优先级3,区分大小写的正则匹配,匹配/media*****路径
    location ~ /media {
          alias /data/static/;
    }
 
    #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
    location ~* .*\.(jpg|gif|png|js|css)$ {
       root  /data/av/;
    }
 
    #优先7,通用匹配
    location / {
        return 403;
     }

root

文件存放地址

index

该指令用于设置网站的默认首页。

try_files

try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/example(其中 $root 是server快定义的)的文件,就直接把这个文件的内容发送给用户

proxy_pass

用于设置被代理服务器的地址

使用

反向代理

客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。简单理解为用户直接访问反向代理服务器就可以获得目标服务器的资源。这一过程叫反向代理

配置语法

Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析,该模块在安装Nginx的时候已经自己加装到Nginx中

常用指令
proxy_pass

该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式

server {
    listen 80;
    server_name localhost;
    location /server{

        #proxy_pass http://192.168.200.146;
        proxy_pass http://192.168.200.146/;
    }
}

当客户端访问 http://localhost/server/index.html
第一个proxy_pass就变成了http://localhost/server/index.html
第二个proxy_pass就变成了http://localhost/index.html

proxy_set_header

更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器

server {
        listen  8080;
        server_name localhost;
        location /server {
                proxy_pass http://192.168.200.146:8080/;
                proxy_set_header username TOM;
        }
    }

proxy_redirect

用来重置头信息中的"Location"和"Refresh"的值。

server {
    listen  8081;
    server_name localhost;
    location / {
        proxy_pass http://192.168.200.146:8081/;
        proxy_redirect http://192.168.200.146 http://192.168.200.133;
    }
}

负载均衡

将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性

http {
    upstream my_upstream {
        server server1.example.com;
        server server2.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://my_upstream;
        }
    }
}

负载均衡策略

轮询(默认策略)

可以理解为各个服务器权重都为1,每个请求会按时间顺序逐个被分配到不同的后端服务器:

    upstream backend {
        server localhost:9001;
        server localhost:9002;
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass http://backend/;
        }
    }

加权轮询

weight=number:用来设置服务器的权重,默认为1,权重数字越大,被分配到请求的几率越大

   upstream backend {
        server localhost:9001 weight=10;
        server localhost:9002 weight=5;
        server localhost:9003 weight=3;
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass http://backend/;
        }
    }

iphash

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上:

   upstream backend {
        ip_hash;
        server localhost:9001;
        server localhost:9002;
        server localhost:9003;
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass http://backend/;
        }
    }

动静分离

初衷是为了访问速度。像大图片、视频、CSS 这种静态资源,如果都放在同一个服务器,在请求的时候就会造成带宽压力,如果把这些静态资源分散到不同的服务器,配合CDN,就可以减少服务器的压力。

在配置文件里咱们创建三个 location 模块,分别路由图片,html、反响代理后端请求。达到将静态资源(图片和html资源)和动态资源(后端服务的请求)分离的目的:

    # ######## 动静分离开始 ########
    # 匹配图片
    location ~ .*\.(gif|jpg|pdf|jpeg|png)$ {
        expires    8h;
        root   /nginx/data/image;
    }
 
    # 匹配html文件
    location ~ .*\.(html)$ {
        root   /nginx/data/html;
    }
 
    # 拦截后台请求,正则匹配 api 路径
    location ~* ^/(lb) {
       # 配置代理地址
       proxy_pass http://myserver;
    }
    # ######## 动静分离结束 ########

服务器限流

nginx限流就是限制用户的请求速度,防止服务器受不了;有三种限流方式:

正常限制访问频率

限制一个用户发送的请求,Nginx多久接收一个请求。
Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的

#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
 
    #绑定限流维度
    server{
        location /seckill.html{
            limit_req zone=zone;    
            proxy_pass http://lj_seckill;
        }
  }

1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。

突发限制访问频率

限制一个用户发送的请求,Nginx多久接收一个;处理活动时候的突发流量时,可以设置能处理的超过设置的请求数外能额外处理的请求数

#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
 
    #绑定限流维度
    server{
        location/seckill.html{
            limit_req zone=zone burst=5 nodelay;
            proxy_pass http://lj_seckill;
        }
    }

增加:burst=5 nodelay,表示Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢回落,没有其他用户的请求就立即处理,有其他的请求的话Nginx就漏掉不接受请求。

限制并发服务数

Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置

http {
        limit_conn_zone $binary_remote_addr zone=myip:10m;
        limit_conn_zone $server_name zone=myServerName:10m;
    }
    server {
        location / {
            limit_conn myip 10;
            limit_conn myServerName 100;
            rewrite / http://www.lijie.net permanent;
        }
    }

配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。限流一般都是基于漏桶算法和令牌桶算法实现的

缓存集成

proxy_cache_path

        缓存就是数据交换的缓冲区,当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据。

http{
    proxy_cache_path /usr/local/proxy_cache keys_zone=itcast:200m  levels=1:2:1 inactive=1d max_size=20g;
}

1.path:缓存路径地址:/usr/local/proxy_cache

2.keys_zone:用来为这个缓存区设置名称和指定大小

keys_zone=itcast:200m  缓存区的名称是itcast,大小为200M,1M大概能存储8000个keys

3.levels:指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2

levels=1:2   缓存空间有两层目录,第一次是1个字母,第二次是2个字母
举例说明:
itheima[key]通过MD5加密以后的值为 43c8233266edce38c2c9af0694e2107d
levels=1:2   最终的存储路径为/usr/local/proxy_cache/d/07
levels=2:1:2 最终的存储路径为/usr/local/proxy_cache/7d/0/21
levels=2:2:2 最终的存储路径为??/usr/local/proxy_cache/7d/10/e2

4.inactive:指定缓存的数据多次时间未被访问就将被删除

inactive=1d   缓存数据在1天内没有被访问就会被删除

5.max_size:设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源

max_size=20g

proxy_cache

该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存

zone_name:指定使用缓存区的名称 

算法

漏桶算法

        漏桶算法是网络中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。漏桶算法提供的机制:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。

令牌桶算法

        令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送;令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌桶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发现一款好用的制作企业杂志网站/强推

除了展示企业的信息,企业杂志还可以成为员工展示自我、表达情感的电子书。你可以鼓励员工分享他们的故事、他们的想法、他们的创新。这样,企业杂志就成为了一个充满活力和创新的空间。 那么如何制作一本企业杂志呢?给大家推荐一款实用的网站&…

Hadoop3.3.4分布式安装

安装前提:已经配置好java环境,所有机器之间ssh的免密登录。 注意:下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意:NameNode和SecondaryNameNode不要安装在同一台服务器 注意:ResourceMan…

2013年01月09日 Go生态洞察:App Engine SDK与工作区(GOPATH)深度解析

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

电机应用-编码器

目录 编码器 增量式编码器 绝对式编码器 混合式绝对式编码器 旋转编码器原理 增量式编码器原理 绝对式编码器原理 编码器基本参数 分辨率 精度 最大响应频率 信号输出形式 编码器 用来测量机械旋转或位移的传感器,能够测量机械部件在旋转或直线运动时的…

16岁还是街头餐厅“洗碗妹”,46岁已成美国“三院士”,华人科学家李飞飞的美国之路

昨天群里大V分享了一本书《The Worlds I See》,我迫不及待的下载阅读了。 16岁,她还是美国街头餐厅的“洗碗妹”。 46岁,她已成为美国三大权威科学院院士、斯坦福教授、当代科技领军人物榜上,与乔布斯齐名的人物。 她就是华裔女科…

为什么要用kubernetes?

第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物…

requestAnimationFrame是什么?介绍 如何使用?适用场景?有哪些缺点和优点,兼容性怎么样?

文章目录 前言是什么?如何使用适用场景优点和缺点兼容性后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端系列文章 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技…

12周年庆|一文回顾思迈特十二年大事记

白驹过隙,转眼思迈特软件迎来了十二岁生日🎂 在中华文化里,十二是一个轮回,十二寓意着圆满。圆满代表着一种从容、自信、充满能量的状态。 任何一种圆满的状态,都不是一蹴而就的,都曾经经历过千锤百炼的磨砺…

BGP路由控制实验

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、IP地址配置 2、As 200 内部配置OSPF 3、建立BGP邻居关系 4、宣告网段,在BGP中传递网段 5、通过修改MED 使 R1 到达 192.168.2.0/24 网段的路由经过 R3 6、通过修改Preferred-value 属性,使 R4 …

PyCharm鼠标控制字体缩放

File->Settings->Keymap 右边搜索栏输入increase(放大),可以看到下面出现increase Font Size(放大字体尺寸),双击。 双击后出现几个选项,选择Add Mouse Shortcut,会出现一个页面给录入动作。 按住Ctrl同时鼠标向上滚动,该动…

从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)

🎏:你只管努力,剩下的交给时间 🏠 :小破站 从零开始,掌握Nacos 前言:前提:建表语句第一: 单节点搭建:第二: 集群搭建:第三&#xff1a…

使用VScode编译betaflight固件--基于windows平台

使用VScode编译betaflight固件--基于windows平台 1、使用git克隆betaflight的开源代码2、betaflight的代码框架分析:3、配置编译环境:4、VScode上编译 betaflight不仅可以在LInux上进行编译也可以在Windows上编译,本文主要介绍在windows平台上…

智能巡检软件哪个好?中小企业如何提升工作效率与质量?

在当今数字化、智能化的时代,智能巡检软件作为一种高效的工具,已经在各行各业得到了广泛的应用。它利用物联网、大数据、人工智能等技术,为巡检工作提供了全面的解决方案,帮助企业实现数据化、智能化管理,提高工作效率…

ts+vite报错:找不到模块“/src/.../...”或其相应的类型声明

问题描述 vuets项目开发时,通过绝对路径引入模块,发现ts报错:找不到模块“/src/script/game”或其相应的类型声明。ts(2307)。但是项目能正常运行。 原因 由于并没有配置代表src,结果通过绝对路径引入还是报错,于是换…

【渗透实战】木马免杀

先看效果(文中附源码) 思路 1.shellcode自身免杀 首先cs生成一个bin文件 再没有二开的情况下落地就会死 那么如何处理呢? 可以通过对shellcode进行加密和编码的方式,然后在内存中进行解密执行 这里介绍几种主流的编码和加密方式 编码方式: base64 sgn编码 加密方式: XO…

京东数据运营与分析:如何全面获取电商销售数据?

随着电商行业的快速发展,数据分析成为了电商运营中一个非常重要的环节,这一环往往能够帮助品牌方来提升销售业绩和管理效率。然而,如何获取到电商平台中详细、全面的销售数据是很多电商品牌方所关心的问题,事实上,第三…

跨境国际快递物流API:加速全球贸易的关键

引言 全球贸易的蓬勃发展在今日商业中扮演着至关重要的角色。而随着全球市场的扩大和商业界的日益复杂化,跨境国际快递物流API正成为推动全球贸易加速发展的关键因素。 为何说跨境国际快递物流API是加速全球贸易的关键? 连接全球商业网络 跨境国际快…

外汇天眼:你的交易技术分析,为什么不赚钱?

众所周知,交易圈分为两个派别,一个是基本面分析派,另外一个就是技术分析派。 无论哪个派别都有成功的案例。 今天我们主要来说一下技术分析,市场中,用技术分析来做交易的人有很多,但并不是人人都赚钱&#…

数据结构和算法八股与手撕

数据结构和算法八股文 第一章 数据结构 1.1 常见结构 见http://t.csdnimg.cn/gmc3U 1.2 二叉树重点 1.2.1 各种树的定义 满二叉树:只有度为0的结点和度为2的结点,并且度为0的结点在同一层上 完全二叉树:除了最底层节点可能没填满外&…

Looking for downloadable pre-built shared indexes关闭

这个功能很烦,把他关闭就行了 PyCharm的“Looking for downloadable pre-built shared indexes”是指PyCharm IDE中的一个功能,用于搜索和下载可共享的预构建索引。 这个功能的主要用途是帮助开发人员在开发过程中快速地获取和使用预构建的索引,以提高…