Nginx動態網站架構
- 一、fastcgi & php-fpm
- 1.1 Nginx
- 1.2 PHP
- 1.3 PHP-MySQL
- 1.4 MySQL
- 1.5 面試題
- 二、PHP-FPM優化
- 2.1 了解php-fpm相關組態檔
- 2.1.1 核心組態檔
- 2.1.2 全域組態檔
- 2.1.3 擴展組態檔
- 2.2 初始化php-fpm
- 2.2.1 初始化后
- 2.3 啟動php動態監控頁面功能
- 2.3.1 啟動測驗頁功能
- 2.3.2 Nginx 配置頁面轉發
- 2.3.3 訪問測驗頁
- 三、Nginx Location
- 3.1 Location 語法規則
- 3.2 Location 示例
- 四、Nginx 平滑升級
- 4.1 Nginx信號控制表
- 4.2 平滑升級流程決議
一、fastcgi & php-fpm
靜態網站 :Nginx服務器能處理的靜態元素.html .jpg .mp4 .css
1.1 Nginx
ngx_fastcgi_modul
- fastcgi 快速通用網關介面
- 處理動態請求的介面
- Nginx通過ngx_fastcgi_modul模塊 鏈接php-fpm處理動態請求
1.2 PHP
php-fpm
- PHP-FPM(FastCGI Process Manager :FastCGI行程管理器)是一個PHP GastCGI管理器
- PHP通過php-fpm接受前臺nginx的動態訪問請求,如向后端MySQL進行查詢請求后,將查詢結果回傳給前臺nginx
1.3 PHP-MySQL
- php-mysql是php連接mysql的介面程式
1.4 MySQL
- 存盤資料
1.5 面試題
- 什么是FastCGI
- Nginx+FastCGI運行原理
- LNMP的運行原理:用戶向網站請求,當請求靜態元素時,由Nginx獨立回傳用戶,當為動態請求時,將通過fastcgi模塊連接php程式傳達動態請求,php程式通過fpm介面管理器接受到其請求之后,再通過php-mysql程式向MySQL資料庫進行資料存盤(口頭描述),
二、PHP-FPM優化
2.1 了解php-fpm相關組態檔
2.1.1 核心組態檔
[root@lnmp ~]# vim /etc/php.ini
;date.timezone = date.timezone=PRC 設定PHP的時區
;open_basedir = oepn_basedir
- open_basedir:設定PHP腳本允許訪問的目錄
- open_basedir 將php所能打開的檔案限制在指定的目錄樹中,包括檔案本身,當程式要使用例如fopen()或file_get_contents()打開一個檔案時,這個檔案的位置將會被檢查,當檔案在指定的目錄樹之外,程式將拒絕打開
2.1.2 全域組態檔
[root@lnmp ~]# vim /etc/php-fpm.conf
pid = /run/php-fpm/php-fpm.pid #pid存放的位置
error_log = /var/log/php-fpm/error.log #日志存放的位置
;log_level = notice #日志級別
daemonize = yes #守護行程,將fpm轉至后臺允許 默認no
2.1.3 擴展組態檔
[root@lnmp ~]# vim /etc/php-fpm.d/www.conf
user = nginx
listen.allowed_clients = 127.0.0.1 #監聽允許誰訪問,如分離部署填對方IP地址
listen = 127.0.0.1:9000 #fpm監聽埠,即nginx中php處理的地址,一般默認值即可,可用格式'ip :port'
slowlog = /var/log/php-fpm/$pool-slow.log #慢查詢日志
pm = dynamic #動態模式行程管理開啟
pm.start_servers = 5 #最初開啟多少行程
pm.min_spare_servers = 5 #最小的多余行程數,最少空閑,用戶訪問會消耗行程,為了滿足后續服務隨時開啟行程保持空閑數為5
pm.max_children = 50 #最大行程數,限定php程式最大行程數
pm.max_spare_servers = 10 #空閑行程超過35個之后 立刻殺死多余行程只保留35個行程
pm.max_requests = 500 # 每個子行程能相應的請求數量 超過500次請求立刻殺死

