Nginx入门和使用

news2024/11/28 0:35:40

Nginx入门

基础

https://blog.csdn.net/weixin_40792878/article/details/83316519

快速入门

Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强

  • 代理:用于隐藏客户端或者目标服务器,是客户端和目标服务器的桥梁
    • 反向代理:反向代理可以隐藏原始服务器代理服务器来接受客户端的网络访问连接请求(此时代理服务器本质就是目标服务器),然后交由业务服务器进行处理;实现服务对于客户端的单向透明
      • img
    • 正向代理:正向代理可以隐藏客户端,本质就是客户端通过代理服务器访问目标服务端,代理服务器作为目标服务器的真实客户端进行访问;实现了客户端对于服务端的单向透明;(例如VPN和内网的网关服务器)
      • img

基础概念

  1. 文件目录
    • config:配置文件
    • sbin:程序
    • logs:日志
    • html:静态文件
  2. 配置文件
    • image-20220424200413688
    • nginx.conf:主配置文件
  3. Master-Worker模式
    • master进程:管理子进程、读取Nginx.conf配置文件
    • worker进程:业务进程(处理客户端请求)
      • 每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;

使用

  • .default:默认配置文件(用于还原)
  • fastcgi.conf:为了规范配置指令SCRIPT_FILENAME的用法,引入FastCGI变量传递配置。
  • scgi_params:Nginx在配置SCGI代理服务时会根据scgi_params文件的配置向SCGI服务器传递变量。
  • uwsgi_params:Nginx在配置uWSGI代理服务时会根据uwsgi_params文件的配置向uWSGI服务器传递变量。
主配置文件

