当前位置: 首页 > news >正文

Nginx的基础讲解之重写conf文件

一、Nginx

1、什么是nginx?

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

2、用于什么场景

Nginx适用于各种规模的网站和应用程序,特别是需要高并发处理和负载均衡的场景。

Nginx也常用于提供安全的HTTPS服务,以及作为邮件代理服务器。

国内常见的使用nginx的有:淘宝,京东,百度等。

3、nginx用在哪些具体的地方

nginx使用在网关的位置,也就是发送数据的位置。

4、nginx的组件

nginx使用 conf 配置。
nginx模块开发 handler,filter,upstream。
nginx源码 多进程网络,http状态机,多进程网络加锁。
nginx基础组件,线程池,内存池,原子,共享内存,string, list, hash, array。

二、nginx的conf文件

1、master和worker的关系

首先当我们下载好nginx后,我们要先启动一下

//nginx所咋的位置,其中包括sbin、html、conf文件。
/usr/local/nginx//我们在这里使用
./sbin/nginx -c conf/nginx.conf

我们发现创建了两个进程,一个master和一个worker进程。那我们来看看nginx启动所需要的conf文件吧。

#user  nobody;
#创建几个工作线程
worker_processes  1;#如果我们启动nginx不加任何东西 ./sbin/nginx 那么就会报错:events 。
events {worker_connections  1024;        #最大连接数
}#提供http服务
http {include       mime.types;default_type  application/octet-stream;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#创建几个对外的端口,也可以叫服务器server {listen       80;server_name  localhost;#显示前端页面的location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

        我们知道基本的结构之后,就可以写自己的conf文件了。我们写上最基本的工作线程,events,http,server就可以了。其中在location中要有自己写的html文件。我们创建了四个进程和四个server,那么他们的关系什么?

worker_processes 4;events{worker_connections  1024;
}http{upstream backend {server 192.168.159.130:9002 weight=2;       #weight是负载均衡server 192.168.159.130:9003 weight=2;}server {listen 9000;location / {
#			root /home/king/share/nginx/html9000/;proxy_pass http://backend;  #这里是反向代理}	}server{listen 9000;location / {root /home/tc/html/html9000/;}}server{listen 9001;location / {root /home/tc/html/html9001/;}}server{listen 9002;location / {root /home/tc/html/html9002/;}}server{listen 9003;location / {root /home/tc/html/html9003/;}}
}

        我们配置好我们自己的文件后,通过调用这个conf文件来启动nginx,我们发现是四个工作进程和一个master。当我们去连接这四个server,我们发现这四个server都在master进程中,并不在这四个进程中。那么我们就可以了解,他们的关系是通过父进程fork来分配的,我们可以使用一个代码来演示一下:

int main(int argc, char *argv[])
{int sock_fd, epoll_fd;struct epoll_event event;struct epoll_event *events;if(argc < 2){printf("usage: [port] %s", argv[1]);exit(1);}if((sock_fd = sock_creat_bind(argv[1])) < 0){perror("socket and bind");exit(1);}if(make_nonblocking(sock_fd) < 0){perror("make non blocking");exit(1);}if(listen(sock_fd, SOMAXCONN) < 0){perror("listen");exit(1);}if((epoll_fd = epoll_create(MAXEVENTS))< 0){perror("epoll_create");exit(1);}event.data.fd = sock_fd;event.events = EPOLLIN;if(epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock_fd, &event) < 0){perror("epoll_ctl");exit(1);}/*buffer where events are returned*/events = calloc(MAXEVENTS, sizeof(event));int i;for(i = 0; i < PROCESS_NUM; ++i){int pid = fork();if(pid == 0){while(1){int num, j;num = epoll_wait(epoll_fd, events, MAXEVENTS, -1);printf("process %d return from epoll_wait\n", getpid());sleep(2);for(i = 0; i < num; ++i){if((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP) || (!(events[i].events & EPOLLIN))){fprintf(stderr, "epoll error\n");close(events[i].data.fd);continue;}else if(sock_fd == events[i].data.fd){struct sockaddr in_addr;socklen_t in_len = sizeof(in_addr);if (accept(sock_fd, &in_addr, &in_len) < 0){printf("process %d accept failed!\n", getpid());}else{printf("process %d accept successful!\n", getpid());}}}}}}
}

上面的代码就是父进程fork,将连接进来的连接放入到工作进程中,也就是说父进程只接收,子进程工作。

2、负载均衡和反向代理

        首先我们先了解一下正向代理,当我们去访问一个国外网站,直接连接是不行的,这时候需要一个中间商,来帮助我们,我们先访问这个中间商,然后转到国外网站,这就是正向代理。

        反向代理,当我们一个客户端去访问一个大型服务器,我们连接上服务器之后,在服务器内部会进行反向代理,将这个连接分配到不同的服务器中去。如下面的图,我们客户端去连接服务器,就是简单的客户端和服务器的关系,但是到服务器内部之后,进行反向代理,这个服务器相对于服务器1234来说就是客户端,这个客户端服务器向服务端1234发送连接请求。

        对于负载均衡来说,就是在反向代理的时候,将这些连接请求,分配到不同的服务器中,将他们均衡分配就可以了。

三、conf 文件的解析

        对于conf文件,我们在写的时候,并未使用变量,而是token。由于nginx是为了做跨平台,所以自己写了一套解析方案,也就是所谓的token,并未使用变量。

{ ngx_string("worker_processes"),NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,ngx_set_worker_processes,0,0,NULL },
#这里是 worker_processes 这个token,对于他的解析的话,也就是通过空格来进行判断。
#当读到这个单词之后,那么他的数量就会通过解析空格来解析数量

0voice · GitHub

相关文章:

Nginx的基础讲解之重写conf文件

一、Nginx 1、什么是nginx&#xff1f; Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 2、用于什么场景 Nginx适用于各种规模的网站和应用程序&#xff0c;特别是需要高并发处理和负载均衡的场…...

RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation

Paper name RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation Paper Reading Note Paper URL: https://arxiv.org/pdf/2011.06294 Code URL: https://github.com/hzwer/ECCV2022-RIFE TL;DR 2022 年旷视出品的实时视频帧插值工作。提出 RIFE…...

rabbitMq-----broker服务器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言管理的字段 前言 搭建一个网络服务器&#xff0c;在内部提供各个业务接口即可。 在业务处理函数中&#xff0c;每次请求过来找到对应的信道&#xff0c;通过信…...

MAC备忘录空白解决方案

打开icloud->备忘录 取消勾选同步此MAC后再次勾选&#xff0c;然后点击完成即可。...

cnn突破七(四层bpnet网络公式与卷积核bpnet公式相关)

我们要有一个概念&#xff0c;就是卷积核就是我们的w1&#xff0c;w12&#xff0c;w2 那么我们的5*5卷积核怎么表达&#xff0c;当他在14*14的图像中流动时&#xff0c;对应的像素也在变化 这个和我们的上面w1&#xff0c;w12&#xff0c;w2不同&#xff0c;因为这几个都是全…...

PHP中的PEAR是什么

PHP中的PEAR是PHP Extension and Application Repository的缩写&#xff0c;即PHP扩展与应用库。它是一个PHP扩展及应用的代码仓库&#xff0c;提供了许多常用的PHP库和工具&#xff0c;涵盖了页面呈现、数据库访问、文件操作、数据结构、缓存操作、网络协议、WebService等许多…...

(C语言贪吃蛇)4.贪吃蛇地图优化及算法说明

上节代码示例&#xff1a; #include <curses.h>void initNcurse() {initscr();keypad(stdscr,1); }void gamePic() {int hang;int lie;for(hang 0;hang < 20;hang ){if(hang 0){for(lie 0;lie < 20;lie ){printw("--");}printw("\n");for(…...

国外电商系统开发-运维系统拓扑布局

点击列表中设备字段&#xff0c;然后定位到【拓扑布局】中&#xff0c;可以看到拓扑发生了变化 再回头&#xff0c;您再次添加一个服务器到系统中&#xff0c;并且选择该服务器的连接节点为您刚才创建的“SDN路由器”&#xff0c;保存后&#xff0c;您可以看到这个服务器连接着…...

使用winsock和ip相关指令重置Window网络配置

netsh winsock reset 和 netsh int ip reset 是 Windows 中用于修复网络问题的命令。它们分别用于重置 Winsock 和 TCP/IP 网络配置&#xff0c;以解决可能由于配置错误或网络堆栈损坏而导致的网络连接问题。 1. netsh winsock reset 1.1 作用 重置 Winsock 目录。Winsock 是…...

用AI做电子萌宠,快速涨粉变现

今天给大家分享一个很热门的小副业—AI宠物视频 项目介绍 前一阵刷到一个萌宠账号&#xff0c;爆款率可真高&#xff0c;涨粉可真快呀。 28篇笔记涨粉3.2万&#xff0c;点赞更是达到了十几万。其中有6篇点赞上万。 至于究竟是不是AI其实没那么重要&#xff0c;重要的是&…...

如何在 Axios 中封装事件中心EventEmitter

在 Axios 中封装一个事件中心 EventEmitter 允许你在请求的不同阶段&#xff08;如请求开始、请求成功、请求失败等&#xff09;触发事件。这可以通过创建一个自定义的 Axios 实例&#xff0c;并结合 Node.js 的 events 模块来实现。以下是一个详细的步骤指南和示例代码&#x…...

计算机网络——ftp

在网络通信中&#xff0c;控制连接和数据连接是两种不同类型的连接&#xff0c;它们各自具有特定的功能和用途。 一、控制连接 定义与功能&#xff1a; 控制连接主要用于在通信双方之间传输控制信息&#xff0c;以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…...

Redis:set类型

Redis&#xff1a;set类型 set命令SADDSMEMBERSSISMEMBERSCARDSPOPSRANDMEMBERSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码intsethashtable 当把一些关联的数据放到一起&#xff0c;就构成一个集合。在Redis中&#xff0c;使用set类型维护…...

九大排序之插入排序

1.前言 插入排序是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。实际中我们玩扑克牌时&#xff0c;就用了插入排序的思想。 本章重点&#xff1a;主要着重的介绍两种插入排序…...

DNABERT: 一个基于 Transformer 双向编码器表征的预训练 DNA 语言模型

本文结合 DNABERT 的原文&#xff0c;主要介绍了&#xff1a; Overview of DNABERT 开发 DNABERT 的背景 DNABERT 的 tokenization DNABERT 的模型架构 DNABERT 的预训练 基于微调 DNABERT 的应用 1. Overview of DNABERT 我们之前介绍了 BERT&#xff0c;它是一个基于 Transfo…...

基于Hive和Hadoop的电商消费分析系统

本项目是一个基于大数据技术的电商消费分析系统&#xff0c;旨在为用户提供全面的电商消费信息和深入的消费行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 S…...

记一次炉石传说记牌器 Crash 排查经历

大家好这里是 Geek技术前线。最近在打炉石过程中遇到了HSTracker记牌器的一个闪退问题&#xff0c;尝试性排查了下原因。这里简单记录一下 最近炉石国服回归&#xff1b;由于设备限制&#xff0c;我基本只会在 Mac 上打炉石。并且由于主要打竞技场&#xff0c;所以记牌器是必不…...

精益驱动的敏捷开发

1. 什么是精益&#xff1f;精益能给软件开发带来什么&#xff1f; 精益是一种起源于制造业的管理哲学&#xff0c;尤其是从丰田的生产体系中发展而来。它的核心目标是通过最小化浪费、提高效率和优化流程来实现高效的生产。精益的核心原则包括&#xff1a; 消除浪费&#xff…...

SolidWorks机器转ROS2 URDF

文章目录 开发环境SolidWords插件使用生成urdf文件之后的处理CMakeLists文件修改package.xml变更Launch更改运行 开发环境 Linux系统&#xff1a;Ubuntu 22.04 Ros2版本&#xff1a;humble Solidwords版本&#xff1a;2023 &#xff08;2019以上版本应该都是可以的&#xff09…...

(Linux驱动学习 - 6).Linux中断

一. Linux 中断 API 函数 1.中断号 每个中断都有一个中断号&#xff0c;通过中断号即可区分不同的中断&#xff0c;有的资料也把中断号叫做中 断线。在 Linux 内核中使用一个 int 变量表示中断号。 2.申请中断 - request_irq 函数原型&#xff1a; int request_irq(unsigne…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...