你的位置:首页 > 软件开发 > ASP.net > 【夯实Nginx基础】Nginx工作原理和优化、漏洞

【夯实Nginx基础】Nginx工作原理和优化、漏洞

发布时间:2016-12-15 22:00:09
本文地址原文地址本文提纲:  1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...

【夯实Nginx基础】Nginx工作原理和优化、漏洞

本文地址

原文地址

本文提纲:

  1.  Nginx的模块与工作原理

      相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。

3.4) Nginx+PHP-FPM

start_servers   
  1. server {  
  2.     listen 80;  
  3.     server_name foo.com;  
  4.     root /path;  
  5.     location / {  
  6.         index index.html index.htm index.php;  
  7.         if (!-e $request_filename) {  
  8.             rewrite . /index.php last;  
  9.         }  
  10.     }  
  11.     location ~ \.php$ {  
  12.         include fastcgi_params;  
  13.         fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name;  
  14.         fastcgi_pass 127.0.0.1:9000;  
  15.         fastcgi_index index.php;  
  16.     }  
  17. }   

4.1)  不应该在location 模块定义index

4.2)     使用try_files

接下来看看「if」指令,说它是大家误解最深的Nginx指令毫不为过:
  1. server {  
  2.     listen 80;  
  3.     server_name foo.com;  
  4.     root /path;  
  5.     index index.html index.htm index.php;  
  6.     location / {  
  7.         try_files $uri $uri/ /index.php;  
  8.     }  
  9.     location ~ \.php$ {  
  10.        try_files $uri =404;  
  11.        include fastcgi.conf;  
  12.        fastcgi_pass 127.0.0.1:9000;  
  13.    }  
  14. }  
 5.2) nginx多进程事件模型:异步非阻塞         虽然nginx采用多worker的方式来处理请求,每个worker里面只有一个主get='_blank'>线程,那能够处理的并发数很有限啊,多少个worker就能处理多少个并发,何来高并发呢?非也,这就是nginx的高明之处,nginx采用了异步非阻塞的方式来处理请求,也就是说,nginx是可以同时处理成千上万个请求的。一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当Nginx上的进程数与CPU核心数相等时(最好每一个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。

       而apache的常用工作方式(apache也有异步非阻塞版本,但因其与自带某些模块冲突,所以不常用),每个进程在一个时刻只处理一个请求,因此,当并发数上到几千时,就同时有几千的进程在处理请求了。这对操作系统来说,是个不小的挑战,进程带来的内存占用非常大,进程的上下文切换带来的cpu开销很大,自然性能就上不去了,而这些开销完全是没有意义的。

     【夯实Nginx基础】Nginx工作原理和优化、漏洞

  1. while (true) {  
  2.     for t in run_tasks:  
  3.         t.handler();  
  4.     update_time(&now);  
  5.     timeout = ETERNITY;  
  6.     for t in wait_tasks: /* sorted already */  
  7.         if (t.time <= now) {  
  8.             t.timeout_handler();  
  9.         } else {  
  10.             timeout = t.time - now;  
  11.             break;  
  12.         }  
  13.     nevents = poll_function(events, timeout);  
  14.     for i in nevents:  
  15.         task t;  
  16.         if (events[i].type == READ) {  
  17.             t.handler = read_handler;  
  18.         } else { /* events[i].type == WRITE */  
  19.             t.handler = write_handler;  
  20.         }  
  21.         run_tasks_add(t);  
  22. }  

原标题:【夯实Nginx基础】Nginx工作原理和优化、漏洞

关键词:nginx

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录