Nginx.conf

  • user nginx;			  #用户
    worker_processes auto; #worker进程树
    error_log /var/log/nginx/error.log; #错误日志
    pid /run/nginx.pid;		#进程id
    
    #导入所有nginx的配置文件
    include /usr/share/nginx/modules/*.conf;
    
    #事件配置
    events {
        worker_connections 1024;
    }
    
    #http配置
    http {
        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;
    	
    	#tcp设置
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    	
    	#导入请求响应(响应数据的格式)的配置文件
    		#mime.types配置:文件格式和文件后缀名的映射
        include             /etc/nginx/mime.types;
        #默认格式
        default_type        application/octet-stream;
    
        include /etc/nginx/conf.d/*.conf;
    	
    	upstarem 组名 {
    		server ip:port <weight=number> <backup>
    		server ip:port <weight=number> <backup>
    		……
    	}
    	
    	#server配置:配置业务服务和代理URI的映射
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
            	proxy_pass http://ip:port; #配置业务处理服务器
            	root /www/index.html       #配置当前目录下处理(返回静态页面)。显然如果配置了proxy_pass将失效
            }
            
            
    		# 错误页面 响应码
            error_page 404 /404.html;
                location = /40x.html {
            }
            
    		# 错误页面 响应码
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    
    
  • 配置文件

    • img
    • main:服务器全局配置

      • 例如前面的worker数目、日志等
    • events:连接事件配置

      • Nginx 服务器与用户的网络连接配置
    • http:http配置

      • http全局块:主要配置TCP连接、响应

        • 包括文件引入MIME-TYPE 定义日志自定义连接超时时间、单链接请求数上限等。
      • server虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的

        • server全局块虚拟主机服务器配置(包括监听的端口等)

        • upstraem模块:配置业务服务器组名和服务器组的映射

          • upstarem 组名 {
            		# weight:设置服务权重(被调用的概率) backup:开启备份服务器
            		server ip:port <weight=number> <backup> 
            		server ip:port <weight=number> <backup>
            		……
            	}
            
        • location块设定URL和处理器的映射(通过proxy_pass或root进行映射)对特定的请求进行处理

          location / {
          			#检测http的header的referes是否存在,且为指定的域名/端口;主要是防盗链
          			#valid_referes <拒绝策略> 域名/ip <拒绝处理handler> 
          				#例如:valid_referes none 111.111.11.1;
                          #if($valid_referes) return 403;
                         
                       #URL重写;可以通过if(condition){…} 判断是否需要重写
                  	#rewrite    <regex>    <replacement>    [flag];
                  		#例如将所有http请求变为https请求
                  	#rewrite ^(.*) https://$server_name$1 redirect;
                       
                       
                  	proxy_pass http://ip:port; #配置直接指定业务处理服务器
                  	proxy_pass http://组名; #配置业务处理服务器组,由upstream决定业务服务器
                  	
          
                  	
                  	#root /www/index.html       #配置当前目录下处理(返回静态页面)。显然如果配置了proxy_pass将失效
                  }
          
mine配置文件
  • 配置响应数据的格式:Content-Type: XXX
types {
#格式 文件后缀名;没有配置,但是有该类型则需要在文件中配置,例如返回数据有MP3
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;
    
    #
    video/mp4                                        mp4;
    audio/mpeg                                       mp3;
    #application/octet-stream:下载
    application/octet-stream                         bin exe dll;
}

主要配置

负载均衡

  • 轮询(默认)

  • 权重

    • 直接在upstream设置server的weight
  • 响应时间

  • 最少连接数

  • hash

    image-20220424212147970

URL重写

https://blog.csdn.net/weixin_44953658/article/details/106314558

防盗链

配置语法

  • 前面学习了基本配置,下面介绍配置语法
  • 通过;设置指令的结束标记
  • 通过{}标记指令的作用域
  • 支持变量、if
  • 支持单位
    • 容量单位
    • 时间单位
    • image-20220425171043425
  • 变量数据类型
    • 字符串
    • 数值
    • map:前面的mimes的types就是hash表

网关

  • Nginx可以作为服务网关,并且进行:高可用和系统容错配置
    • 负载均衡
    • 限流
    • 安全

限流配置

  • 分布式理论学过:

    • 限流主要有三种思路:时间段分区分配、漏桶算法、令牌桶
    • 实现思路基本是:统计区+算法
    • ngnix(和sentinel类似)也是基于:AQS和连接数进行限流处理
  • 配置策略:算法 统计区

    • limit_conn_zone:连接数
    • limit_req_zone:请求数
    • ngx_http_upstream_module
    #限流策略:<请求/连接数> <key> zone=<共享内存(统计区)名>:<内存大小> <限流参数>
    
    #使用,一般在http定义,在具体的server/location中通过 共享内存(统计区)名调用
    	#通过请求数+请求的ip作为限流依据
    		#$binary_remote_addr:连接的ip地址的散列结果作为key
    limit_conn_zone $binary_remote_addr zone=perip:10m #perip统计区大小为10M
    		#$binary_remote_addr:连接的server作为key
    limit_conn_zone $server_name zone=perserver:10m #perserver统计区大小为10M
    server {
    	limit_conn perip 10; #每个ip最多10连接连接该server
    	limit_conn perserver 100; #每个server最多100有连接该server
    }
    
    
    
    #AQS限流
    limit_req_zone $server_name zone=req_one:10m rate=20r/s; 
    server {
        location / {
            limit_req zone=req_one; #相当漏斗限流(固定流速
            	#limit_req zone=myRateLimit burst=20; 相当于分区限流,若同时有21个请求到达,Nginx 会处理第一个请求,剩余20个请求将放入队列,然后每隔100ms从队列中获取一个请求进行处理。若请求数大于21,将拒绝处理多余的请求,直接返回503.
            	#limit_req zone=myRateLimit burst=20 nodelay;相当于令牌桶限流,最多有20个令牌,每rom都会添加令牌
            proxy_pass http://xxxxx;
     }
    }
    

服务网关

  • 微服务设置防火墙只允许ngnix服务器访问,所有服务必须通过ngnix才能访问
  • ngnix通过设置访问白名单,进行限制访问
#设置只允许某些IP访问 例如111.111.11.1 111.111.11.1
allow 111.111.11.1;
allow 111.111.11.11;
#设置禁止某些IP访问 例如 111.2222.33.0
deny 111.2222.33.0;

geo $limit {
 default 1;
 10.0.0.0/8 0;
 192.168.0.0/24 0;
 172.20.0.35 0;
}

map $limit $limit_key {
 0 "";
 1 $binary_remote_addr;
}

limit_req_zone $limit_key zone=myRateLimit:10m rate=10r/s

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

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

相关文章

通过案例来了解响应式开发(HTML,CSS)的视频控件

目录 前言 一、视频控件的使用方法 1.语法 二、部分属性 二、案例举例 三、播放效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5表单等功能方法的代码&#xff0c;这也是很多教材的一个典型案例&#xff1b; 2.本文将讲解涉及到…

腾讯轻联测试预览报错怎么办?

在腾讯轻联配置过程中&#xff0c;经常遇到测试预览失败的报错。首先我们整体介绍一下【测试预览】的作用。增加【测试预览】的节点的作用主要有两个&#xff1a; ● 第一个作用是为了保证我们应用连接能通畅&#xff0c;可以获取到数据&#xff0c;避免后续由于设置问题&…

IntelliJ IDEA安装及jsp开发环境搭建

一、前言 现在.net国内市场不怎么好&#xff0c;公司整个.net组技术转型&#xff0c;就个人来说还是更喜欢.net&#xff0c;毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用&#xff0c;双击sln即可打开项目&#xff0c;一直想吐槽为嘛java项目只能i…

Docker Registry 本地镜像发布到私有库

本地镜像发布到私有库流程 是什么1 官方Docker Hub地址&#xff1a;https://hub.docker.com/&#xff0c;中国大陆访问太慢了且准备被阿里云取代的趋势&#xff0c;不太主流。2 Dockerhub、阿里云这样的公共镜像仓库可能不太方便&#xff0c;涉及机密的公司不可能提供镜像给公…

【Spring Security】 入门实战

文章目录一、基本概念二、Spring Security第一个程序三、Spring Security没有生效四、修改默认账号密码&#xff08;appliction.yml&#xff09;五、修改默认账号密码&#xff08;配置类&#xff09;六、Spring Security的三个configure方法七、Spring Security的三种身份的验证…

Android 面试—深入理解Android类加载机制

前言 任何一个java程序都是由一个或者多个class文件组成&#xff0c;在程序运行时&#xff0c;需要将class文件加载到JVM中才可以使用&#xff0c;负责加载这些class文件的就是java的类加载机制。ClassLoader的作用简单的来说就是加载class文件&#xff0c;提供给程序运行时使…

结构体联合体sizeof内存求值 - 对齐数

讲解下struct和union的内存求值和对齐 以题目讲解 结构体联合体sizeof内存求值 - 对齐数不同位数下类型字节大小内存对齐规则struct 内存对齐求值嵌套struct内存对齐求值union的内存大小求值union大小计算准则struct嵌套union内存对齐求值不同位数下类型字节大小 一定要搞清楚…

【机器学习】P18 反向传播(导数、微积分、链式法则、前向传播、后向传播流程、神经网络)

反向传播反向传播反向传播中的数学导数与python链式法则简单神经网络处理流程从而理解反向传播神经网络与前向传播神经网络与反向传播反向传播 反向传播&#xff08;back propagation&#xff09;是一种用于训练神经网络的算法&#xff0c;其作用是计算神经网络中每个参数对损…

【Java虚拟机】JVM核心基础和常见参数实战

1.新版JVM内存组成部分和堆空间分布 JVM内存的5大组成&#xff08;基于JDK8的HotSpot虚拟机&#xff0c;不同虚拟机不同版本会有不一样&#xff09; 名称作用特点程序计数器也叫PC寄存器&#xff0c;用于记录当前线程执行的字节码指令位置&#xff0c;以便线程在恢复执行时能…

常见的DNS攻击与相应的防御措施

DNS查询通常都是基于UDP的&#xff0c;这就导致了在查询过程中验证机制的缺失&#xff0c;黑客很容易利用该漏洞进行分析。DNS服务可能面临如下DNS攻击风险&#xff1a; 黑客伪造客户端源IP地址发送大量的DNS请求报文&#xff0c;造成DNS request flood攻击。 黑客伪造成授权服…

MongoDB实现---存储机制

储存 GridFS机制 GridFS&#xff1a;将大文件分隔成多个小文档存放&#xff0c;这样我们能够有效的保存大文档&#xff0c;而且解决了BSON对象有限制的问题&#xff1b;通过两个集合实现&#xff1a;两个集合分别存储存储实际数据和存储文件的元数据&#xff1a; 元数据文件&…

一篇文章搞定《动手学深度学习》-(李沐)PyTorch版本的所有内容

目录 目录 简介 阅读指南 1. 深度学习简介 2. 预备知识 3. 深度学习基础 4. 深度学习计算 5. 卷积神经网络 6. 循环神经网络 7. 优化算法 8. 计算性能 9. 计算机视觉 10. 自然语言处理 环境 参考&#xff08;大家可以在这里下载代码&#xff09; 原书地址&#…

四结(4.13)多线程学习

今天又进行了一次学长授课&#xff0c;关于MySQL和JDBC本来学了增删查改操作&#xff0c;用IDEA也可以操作数据库&#xff0c;今天讲了一些数据库的规范&#xff08;三大范式&#xff09;、以及er图。了解了一下项目。 项目要分为客户端和服务端&#xff08;C/S&#xff09;来写…

vue面试题2023

1.$route和$router的区别? routes : 数组。 路由匹配规则 router &#xff1a; 对象。 路由对象 $router &#xff1a; 对象。 用于跳转路由 和 传递参数 $route &#xff1a;对象。 用于接收路由跳转参数 1.Vue的生命周期方法有哪些&#xff1f; - beforeCreate 初始化实…

科技云报道:“云减碳”成趋势,如何用“计算”帮助企业碳减排?

科技云报道原创。 将数据中心“丢进”水里、“扔进”山里&#xff0c;使用风能、太阳能等清洁能源为数据中心供电……这些都是通过物理方法为数据中心减碳。 数据中心的重要工作在于计算&#xff0c;计算导致了能源消耗&#xff0c;使其成为耗能大户&#xff0c;而通过云计算…

基于imx8m plus开发板全体系开发教程1:Windows/Linux 开发环境配置(连载中)

前言&#xff1a; i.MX8M Plus 开发板是一款拥有 4 个 Cortex-A53 核心&#xff0c;运行频率 1.8GHz;1 个 Cortex-M7 核心&#xff0c;运行频率 800MHz;此外还集成了一个 2.3 TOPS 的 NPU&#xff0c;大大加速机器学习推理。 全文所使用的开发平台均为与NXP官方合作的FS-IMX8…

Terraform 系列-什么是 IaC?

系列文章 &#x1f449; Terraform 系列文章 前言 聊到 Terraform, 必然绕不开 IaC 这个概念&#xff1f;那么&#xff0c;什么是 IaC? &#x1f914; 基本概念 基础架构即代码 (Infrastructure as Code, IaC) 是指通过代码而不是手动流程/控制台点击来管理和配置基础架构…

互联网+制造业:图扑数字孪生智慧工厂车间生产线

前言 随着信息技术、自动化技术和人工智能等技术的快速发展和应用&#xff0c;智能制造已成为全球制造业发展的主流趋势。智能制造是将智能化、自动化、数字化和网络化等技术手段运用到制造过程中&#xff0c;使生产过程具有高度智能化、自动化和数字化的特点&#xff0c;进而…

Linux安装宝塔,并实现公网远程登录宝塔面板【内网穿透】

文章目录前言1. 安装宝塔2. 安装cpolar内网穿透3. 远程访问宝塔4. 固定http地址5. 配置二级子域名6. 测试访问二级子域名转发自CSDN远程穿透的文章&#xff1a;Linux安装宝塔&#xff0c;并实现公网远程登录宝塔面板【内网穿透】 前言 宝塔面板作为建站运维工具&#xff0c;它…

网络编程2(套接字编程)

套接字编程UDP协议通信&#xff1a;TCP通信&#xff1a;套接字编程&#xff1a;如何编写一个网络通信程序 1.网络通信的数据中都会包含一个完整的五元组&#xff1a; sip&#xff0c;sport&#xff0c;dip&#xff0c;dport&#xff0c;protocol&#xff08;源IP&#xff0c;源…