本文地址原文地址本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
本文地址
原文地址
本文提纲:
1. Nginx的模块与工作原理
相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
3.4) Nginx+PHP-FPM
start_servers
- server {
- listen 80;
- server_name foo.com;
- root /path;
- location / {
- index index.html index.htm index.php;
- if (!-e $request_filename) {
- rewrite . /index.php last;
- }
- }
- location ~ \.php$ {
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- }
- }
4.1) 不应该在location 模块定义index
4.2) 使用try_files
接下来看看「if」指令,说它是大家误解最深的Nginx指令毫不为过:
- server {
- listen 80;
- server_name foo.com;
- root /path;
- index index.html index.htm index.php;
- location / {
- try_files $uri $uri/ /index.php;
- }
- location ~ \.php$ {
- try_files $uri =404;
- include fastcgi.conf;
- fastcgi_pass 127.0.0.1:9000;
- }
- }
5.2) nginx多进程事件模型:异步非阻塞 虽然nginx采用多worker的方式来处理请求,每个worker里面只有一个主
get='_blank'>线程,那能够处理的并发数很有限啊,多少个worker就能处理多少个并发,何来高并发呢?非也,这就是nginx的高明之处,
nginx采用了异步非阻塞的方式来处理请求,也就是说,nginx是可以同时处理成千上万个请求的。一个worker进程可以同时处理的请求数只受限于内存大小,而且在
架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当Nginx上的进程数与CPU核心数相等时(最好每一个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。
而apache的常用工作方式(apache也有异步非阻塞版本,但因其与自带某些模块冲突,所以不常用),每个进程在一个时刻只处理一个请求,因此,当并发数上到几千时,就同时有几千的进程在处理请求了。这对操作系统来说,是个不小的挑战,进程带来的内存占用非常大,进程的上下文切换带来的cpu开销很大,自然性能就上不去了,而这些开销完全是没有意义的。
- while (true) {
- for t in run_tasks:
- t.handler();
- update_time(&now);
- timeout = ETERNITY;
- for t in wait_tasks: /* sorted already */
- if (t.time <= now) {
- t.timeout_handler();
- } else {
- timeout = t.time - now;
- break;
- }
- nevents = poll_function(events, timeout);
- for i in nevents:
- task t;
- if (events[i].type == READ) {
- t.handler = read_handler;
- } else { /* events[i].type == WRITE */
- t.handler = write_handler;
- }
- run_tasks_add(t);
- }
原标题:【夯实Nginx基础】Nginx工作原理和优化、漏洞
关键词:nginx
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。