nginx常见面试题1
Nginx是网页服务器运维人员不可能绕开的一个弯,剩下几个比较高危的面试范围是:linux基础、网络知识基础、python,或许还会有zabbix等监控工具。这里先说nginx,后面几个肯定也会写。
试题
【试题1】缺省安装的 nginx + php-fpm 环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途关闭了浏览器,那么请问服务端的 php 脚本是继续执行还是退出执行?
【解答】正常情况下,如果客户端client异常退出了,服务端的程序还是会继续执行,直到与IO进行了两次交互操作。服务端发现客户端已经断开连接,这个时候会触发一个user_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断。
拓展阅读:http://www.cnblogs.com/yjf512/p/5362025.html?foxhandler=RssReadRenderProcessHandler
【试题2】首先,Nginx 日志格式中的 $time_local 表示的是什么时间?请求开始的时间?请求结束的时间?其次,当我们从前到后观察日志中的 $time_local 时间时,有时候会发现时间顺序前后错乱的现象,请说明原因。
【解答】$time_local:在服务器里请求开始写入本地的时间,因为请求发生时间有前有后,所以会时间顺序前后错乱。
【试题3】在Nginx+PHP环境中,Web错误日志里偶尔会出现如下错误信息:「recv() failed (104: Connection reset by peer) while reading response header from upstream」,请分析可能的原因是什么。
【解答】遇到这种情况,第一解决方法是重启php服务,service php5-fpm restart,但是这个治标不治本,相对治本的方法是把php的pm.max_requests值改大一点,比如500;第二个方法,修改php-fpm的request_terminate_timeout,把值改成=0。
这个情况要看后端的php,要么是链接不上,要么是php服务挂了,要么就是链接超时。
worker数不够挂掉就会504,worker处理超时就会502。
拓展阅读:http://serverfault.com/questions/543999/nginx-errors-recv-failed-104-connection-reset-by-peer-while-reading-respon
【试题4】已知Nginx和PHP-FPM安装在同一台服务器上,Nginx连接PHP-FPM有两种方式:一种是类似127.0.0.1:9000的TCP socket;另一种是类似/tmp/php-fpm.sock的Unix domain socket。请问如何选择,需要注意什么。
【解答】Unix domain socket的流程不会走到TCP 那层,直接以文件形式,以stream socket通讯。如果是TCP socket,则需要走到IP层。说的通俗一点,追求可靠性就是tcp(需要占用一个端口,更稳),追求高性能就是Unix Socket(不需要占用端口,更快)。
拓展阅读:https://blog.linuxeye.com/364.html
http://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-unix-domain-socket/ (这篇文章强烈推荐,写得特别好!)
【试题5】在Nginx中,请说明Rewrite模块里break和last的区别。
【解答】官方文档的定义如下:
last:停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location;
break:停止执行当前这一轮的ngx_http_rewrite_module指令集;
千言万语举个例子:
location /test1.txt/ {
rewrite /test1.txt/ /test2.txt break;
}
location ~ test2.txt {
return 508;
}
使用break会匹配两次URL,如果没有满足项,就会停止匹配下面的location,直接发起请求www.xxx.com/test2.txt,由于不存在文件test2.txt,则会直接显示404。
使用last的话,会继续搜索下面是否有符合条件(符合重写后的/test2.txt请求)的location,匹配十次,如果十次没有得到的结果,那么就跟break一样了。返回上面的例子,/test2.txt刚好与面location的条件对应上了,进入花括号{}里面的代码执行,这里会返回508。(这里的508是我自己随便设定的)
nginx常见面试题1的更多相关文章
- 整理的最全 python常见面试题(基本必考)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- 整理的最全 python常见面试题
整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...
- java常见面试题及答案 1-10(基础篇)
java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...
- Web开发的常见面试题HTML和HTML5等
作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...
- 常见面试题之ListView的复用及如何优化
经常有人问我,作为刚毕业的要去面试,关于安卓开发的问题,技术面试官会经常问哪些问题呢?我想来想去不能一股脑的全写出来,我准备把这些问题单独拿出来写,并详细的分析一下,这样对于初学者是最有帮助的.这次的 ...
- iOS常见面试题汇总
iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...
- JDBC常见面试题
以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...
- Mybatis常见面试题
Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...
- JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
随机推荐
- hdu 4576(概率dp+滚动数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 思路:由于每次从某一位置到达另一位置的概率为0.5,因此我们用dp[i][j]表示第i次操作落在 ...
- MySQL的语法高级之SELECT
1.语法:select 字段列表 from 子句 [where 子句][group by 子句][ order by 子句][having 子句][limit 子句]; 注解: 1.where子句对 ...
- 将场景导出XML或JSON或二进制而且解析还原场景
导出unity场景的全部游戏对象信息,一种是XML一种是JSON. 本篇文章我们把游戏场景中游戏对象的.旋转.缩放.平移与Prefab的名称导出在XML与JSON中.然后解析刚刚导出的XML或JSON ...
- 多个 python的pip版本选择
如果你电脑里面装了多个版本的python python3 -m pip instatll xlutilspython2 -m pip instatll xlutils 加载新的pippython -m ...
- centos6.4下安装mysql5.7.18
1.安装前工作 在安装前需要确定现在这个系统有没有 mysql,如果有那么必须卸载(在 centos7 自带的是 mariaDb 数据库,所以第一步是卸载数据库). 卸载系统自带的Mariadb: 查 ...
- api文档的书写
写文档写要与写代码一样,增加复用. 比如 model 说明就只需要一个,api中含有哪些字段,就在api说明中增加到那些 models 的链接. 使用 sophinx 如何生成目录 .. toctre ...
- iOS 关于自定义UICollectionViewLayout实现复杂布局
UICollectionView的简单介绍 UICollectionView的结构 Cells Supplementary Views 追加视图 (类似Header或者Footer) Decorati ...
- mysql练手
1.根据图创建下列表格 没有外键的表先创建,创建顺序为teacher,class,course,student CREATE TABLE class ( cid INT NOT NULL auto_i ...
- servle 3.0 新特性之一 对上传表单的支持
1. 上传 * 上传对表单的要求: > method="post" > enctype="multipart/form-data",它的默认值是:a ...
- Python 获取文件路径及文件目录
import os print (os.path.dirname(__file__)) print (os.path.abspath(__file__)) print (os.path.abspath ...