nginx概述

news/2024/4/19 13:22:23/

文章目录

  • nginx特点
  • 安装
  • 操作
    • 使用systemctl管理的操作
    • 使用源码包安装的操作
  • nginx源码

nginx特点

  • 反向代理
    • 反向代理服务器需要能处理大量并发连接。Nginx就可以,所以Nginx适合做反向代理服务器
  • 负载均衡
  • 动静分离
    • Nginx实例处理大并发,时候做作为静态服务器,如果有动态请求,可以转发给上游服务器处理
    • 静态内容
      • 资源:图片,音乐,视频,
      • html,JavaScript,css
    • 动态内容:各种语言写的服务程序
  • 高性能、高并发
    • 单机Nginx可以轻松10w连接,如果机器性能还行,10w还远不是瓶颈。
    • Nginx使用reactor模式,一个进程可以处理多个请求。这与Apache服务器不同。
      • Apache服务器一个进程处理一个请求,所以通常会有几百个工作进程去处理请求,这样进程间切换的开销也会比较大。
      • Nginx一个worker进程处理的请求数量取决于内存大小,一般Nginx开启的worker进程数量等于机器CPU的核心数(最好每一个worker进程绑定一个cpu核心,可以使用worker_cpu_affinity参数进行绑核(这个配置仅仅对linux操作系统有效)),这样进程间切换的代价非常小。
      • Nginx一个worker进程内部也只有一个线程,所以Nginx使用全异步的方式来处理请求。
  • Nginx核心框架非常小巧(1.22.1版本的Nginx核心源码只有7M多点,而uwsgi源码都有6M)。所以Nginx主要功能都由模块来实现
  • Nginx也是master进程+worker进程的方式启动
    • master进程不会对用户请求提供服务,而是用于提供管理服务,和监控worker进程,当worker进程挂掉,会拉起worker进程(和uwsgi的master进程类似);也为管理员提供命令行服务,如:启动服务、停止服务、重载配置文件等。
    • worker进程是真正处理用户请求的进程。
  • 热部署
    • nginx支持代码热部署(不停机更新二进制文件)、日志重新加载(可以实现日志轮转)、配置热加载。
    • 日志重新加载(可以实现日志轮转)、配置热加载很多服务器应该也要支持。

安装

  • centos:yum install nginx
  • 也可以在官网下载源码tar包去安装
    • ./configure && make && make install 即可

操作

使用systemctl管理的操作

  • 启动
    • sudo systemctl enable nginx
    • sudo systemctl start nginx
  • 停止
    • sudo systemctl stop nginx
  • 检查状态
    • sudo systemctl status nginx

使用源码包安装的操作

  • 启动
    • ./nginx
  • 更改配置重启nginx
    • ./nginx -s reload
  • 关闭
    • ./nginx -s stop
  • 判断配置文件是否正确
    • nginx -t -c /usr/local/nginx/conf/nginx.conf
    • 或者./nginx -t

nginx源码

nginx-1.22.1版本有198427行c代码(包含头文件)。约20w代码了。

  • 参考:理解nginx源码

http://www.ppmy.cn/news/1365056.html

相关文章

[C++]C++实现本地TCP通讯的示例代码

这篇文章主要为大家详细介绍了C如何利用TCP技术,实现本地ROS1和ROS2的通讯,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下 概要服务端代码 头文件源代码客户端代码 概要 利用TCP技术,实现本地ROS1和ROS2的通讯。 服务端代码 头文件 #include &…

golang的反射探索

1、golang中反射常用的场景 1》类型检查—通用类包或者函数的时候,在运行时可以动态的获取任意对象的类型信息 2》动态调用方法—运行时动态的选择使用哪个方法 3》结构体标签处理—结构体字段一般是通过tag来注解。运行时可以通过反射读取tag。常用于解析配置文件&…

project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, string

家人们,遇到了一个新的报错 于是从网上找了各种方法,有说把开发者工具关闭重启的,有说开发者工具下载重新下载的,有说开发者工具路径安装得在C盘的,均没有效果 解决方法: 1、运行项目,在开发者…

OSX逆向分析基础

文章目录 前言OSX基础工具方法动态调试附录参考链接 前言 如果你想真正成为软件高手,就得了解底层运作机制。逆向,不会让你成为扎克伯格或张一鸣,但或许能让你成为安全专家。 OSX基础 Mac OS X下二进制可执行文件的动态链接库是dylib文件。…

Flink Catalog

