Nginx运行原理和配置详解(个人总结笔记)

作者&投稿:彘显 (若有异议请与网页底部的电邮联系)
~ 话不多说,撸起键盘就是干!正所谓知其然知其所以然,个人总结了下Nginx运行原理和配置详解,便于理解和后续复盘。

先来看这一张图。

nginx启动后会有 一个master进程和多个worker进程 。master进程用来管理worker进程, 一个worker进程处理一个请求 ,一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。 worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致 ,这里面的原因与nginx的进程模型以及事件处理模型是分不开的 ,过多的worker数,只会导致进程来竞争cpu资源,从而带来不必要的上下文切换。

PHP WEB服务器目前最佳方式之一就是: Nginx + FastCGI(解决CGI并发重复fork问题) + PHP-FPM(管理PHP-CGI进程) 。nginx是怎么做到把请求抛给PHP解释来处理的呢?这个过程又是怎么实现的呢?稍后我们来看一下参数配置。

代理,反向代理,负载均衡是Nginx常用功能。

Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。如果你和小马之前一样还是分不清代理和反向代理的区别,下面这个图对理解会有所帮助。

它们的区别就是,前者知道我要找的人并知道地址在哪,代理服务器按这个地址代为请求一下然后把他说的话返回给我。后者就是,我知道我要找谁问话但不知道地址在哪,我也不想管,代理服务你自己去找,只要帮我返回他要说的话就可以了。

负载均衡:其实也是 反向代理 的一种。负载均衡,热备等等其实都属于高可用范畴,Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为 轮询,加权轮询,Ip hash 等等。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他做下实现。思考一个问题,IP hash真的能解决session共享的问题么?

我们来简单看下两个 配置示例 。

这个配置将请求转发转向mysvr 定义的服务器列表。 注意proxy_pass配置。其实这块也是负载均衡的配置 。如下:

在访问网站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcatsever1的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将大部分请求发送给49服务器上的tomcat1,也就是8080端口;较少部分给tomcat2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能力。

负载均衡配置 还有其他的相关参数,这是只是打个样,不赘述。

可以认为fastcgi_pass这个配置非常关键,将Nginx + FastCGI + PHP-FPM串连 。这个配置将PHP请求都交给 fastcgi_pass配置的PHP-FPM处理。 location分别通过正则过滤和转发配置决定了各个请求URL将要转发交与的处理方式 ,location /表示默认请求,location  ~\.php(.*)$ 表示PHP 脚本请求全部转发到 FastCGI处理。 使用FastCGI默认配置.。

以上配置指定了这些 静态文件要nginx自己处理 。

NGINX负载均衡可以用于很多服务负载均衡的实现,比如做Redis服务的负载均衡,配置upstream的IP列表再配置 proxy_pass 代理即可。那要实现负载均衡除了NGINX,还有哪些呢?

根据7层OSI模型可将负载均衡分为 :

1)二层负载均衡(一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应);

2)三层负载均衡(一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应);

3)四层负载均衡(在三次负载均衡的基础上,用 ip+port 接收请求,再转发到对应的机器);

4)七层负载均衡(根据虚拟的url或是IP,主机名接收请求,再转向相应的处理服务器)。

这其中,最常见的是四层和七层负载均衡。思考一下,NGINX的负载均衡是属于哪一种?

关于负载均衡的架构


Nginx实现负载均衡
从上面这个案例Nginx会作如下执行,默认情况下,请求使用 加权循环平衡法。 在上面的示例中,每 7 个请求将按如下方式分配: 5个请求去 backend1.example.com 向第二台和第三台服务器分别发送一个请求。 如果在与服务器通信过程中发生错误,请求将 被传递到下一个服务器,依此类推,直到所有的功能...

nginx反向代理 是什么意思?
Nginx反向代理是指使用Nginx服务器作为访问外部网络的代理服务器,将客户端的请求转发给内部网络中的服务器进行处理,并将处理结果返回给客户端。通过这种方式,可以将一个服务器集群的服务统一对外提供,提高服务器的性能和缓存能力,同时保证访问的安全性和可靠性。Nginx反向代理的原理是将客户端的请求转发至...

