Loading

nginx-挂面-乱选2


1.nginx常用命令
启动nginx  ./sbin/nginx
停止nginx ./sbin/nginx -s stop    ./sbin/nginx -s quit
重载配置  ./sbin/nginx -s reload(平滑重启)  service nginx reload 
重载指定配置文件 ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看nginx版本 ./sbin/nginx -v
检查配置文件是否正确 ./sbin/nginx -t
显示帮助信息 ./sbin/nginx -h

2,Nginx是如何实现高并发的

    service nginx start之后,然后输入#ps -ef|grep nginx,会发现Nginx有一个master进程和若干个worker进程,这些worker进程是平等的,都是被master fork过来的。在master里面,先建立需要listen的socket(listenfd),然后再fork出多个worker进程。当用户进入nginx服务的时候,每个worker的listenfd变的可读,并且这些worker会抢一个叫accept_mutex的东西,accept_mutex是互斥的,一个worker得到了,其他的worker就歇菜了。而抢到这个accept_mutex的worker就开始“读取请求--解析请求--处理请求”,数据彻底返回客户端之后(目标网页出现在电脑屏幕上),这个事件就算彻底结束。

nginx用这个方法是底下的worker进程抢注用户的要求,同时搭配“异步非阻塞”的方式,实现高并发量


3,499:服务端处理 时间过长,客户端主动关闭了连接。

4.nginx功能
作为http server(代替apache,对PHP需要FastCGI处理器支持)
反向代理服务器
实现负载均衡
虚拟主机
FastCGI:Nginx本身不支持PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理

5.502错误可能原因
(1).FastCGI进程是否已经启动
(2).FastCGI worker进程数是否不够
(3).FastCGI执行时间过长
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
(4).FastCGI Buffer不够
nginx和apache一样,有前端缓冲限制,可以调整缓冲参数
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
(5). Proxy Buffer不够
如果你用了Proxying,调整
proxy_buffer_size   16k;
proxy_buffers    4 16k;
(6).php脚本执行时间过长
将php-fpm.conf的<value name="request_terminate_timeout">0s</value>的0s改成一个时间

6.fastcgi与cgi的区别
cgi:
web服务器会根据请求的内容,然后会fork一个新进程来运行外部c程序  这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
fastcgi:
web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出
 


23、Redis集群如何选择数据库?

24、怎么测试Redis的连通性?

25、Redis中的管道有什么用?

26、怎么理解Redis事务?

27、Redis事务相关的命令有哪几个?

28、Redis key的过期时间和永久有效分别怎么设置?

29、Redis如何做内存优化?

30、Redis回收进程如何工作的?

31、Redis回收使用的是什么算法?

32、Redis如何做大量数据插入?

33、为什么要做Redis分区?

34、你知道有哪些Redis分区实现方案?

35、Redis分区有什么缺点?

36、Redis持久化数据和缓存怎么做扩容?

37、分布式Redis是前期做还是后期规模上来了再做好?为什么?

38、Twemproxy是什么?

39、支持一致性哈希的客户端有哪些?

40、Redis与其他key-value存储有什么不同?

41、Redis的内存占用情况怎么样?

42、都有哪些办法可以降低Redis的内存使用情况呢?

43、查看Redis使用情况及状态信息用什么命令?

44、Redis的内存用完了会发生什么?

45、Redis是单线程的,如何提高多核CPU的利用率?

46、一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?

47、Redis常见性能问题和解决方案?

48、Redis提供了哪几种持久化方式?

49、如何选择合适的持久化方式?

50、修改配置不重启Redis会实时生效吗?


nginx+php运行原理

目前主流的nginx+php的运行原理如下: 
1、nginx的worker进程直接管理每一个请求到nginx的网络请求。 
2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。 
3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令 netstat -nlpt|grep php-fpm 会得到:
4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种
fastcgi.conf  和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php

create  table  tb   select  *  from   xx  搜索到数据后复制到新表 原表的数据约束不会保存  
create  table  tb1   like   xxx  复制表结构, 数据约束全部保存  


减少和加速web访问的方法

A. 针对静态的访问,做过期时间,把静态文件缓存在客户端上
B. 在前端搭建squid反向代理,把静态的文件缓存在squid上
C  接入CDN
D. 合并js、css以及小图片

