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

发布时间:2024年01月12日

目录

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进程都被关闭掉

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

文章来源:https://blog.csdn.net/yz2322944912/article/details/135538938
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。