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

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

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

相关文章

计算机组成原理之浮点数的表示和运算

浮点数的表示 浮点数的表示通常遵循类似科学计数法的规则&#xff0c;可以表示为N M r^E&#xff0c;其中&#xff1a; 1、N是浮点数。 2、表示符号位&#xff0c;用来表示浮点数的正负。 3、M是尾数&#xff08;有效数字&#xff09;&#xff0c;是一个纯小数&#xff0c;其…

【React】事件机制

事件机制 react 基于浏览器的事件机制自身实现了一套事件机制&#xff0c;称为合成事件。比如&#xff1a;onclick -> onClick 获取原生事件&#xff1a;e.nativeEvent onClick 并不会将事件代理函数绑定到真实的 DOM节点上&#xff0c;而是将所有的事件绑定到结构的最外层…

Pikachu-目录遍历

目录遍历&#xff0c;跟不安全文件上传下载有差不多&#xff1b; 访问 jarheads.php 、truman.php 都是通过 get 请求&#xff0c;往title 参数传参&#xff1b; 在后台&#xff0c;可以看到 jarheads.php 、truman.php所在目录&#xff1a; /var/www/html/vul/dir/soup 图片…

master节点k8s部署]33.ceph分布式存储(四)

总结ceph分布式存储&#xff08;三&#xff09;中提到的三种方法&#xff1a; 1.创建rbda&#xff0c;并且在创建pv的时候配置该rbda,以下代码仅展示关键信息。 [rootxianchaomaster1 ~]# cat pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: ceph-pv ...…

【每日一题 | 24.10.7】Fizz Buzz 经典问题

1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;每日一题 1. 题目 Fizz Buzz 经典问题 2. 解题思路 【法1】逻辑硬解&#xff1a;按照题目逻辑分四种情况&#xff0c;用if else 判断即可。 【法2】switc…

Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影

针对Win10鼠标频繁自动失去焦点的问题&#xff0c;可以尝试以下解决方案&#xff1a; 一、修改注册表&#xff08;最有效的方法-重启之后立竿见影&#xff09; 打开注册表编辑器&#xff1a; 按下WindowsR组合键&#xff0c;打开运行窗口。在运行窗口中输入“regedit”&#x…

Python中的Enum

Python中的Enum Enum&#xff08;枚举&#xff09;在很多应用场景中都会出现&#xff0c;因此绝大部分编程语言都实现了Enum类型&#xff0c;Python也不列外&#xff0c;但列外的是Enum在Python3.4中才被正式支持&#xff0c;我们先来看看Python3中的Enum是怎么使用的。 枚举的…

uniapp微信小程序巧用跳转封装鉴权路由

1.这是封装的跳转方法&#xff1a; import store from "../stores/store";function Router(type, url, params) {const NoLoginPage [。。。。。];var queryString Object.keys(params).map((key) > ${key}${params[key]}).join("&");if (!NoLog…

在 Windows 环境中配置 virtualenvwrapper

在 Windows 环境中配置 virtualenvwrapper 需要使用 virtualenvwrapper-win。以下是具体步骤&#xff1a; 安装步骤 安装 Python 确保你已经安装了 Python&#xff0c;并且 python 和 pip 已添加到系统的 PATH 中。 安装 virtualenv 和 virtualenvwrapper-win 使用以下命令安…

VMware ESXi 7.0U3q macOS Unlocker OEM BIOS 2.7 Dell HPE 联想定制版 9 月更新发布

VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 Dell HPE 联想定制版 9 月更新发布 VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 7.0U3 标准版&#xff0c;Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)…

探索二叉树的奇幻世界:解密二叉树的结构与遍历

文章目录 目录 一、二叉树的基本操作 1.1 获取树中节点的个数 1.2 获取叶子节点的个数 1.3 获取第K层节点的个数 1.4 获取二叉树的高度 二、二叉树相关习题 2.1 检查两颗树是否相同 2.2 另一颗树的子树 2.3 翻转二叉树 2.4 判断一颗二叉树是否是平衡二叉树 一、二…

设计模式-创建型-常用:单例模式、工厂模式、建造者模式

单例模式 概念 一个类只允许创建一个对象&#xff08;或实例&#xff09;&#xff0c;那这个类就是单例类&#xff0c;这种设计模式就叫做单例模式。对于一些类&#xff0c;创建和销毁比较复杂&#xff0c;如果每次使用都创建一个对象会很耗费性能&#xff0c;因此可以把它设…

封装el-upload组件,用于上传图片和视频

使用环境 vue3element-ui plus 需要根据后端返回结构修改的函数&#xff1a;onPreview onRemove onSuccess 组件使用 基本使用 源代码&#xff1a; <script setup> import AutoUploadFile from /components/auto-upload-file/index.vue function change(urls){console.…

Html批量转word工具2.1

2024年10月7日记录&#xff1a; 有客户反馈&#xff0c;2.0刚运行就提示转换完成 有问题就解决。正好国庆假期这几天有空&#xff0c;2.1版就出炉了。 2.1 更新记录&#xff1a; 修复了1个bug&#xff1a;刚运行就提示转换完成 下载地址&#xff1a;Html 转 word 批量处理工具…

一、Python(介绍、环境搭建)

一、介绍 Python 是一种高级编程语言&#xff0c;具有简洁易读的语法、丰富的库和强大的功能。Python是解释型语言&#xff0c;运行代码必须依赖安装好的解释器。Python目前存在两个版本&#xff1a;Python2、Python3&#xff08;主流使用&#xff09; 二、环境搭建 1.安装P…

前端的全栈混合之路Meteor篇(二):RPC方法注册及调用

在Meteor 3.0中&#xff0c;RPC&#xff08;远程过程调用&#xff09;机制是实现前后端数据交互的重要特性。通过RPC&#xff0c;前端可以轻松调用后端方法&#xff08;Methods&#xff09;并获取数据&#xff0c;而后端的逻辑也可以同步或异步执行并返回结果。本文将详细介绍M…

智能家居有哪些产品?生活中常见的人工智能有哪些?

智能家居有哪些产品? 1、智能照明设备类&#xff1a;智能开关、智能插座、灯控模块、智能空开、智能灯、无线开关。 2、家庭安防类&#xff1a;智能门锁、智能摄像机、智能猫眼、智能门铃。 3、智能传感器类&#xff1a;烟雾传感器、可燃气体传感器、水浸传感器、声光报警器…

小程序-全局数据共享

目录 1.什么是全局数据共享 2. 小程序中的全局数据共享方案 MboX 1. 安装 MobX 相关的包 2. 创建 MobX 的 Store 实例 3. 将 Store 中的成员绑定到页面中 4. 在页面上使用 Store 中的成员 5. 将 Store 中的成员绑定到组件中 6. 在组件中使用 Store 中的成员 1.什么是全…

微服务实战——SpringCache 整合 Redis

SpringCache 整合 Redis 1.配置 spring.cache.typeredis EnableCaching EnableFeignClients(basePackages "com.cwh.gulimall.product.feign") EnableDiscoveryClient SpringBootApplication public class GulimallProductApplication {public static void main(…

ThinkPHP和PHP的区别

文章目录 ThinkPHP和PHP的区别一、引言二、PHP简介1、第一步1.1、示例代码 三、ThinkPHP简介2、第二步2.1、特点2.2、示例代码 四、总结 ThinkPHP和PHP的区别 一、引言 在Web开发领域&#xff0c;PHP是一种广泛使用的开源脚本语言&#xff0c;而ThinkPHP则是一个基于PHP的MVC…