LNMP數據請求處理過程

請求:
http://www.example.com/index.php

1、首先請求到nginx的master主進程,master進程將請求轉給worker進程處理。
2、worker進程,根據請求,找到對應的server
server {
listen 80;
server_name www.example.com;
root /var/www/html;
}
3、worker進程根據請求,location規則過濾,判斷是動態文件,提交到fastcgi的主進程處理
server {
listen 80; #監聽80端口,接收http請求
server_name www.example.com; #就是網站地址
root /usr/local/etc/nginx/www/huxintong_admin; # 準備存放代碼工程的路徑
#路由到網站根目錄www.example.com時候的處理
location / {
index index.php; #跳轉到www.example.com/index.php
autoindex on;
}

#當請求網站下php文件的時候,反向代理到php-fpm
location ~ \.php$ {
    include /usr/local/etc/nginx/fastcgi.conf; #加載nginx的fastcgi模塊
    fastcgi_intercept_errors on;
    fastcgi_pass   127.0.0.1:9000; #nginx fastcgi進程監聽的IP地址和端口

fastcgi_pass phpfpm;
}
}
4、fastcgi 的主進程將www.example.com/index.php 提交到php-fpm解析器處理,php-fpm根據 fast-cgi_pass 指定的監聽地址,或者socket,提交到對應php服務上處理。
備註:
fastcgi_pass 127.0.0.1:9000;
fastcgi_pass phpfpm;
fastcgi_pass 後面跟的可以是一個ip,也可以是一個socket,如果跟的是地址,則指的是php服務的IP地址。如果跟的是phpfpm,則指的是upstream地址池中的名稱:
upstream phpfpm {
server unix:/dev/shm/phpfpm.socket;
}
地址池中,對應的是本地php的socket地址,
cat /usr/local/php/etc/php-fpm.conf
[global]
pid = /var/run/php-fpm. pid
error_log = /usr/local/nginx/logs/php-fpm.log
log_level = notice
[www]
listen = /dev/shm/phpfpm.socket
不論跟的是IP地址,還是socket,實現的都是fastcgi子進程將動態請求,轉發到php解析器中,讓php去處理,都是用來讓fastcgi程序和php-fpm建立連接的,因爲fastcgi監聽的和php-fpm監聽的是一樣的,所以是可以建立連接的。

5、php-fpm 處理完請求,返回給nginx,nginx將結果通過http返回給瀏覽器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章