7. 办公室同事反馈网站打不开,请简述一下排査故陣的思路或解决方法答案I
A. 先ping—下域名,看看网络是否通
B. Telnet —下服务器的80端口,看是否通
C. 査看服务器流置是否正常,借助sar或者nload
D. 査看服务器是否有负载,用w,査看服务是否开启,用ps
E. 抓包査看数据包是否正常,看是否有攻击,用tcpdump
F. 査看配置是否正确


介绍下LVS负载模式和调度算法,nginx负载均衡模式有那些算法?
答:
1) LVS负载模式和调度算法
轮叫调度、加权轮叫、最少链接、加权最少链接、基于局域网的最少链接、带复制的基于局部性最少链接、目标地址散列、源地址散列、
最短的期望的延迟、最少队列调度。
2) Nginx负载均衡算法
轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
weight (轮询权值)weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下•或者仅仅为在主从的情况下
设置不同的权值,达到合理有效的地利用主机资源。
ip_hash每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session
共享问题。
fair:比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服
务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair 模块。
url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率• Nginx本身
不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包




nginx 服务器特性:
1)反向代理/L7负载均衡器 
 2)嵌入式Perl解释器 
 3)动态二进制升级 
 4)可用于重新编写URL,具有非常好的PCRE支持

nginx和apache的区别?
 1)轻量级,同样起web 服务,比apache 占用更少的内存及资源
 2)抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
 3)高度模块化的设计,编写模块相对简单 
 4)最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
 
请解释Nginx如何处理HTTP请求。
答:Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接


使用“反向代理服务器”的优点:反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时

Nginx服务器的最佳用法是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。

解释Nginx服务器上的Master和Worker进程:
Master进程:读取及评估配置和维持 
Worker进程:处理请求


将Nginx的错误替换为502错误、503:
502 =错误网关 503 =服务器超载 有可能,但是您可以确保fastcgi_intercept_errors被设置为ON,并使用错误页面指令
Location / { fastcgi_pass 127.0.01:9001; fastcgi_intercept_errors on; error_page 502 =503/error_page.html; #… }

要在URL中保留双斜线,就必须使用merge_slashes_off; 
 用法:merge_slashes [on/off] 
 默认值: merge_slashes on 
 环境: http,server


ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。

C10K问题是指无法同时处理大量客户端(10,000)的网络套接字


Stub_status指令:该指令用于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数   2)Sub_filter指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据

可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应

用Nginx服务器解释-s的目的是什么:运行Nginx -s参数的可执行文件


在Nginx服务器上添加模块:在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时加载


试题1】缺省安装的 nginx + php-fpm 环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途关闭了浏览器,那么请问服务端的 php 脚本是继续执行还是退出执行?
解答】正常情况下,如果客户端client异常退出了,服务端的程序还是会继续执行,直到与IO进行了两次交互操作。服务端发现客户端已经断开连接,这个时候会触发一个
user_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断

【试题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。

【试题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(不需要占用端口,更快)


【试题5】在Nginx中,请说明Rewrite模块里break和last的区别。
【解答】官方文档的定义如下:
last:停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location;
break:停止执行当前这一轮的ngx_http_rewrite_module指令集

使用break会匹配两次URL,如果没有满足项,就会停止匹配下面的location,直接发起请求www.xxx.com/test2.txt,由于不存在文件test2.txt,则会直接显示404。
使用last的话,会继续搜索下面是否有符合条件(符合重写后的/test2.txt请求)的location,匹配十次,如果十次没有得到的结果,那么就跟break一样了。返回上面的例子,/test2.txt刚好与面location的条件对应上了,进入花括号{}里面的代码执行,这里会返回508。

nginx特点
基于事件的服务器
所有的请求都由一个线程处理
避免子进程概念
在内存消耗和连接及负载均衡方面较好
类似与速度的概念
apache:
基于流程的服务器
单个线程处理单个请求
基于子进程
类似与功率
在内存消耗和连接上并没有提高
流量达到进程极限,拒绝新的连接
支持其他语言作为插件
依赖cpu与内存等硬件

解释Nginx如何处理HTTP请求:
Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接

在Nginx中,如何使用未定义的服务器名称来阻止处理请求
Server {

listen 80;

server_name “ “ ;

return 444;

}

服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444被返回,从而终止连接

posted @ 2019-07-25 16:48  Lust4Life  阅读(220)  评论(0)    收藏  举报