2.2 初始化php-fpm
生產環境下常用數值
[root@lnmp ~]# vim /etc/php-fpm.d/www.conf
#設定生產環境下常用數值
pm = dynamic #啟動動態管理模式
pm.start_servers = 32 #初始啟動32個行程
pm.max_children = 512 #最大行程數(子行程會在最大和最小數范圍之間變化)
pm.min_spare_servers = 32 #隨著用戶訪問的增加,保持32個空閑行程
pm.max_spare_servers = 64 #隨著用戶離去,殺死大量行程來節約資源
;pm.max_requests = 1500 #每個子行程處理1500個請求,默認為unlimiter(1024個)
[root@lnmp ~]# systemctl restart php-fpm
2.2.1 初始化后
[root@lnmp ~]# ps -aux | grep php | wc -l
2.3 啟動php動態監控頁面功能
2.3.1 啟動測驗頁功能
[root@lnmp ~]# vim /etc/php-fpm.d/www.conf
;pm.status_path = /status #去掉注釋
pm.status_path = /php_status #更改為如前所示
2.3.2 Nginx 配置頁面轉發
[root@lnmp ~]# vim /etc/nginx/nginx.conf #在Server中添加頁面轉發功能
...
location = /php_status{
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
...
[root@lnmp ~]# systemctl restart nginx php-fpm
2.3.3 訪問測驗頁
http://192.168.100.10/php_status

三、Nginx Location
Location只影響之后帶的路徑!
啟用身份驗證模塊配置到Server中,應用全域
1)生成賬戶密碼檔案
[root@lnmp ~]# yum -y install httpd-tools #安裝密碼生成工具
[root@lnmp ~]# htpasswd -cm /etc/nginx/conf.d/passwd user10
2)啟用身份認證應用至server中
[root@lnmp ~]# vim /etc/nginx/nginx.conf
server {
auth_basic "nginx access test!"; #提示訊息
auth_basic_user_file /etc/nginx/conf.d/passwd; #參考認證檔案
...
[root@lnmp ~]# systemctl restart nginx

將身份認證加入status
[root@lnmp ~]# vim /etc/nginx/nginx.conf
server {
location = /php_status{
auth_basic "nginx access test!";
auth_basic_user_file /etc/nginx/conf.d/passwd;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
...
[root@lnmp ~]# systemctl restart nginx
訪問主頁能夠正常訪問
訪問location 限制之后的php_status頁面需要輸入賬戶

3.1 Location 語法規則
location [=|~|~*|!~|!~*|^~] /uri/{
module;
module;
}
= 表示精確匹配,優先級也是最高的
~ 區分大小寫的正則匹配
~* 不區分大小寫的正則匹配
/ 通用匹配,任何請求都會匹配到
^~ 以某些字串開頭
!~ 非 (區分大小寫的匹配的正則)
!~* 非 (不區分大小寫匹配的正則)
優先級 精準匹配 > 模糊匹配 > 正則匹配 > 配
3.2 Location 示例
目的:通過不同的運算式,觀察運算式之間的優先級
[root@lnmp ~]# vim /etc/nginx/nginx.conf
# root /usr/share/nginx/html;
# location / {
# index index.php index.html;
# } #將主組態檔部分進行注釋
root /abcd; #添加如下測驗頁面
index index.html;
location = / { index a.html; }
location ~ / { index b.html; }
location / { index c.html; }
[root@lnmp abcd]# systemctl restart nginx

#location = / { index a.html; }
[root@lnmp abcd]# systemctl restart nginx

#location ~ / { index b.html; }
[root@lnmp abcd]# systemctl restart nginx

#location / { index c.html; }
[root@lnmp abcd]# echo index > index.html
[root@lnmp abcd]# systemctl restart nginx

四、Nginx 平滑升級
4.1 Nginx信號控制表
| 信號 | 說明 |
|---|---|
| TERM,INT | 立刻停止行程 |
| QUIT | 等待行程結束后再結束行程 |
| HUP | 平滑地重讀組態檔(開啟一個新的worker行程讀取組態檔,然后關閉舊行程) |
| USR1 | 重讀日志,分割日志時使用 |
| USR2 | 平滑地升級Nginx |
| WINCH | 等待行程結束后關閉舊行程(配合USR2來進行升級) |
4.2 平滑升級流程決議
例:如平滑升級1.12版本到1.14版本
一、編譯安裝新版本的nginx,指定安裝目錄為新目錄
二、查看舊的nginx的主程式號和作業行程號

三、替換舊的執行程式

四、給主程式發送USR2信號
信號 1 為立刻重啟
信號 2 為作業完畢后重啟

- 舊版本的主程式將重命名它的pid檔案為.oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后執行新版本的可執行程式,依次啟動新的主程式和新的作業行程
五、給行程發送WINCH信號
等待行程結束后關閉舊行程(配合USR2來進行升級)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286508.html
標籤:其他
上一篇:Linux FTP服務器搭建
