nginx基础面试题以及配置文件解析和命令控制

目录

1、nginx是什么

2、nginx的特点

3、为什么中国大陆有:百度、京东、新浪、网易、腾讯、淘宝等这么多用户使用nginx

4、nginx 的内部技术架构

上一期我们配置安装了nginx接着讲一下nginx配置文件的解析和nginx 命令控制

感谢观看!希望能够帮助到大家!


1、nginx是什么

Nginx是一款高并发、高效率、高性能、轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行

2、nginx的特点

其特点是占有内存少,并发能力强,高效率、高性能、轻量级

3、为什么中国大陆有:百度、京东、新浪、网易、腾讯、淘宝等这么多用户使用nginx

单机环境下参考服务器配置。 并发连接数在7000+ -8000左右。 集群模式20000+

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

4、nginx 的内部技术架构

1)nginx启动时,会生成两种类型的进程,一个是主进程(Master),一个或多个工作进程(Worker)。主进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。

2)服务器实际处理网络请求及响应的是工作进程(worker),在类unix系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求。

3)模块化设计。nginx的worker,包括核心和功能性模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。

4)事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能的采用,如kqueue、epoll及event ports。

5)代理(proxy)设计,可以说是nginx深入骨髓的设计,无论是对于HTTP,还是对于FastCGI、memcache、Redis等的网络请求或响应,本质上都采用了代理机制。所以,nginx天生就是高性能的代理服务器

上一期我们配置安装了nginx接着讲一下nginx配置文件的解析和nginx 命令控制

nginx.conf的组成:nginx.conf一共由三部分组成,分别为:全局块、events块、http块。在http块中又包含http全局块、多个server块。每个server块中又包含server全局块以及多个location块。在统一配置块中嵌套的配置快,各个之间不存在次序关系。

# 全局参数设置 
worker_processes  4;                        #设置nginx启动进程的数量,一般设置成与逻辑cpu数量相同 
error_log  logs/error.log;                  #指定错误日志 
worker_rlimit_nofile 102400;            #设置一个nginx进程能打开的最大文件数 
pid        /var/run/nginx.pid; 
events { 
    worker_connections  1024;         #设置一个进程的最大并发连接数 
}

# http 服务相关设置 
http {                                                    # 这个是协议级别
    include      mime.types; 
    default_type  application/octet-stream; 
    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;        #设置访问日志的位置和格式 
    sendfile          on;                                                       #是否调用sendfile函数输出文件,一般设置为on,若nginx是用来进行磁盘IO负载应用时,可以设置为off,降低系统负载 
    gzip              on;                                                        #是否开启gzip压缩,将注释去掉开启 
    keepalive_timeout  65;                                            #设置长连接的超时时间
    
# 虚拟服务器的相关设置 
    server {                                         # 这个是服务器级别
        listen      80;                                                          #设置监听的端口 
        server_name  localhost;                                     #设置绑定的主机名、域名或ip地址 
        charset koi8-r;                                                     # 设置编码字符 
        location / {                                # 这个是请求级别                
            root  /var/www/nginx;                                     #设置服务器默认网站的根目录位置,需要手动创建
            index  index.html index.htm;                         #设置默认打开的文档 
            } 
        error_page  500 502 503 504  /50x.html;           #设置错误信息返回页面 
        location = /50x.html { 
            root  html;                        #这里的绝对位置是/usr/local/nginx/html
        } 
    } 
 }

nginx -c /path/nginx.conf         # 以特定目录下的配置文件启动nginx:

nginx -s reload                 # 修改配置后重新加载生效

nginx -s reopen                 # 重新打开日志文件

nginx -s stop                 # 快速停止nginx

nginx -s quit                 # 完整有序的停止nginx

nginx -t                 # 测试当前配置文件是否正确

nginx -t -c /path/to/nginx.conf         # 测试特定的nginx配置文件是否正确

注意:
nginx -s reload 命令加载修改后的配置文件,命令下达后发生如下事件

1. Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)
2. Nginx启动新的worker进程,采用新的配置文件
3. Nginx将新的请求分配新的worker进程
4. Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程
5. 重复上面过程,直到全部旧的worker进程都被关闭掉

感谢观看!希望能够帮助到大家!

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

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

相关文章

mapper向mapper.xml传参中文时的乱码问题

1.起因: 在idea中进行模糊查询传参时,发现在idea中查中文查不出记录,在navicate中可以查出来。 2.猜测: 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…

Qt之数据转换与处理

从串口读取到的QByteAray数据一般需要进行提取和解析,此时就需要将QByteArray数拒转换为各种类型的数据。常用的转换包括: (1) 转为Hex,用于显示十六进制,这点在调试时特别有用,因为大多HEX码是…

【Vue技巧】Vue2和Vue3组件上使用v-model的实现原理

ChatGPT4.0国内站点,支持GPT4 Vision 视觉模型:海鲸AI 在Vue中,v-model 是一个语法糖,用于在输入框、选择框等表单元素上创建双向数据绑定。当你在自定义组件中实现 v-model 功能时,你需要理解它背后的原理&#xff1a…

DFA算法实战-敏感词过滤

前言 这里的项目实战, 我们使用的是 SpringBoot2.xJDK1.8搭建的,核心思想是借助了Hutool工具类的 WordTree。想了解更多DFA算法的实现可以参考DFA算法的实现 实战案例 1. 引入Hutool的工具类 <dependency><groupId>cn.hutool</groupId><artifactId>…

Python 基础【八】--数据类型-字典【2024.1.11】