Nginx的功能与特性
3、负载均衡 当网站访问量非常大,将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。Nginx可以通过反向代理来实现负载均衡,并能使用3种自带策略及2种第三方策略。(1)RR(默认,每个...

nginx动静分离工作原理
nginx动静分离的本质其实还是location规则的匹配,例如我下面这个示例:当url匹配到\/static时,就请求静态文件,匹配不上就正常解析。

面试官:请问Nginx为什么比Apache性能好
Nginx才短短几年,就拿下了web服务器大笔江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于httpd,甚至能轻松解决C10K问题。下面我们就来聊聊Web服务器背后的一些原理。进程是具有一定独立功能的,在计算机中已经运行的程序的实体。在早期系统中(如linux 2.4以前),进程是基本运作单位,在...

Nginx篇05——http长连接和keeplive
nginx中http模块使用http长连接的相关配置(主要是keepalive指令)和http长连接的原理解释。连接管理是一个 HTTP 的关键话题:打开和保持连接在很大程度上影响着网站和 Web 应用程序的性能。在 HTTP\/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。在解释这三种模型之前,我们需要先明确一些前提...

nginx启动master开启8个worker进程,每个进程可以处理多个请求,一个进程...
apache是单进程,但是是多线程,可以同时处理多个请求,但是缺点是,当请求过多,线程也会过多,会导致内存和cpu消耗剧增,所以再处理高并发请求上能力略显不足。nginx是多进程,一个master和多个worker进程,当多个请求过来之后,worker会全部接受,然后采用异步非阻塞的事件处理机制对请求进行处理,所以再高...

安装nginx+php后,Php页面访问时提示404,但页面是存在的是怎么回事?_百 ...
nginx+php的运行原理:nginx的worker进程直接管理每一个请求到nginx的网络请求。对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理...

Linux里面为什么nginx要做动静分离?
在 Linux 系统中,使用nginx 做动静分离是用来提高性能和网站的可用性。动静分离的原理是将网站的静态内容(例如图像,CSS 文件和 JavaScript 文件)与动态内容(例如由后端 Web 应用程序生成的内容)分开存储和传输。这样做可以提高网站的整体性能,因为它可以让您的 Web 服务器专注于处理动态内容,而另一...

nginx 缓存机制
get 和 head 方法的请求结果,缓存的key默认使用请求字符串 (1)自定义key 例如 proxy_cache_key " request_uri cookie_nocache arg_comment;如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发 综合示例 nginx 缓存机制 三分钟看懂Nginx服务器的缓存原理和机制 ...

含山县15674788434: 如何在Windows上配置并运行Nginx -
盈性安治: 步骤1从nginx官网下载相应的安装包2建议下载 下载稳定版3解压到相应的目录,比如我是e盘 然后修改目录名字为nginx 进入nginx目录双击nginx.exe 来启动nginx4此时 直接在浏览器地址栏输入:localhost便能看到 欢迎页面,说明你虚拟主机已经搭建好了5但是有时候 我们需要配置路径 在默认情况下 他的root是 nginx目录下的html文件夹 如若修改则打开conf目录下的nginx.conf6找到server 选项 修改咯location 中的root 选项.7比如我修改到D:/webroot

含山县15674788434: 如何正确配置Nginx和PHP
盈性安治: 1.进行配置Nginx文件,它分为好多块,常见的从外到内依次是http、server、location等等. 2.Nginx有两份fastcgi配置文件,分别是fastcgi_params和fastcgi.conf,它们没有...

含山县15674788434: window8怎么配置nginx -
盈性安治: 工具原料:电脑+win8+php环境 window8配置nginx方法如下: 1、首先需要准备的应用程序包. nginx:nginx/Windows-1.0.4php:php-5.2.16-nts-Win32-VC6-x86.zip (nginx下php是以FastCGI的方式运行,所以我们下载非线程安全也就是nts的php...

含山县15674788434: Nginx 域名配置 -
盈性安治: 1、直接IP访问2、建立一个内网的dns服务器

含山县15674788434: nginx如何处理一个请求 -
盈性安治: Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始:server { listen 80; server_name example.org www.example.org; ... }server { listen 80; server_name example.net www....

含山县15674788434: 如何使用Nginx配置文件
盈性安治: 编译Nginx时,configure脚本的--prefix选项可以设置Nginx的运行路径,比如:./configure –prefix=/home/Nginx,此时,安装后的Nginx将会放在/home/Nginx目录,而配置文件就会在/home/Nginx/conf目录下.如果你没有显式的指--prefix选项,默...

含山县15674788434: nginx需要什么配置 -
盈性安治: 看你做什么了,静态资源用的话默认配置就可以,但是一般配合PHP使用,一般情况只要把配置文件里关于PHP那段注释去了就可以,最多就小改一下.如果要配合PHP模板使用的话就要加一些配置,百度有

含山县15674788434: 如何使用nginx tomcat java mysql -
盈性安治: 如何使用nginx tomcat java mysql 你需要简单的设置nginx的配置文件 user xxx xxx ;←这里是nginx的用户名和用户组worker_processes 10;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;#

含山县15674788434: 如何架设NginxPhpWeb服务器
盈性安治: 1、下载Nginx程序包,仅有1M左右大小,相当小巧功能强大! 2、将下载好的zip压缩包的文件全部解压,双击运行nginx.exe,你会看到一个黑色窗口一闪而过就没了,这...

含山县15674788434: nginx的4核8个进程怎么配置 -
盈性安治: 源码包可以在官方主页上下载.Ubuntu 7.10可以直接通过apt安装,也可以从这里下载最新的deb包:sudo apt-get install nginx 如果要自己编译的话,需要确保自己已经有编译器和PCRE的库(用于Nginx的rewrite模块,如果不需要这个模块可以...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网