1.Flink侧创建 按照SQL的解析处理流程在Parse解析SQL以后,进入执行流程——executeInternal。   其中有个分支专门处理创建Catalog的SQL命令 } else if (operation instanceof CreateCatalogOperation) {return createCatalog((CreateCatalogOperation) operatio…

通过一个例子演示golang调用C语言动态链接库中的函数

本例提供了cgo调用C函数的示例,也演示了如何将C函数打印内容保存到golang的变量中 目录和源码 目录结构 adminhpc-1:~/go/my_stdout$ tree . ├── include │ ├── mylibrary.c │ └── mylibrary.h ├── lib └── main.go2 directories, 3 files a…

Android 框架设计模板

不同项目在使用该模板时多少会有出入,应以项目实际情况作为依据。 (该文档可以 .md 格式存放于项目根目录,或编写到readme 中) 项目描述 涉及如下方面 项目背景 (可引用项目立项书)项目需求 &#xff08…

【kubernetes】关于k8s集群的声明式管理资源

目录 一、声明式管理方法 二、资源配置清单管理 1、导出资源配置清单 2、修改资源配置清单并应用 2.1离线修改 2.2在线修改 三、通过资源配置清单创建资源对象 获取K8S资源配置清单文件模板? 关于配置清单常见的字段 方案一:手写yaml配置文件 …

QT C++实践|超详细数据库的连接和增删改查操作|附源码

0:前言 🪧 什么情况需要数据库? 1 大规模的数据需要处理(比如上千上万的数据量)2 需要把数据信息存储起来,无论是本地还是服务上,而不是断电后数据信息就消失了。 如果不是上面的原因化,一般…

学习JAVA的第四天(基础)

目录 方法 方法的定义 方法的调用 参数 注意事项 方法的重载 练习 面向对象 类和对象 定义类的注意事项 封装 private关键字 this关键字 构造方法 标准的Javabean类 创建一个对象时,虚拟机做了什么? 方法 方法含义:方法是程序…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写,使用了vue框架。该系统从三个对象:由管理员和用户、店铺来对系统进行设计构建。主要功能包括:个人信息修改,对用户、店铺、二…

【面试题】在浏览器地址栏输入URL后会发生什么

1. 地址栏输入后的本地操作 当我们在浏览器的地址栏中,输入xxx内容后,浏览器的进程首先会判断输入的内容: 如果是普通的字符,那浏览器会使用默认的搜索引擎去对于输入的xxx生成URL。如若输入的是网址,那浏览器会拼接…

golang使用gorm操作mysql1

1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库,启动服务的时候,init方法就会执行 func init() {username : "roo…

binwalk安装记录和burpsuite安装记录

我的虚拟机环境是Ubuntu20.04 python有2.7的和3.8的 [[#binwalk|binwalk]] [[#binwalk#pip|pip]][[#binwalk#安装 sasquatch|安装 sasquatch]][[#binwalk#安装 jefferson|安装 jefferson]][[#binwalk#安装 ubi_reader|安装 ubi_reader]][[#binwalk#安装 yaffshiv|安装 yaffshi…

2.26作业

2.将信号灯集的函数二次封装 sem.c #include<myhead.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminfo *__buf;…

Eigen-Array数组类和系数式运算

Array数组类和系数式运算&#xff09; 一、概述二、数组类型三、访问数组中的值四、加减法五、乘法六、其他系数相关的操作七、数组和矩阵表达式之间转换 一、概述 Array类提供了通用数组&#xff0c;而Matrix类则用于线性代数。此外&#xff0c;Array类提供了一种简单的方法来…

Linux中死锁种类和解决方法

死锁&#xff1a; 第一种&#xff1a; 加了两次锁&#xff0c;导致还没解锁就想获得锁&#xff0c;一直阻塞&#xff1a; void*mythread(void *arg) {int n5000;int x;while(n--){pthread_mutex_lock(&mutex);pthread_mutex_lock(&mutex);xnumber;x;numberx;pthread…

如何选购油烟净化器?环保性能与个人需求的完美契合

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在选择油烟净化器时&#xff0c;环保性能与个人需求的完美契合至关重要。下面&#xff0c;让我们一起探讨如何选购适合自己的油…

初识Lombok

前言 最近读一些公司的业务代码&#xff0c;发现近几年的java项目工程中都使用了lombok&#xff0c;lombok是一个可以自动生成get,set、toString等模板类方法的工具框架&#xff0c;程序再引入lombok后&#xff0c;添加一个注解便可以不写get\set\toString等方法。 Lombok示例…

蓝桥杯Learning

Part 1 递归和递推 1. 简单斐波那契数列 n int(input())st [0]*(47) # 注意这个地方&#xff0c;需要将数组空间设置的大一些&#xff0c;否则会数组越界 st[1] 0 st[2] 1 # 这个方法相当于是递推&#xff0c;即先求解一个大问题的若干个小问题 def dfs(u):if u 1:print(…