1.定义 字典的内容在花括号 {} 内&#xff0c;键-值&#xff08;key-value&#xff09;之间用冒号 : 分隔&#xff0c;键值对之间用逗号 , 分隔&#xff0c;比如创建字典 &#xff0c;如下所示&#xff1a; d{name:小明,age:18}# 使用 dict 函数&#xff1a;强转 # 方式一&am…

mysql group by 之后要把名字放到一个字段里边

分组后的其他字段去重 count(DISTINCT(product)) num_sold,分组后数据存放到一个字段 &#xff08;带着排序&#xff0c;在保存到一个字段&#xff09; group_concat(distinct product order by product separator ‘,’) select sell_date,count(DISTINCT(product)) num_so…

PX4开源项目中遇到的问题

开源项目 kaiyuanxiangmkmonemati/PX4-ROS2-Gazebo-YOLOv8: Aerial Object Detection using a Drone with PX4 Autopilot and ROS 2. PX4 SITL and Gazebo Garden used for Simulation. YOLOv8 used for Object Detection. (github.com) 首先创建python虚拟环境&#xff0c;克…

【一文详解】知识分享:(ASP.Net Core基础学习及快速入门)

背景知识 相关术语 .Net .NET是微软的一个开发平台&#xff0c;这个平台的一大特点就是跨语言性&#xff0c;不管是什么语言&#xff0c;c、c、c#、F#、J#、vb等语言都可以用这个平台合作开发&#xff1b; .NET&#xff0c;它是微软创建的一个用于构建多种不同类型的应用程…

python——combinations()函数详解

combinations() 函数位于 Python 的 itertools 模块中&#xff0c;用于生成一个可迭代对象&#xff0c;包含输入集合中所有长度为 r 的组合。 定义&#xff1a; combinations(iterable, r) 函数接受一个可迭代对象 iterable 和一个整数 r&#xff0c;返回一个包含所有长度为 r…

书生·浦语大模型实战营-学习笔记2

目录 轻松玩转书生浦语大模型趣味Demo1. 大模型及 InternLM 模型介绍2. InternLM-Chat-7B 智能対话 Demo3. Lagent 智能体工具调用 Demo4. 浦语•灵笔图文创作理解 Demo5. 通用环境配置实验记录6. 课后作业 视频地址&#xff1a; (2)轻松玩转书生浦语大模型趣味Demo 文档教程&a…

xtu oj 1237 孪生素数

题目描述 如果n和n2都是素数&#xff0c;我们称其为孪生素数&#xff0c;比如3和5&#xff0c;5和7都是孪生素数。 给你一个区间[a,b],请问期间有多少对孪生素数&#xff1f; 输入 第一行是一个整数K(K≤ 10000)&#xff0c;表示样例的个数。 以后每行一个样例&#xff0c;为两…

C#用string.Replace方法批量替换某一类字符串

目录 一、关于字符串及其操作常识 二、String.Replace 方法 1.重载 2.Replace(Char, Char) 3.Replace(String, String) &#xff08;1&#xff09;实例&#xff1a; &#xff08;2&#xff09;生成结果&#xff1a; 4.Replace(String, String, StringComparison) 5.…

python堆排序

堆排序是一种基于二叉堆数据结构的排序算法。它将待排序的数组看作是一个完全二叉树&#xff0c;并利用堆的性质进行排序。 堆排序的基本思想是先将待排序的数组构建成一个最大堆&#xff08;或最小堆&#xff09;&#xff0c;然后依次将堆顶元素与堆的最后一个元素交换&#…

2023年低代码无代码产业大会:核心内容与学习收获(附大会核心PPT下载)

2023年低代码无代码产业大会聚焦了行业最前沿的趋势与技术&#xff0c;为企业数字化转型提供新的思路和方法。在这次大会上&#xff0c;我们可以深入了解到低代码/无代码技术的最新发展&#xff0c;以及如何利用这些技术来提高业务效率和创新能力。 一、大会的核心内容 1、低代…

net8 golang python性能比较

net8正式版出来两个月&#xff0c;现在性能到底如何呢&#xff0c;做个简单的例子和其他语言比较一下&#xff0c;测试内容是查找1000000以内的质数&#xff0c;代码不多&#xff0c;但包含了循环计算和Math库函数调用&#xff0c;直观的看一下语言之间差距是多少&#xff0c;心…

【AI视野·今日Robot 机器人论文速览 第七十三期】Tue, 9 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Tue, 9 Jan 2024 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Digital Twin for Autonomous Surface Vessels for Safe Maritime Navigation Authors Daniel Menges, Andreas Von Brandis, A…

8.【TypeScript 教程】Never 与 Unknown

TypeScript Never 与 Unknown 本节介绍 never 和 unknown 类型&#xff0c;其中 unknown 类型作为 any 类型对应的安全类型使用起来更加安全&#xff0c;如果有 any 类型的使用需求&#xff0c;应尽量使用 unknown 类型来替代 any 类型。 1. 解释 never 类型表示那些永不存在…

Matlab | SISO系统差分方程求解(附matlab源码)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== SISO系统差分方程求解 最小二乘法原理分析实验程序实验结果

JWT---JSON Web Token

JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 JSON Web Token的结构是什么样的 JSON…

QTableView如何设置显示风格?

1. 利用样式表设定样式风格 QTableView 控件本身没有直接的显示风格设置。然而&#xff0c;您可以通过使用样式表来自定义 QTableView 的外观&#xff0c;以实现不同的显示风格。以下是一些样式属性和伪状态类&#xff0c;您可以在样式表中使用来自定义 QTableView 的显示风格…