Nginx 之 fastcgi配置
1 概述
nginx代理通過ngx_http_fastcgi_module這個模塊,將收到php程序的請求後就轉發到後臺FastCGI服務器處理,這裏nginx可以把php-fpm服務運行在同一機器上,也可以將nginx和php-fpm分離在兩臺機器上。但是,nginx不支持php模塊方式,只能是php-fpm模式。
本文將介紹ngx_http_fastcgi_module模塊的相關命令和配置。
2 fastcgi配置
.1、fastcgi_pass
fastcgi_pass address;
address為後端的fastcgi server的地址
可用位置:location,if in location
.2、fastcgi_index
fastcgi_index name;
fastcgi默認的主頁資源
示例:fastcgi_index index.php;
.3、fastcgi_param
fastcgi_param parameter value [if_not_empty];
設置傳遞給FastCGI服務器的參數值,可以是文本,變量或組合
.示例1:將php後綴的文件調度到運行php-fpm的服務器
.1)在後端服務器先配置fpm server和mariadb-server
yum install php-fpm mysql-server;
fastcgi服務器上配置
mv /etc/php-fpm.conf /etc/php-fpm.conf.bak cp /usr/share/doc/php-fpm-5.3.3/php-fpm.conf.default /etc/php-fpm.conf
更改php的配置文件的監聽端口和允許連接的ip
vim /etc/php-fpm.conf listen 9000 listen.allowed_clients = 127.0.0.1,172.18.50.73 service php-fpmre start
.2)在前端nginx服務上做以下配置:
註意,以下的/app/php是指在安裝php-fpm主機上存放php文件的路徑,這裏就是在172.18.50.65這臺主機下的路徑/app/php下存放的php後綴的腳本,後端fpm服務器IP:9000;
方法一
vim /etc/nginx/conf.d/server.conf location ~ \.php$ { fastcgi_pass 172.18.50.65:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME/app/php$fastcgi_script_name; include fastcgi_params; }
方法二
fastcgi_params fastcgi參數在子配置文件fastcgi.conf裏定義了,所以這裏有另一種配置方法,直接更改fastcgi.conf這個文件
vim /etc/nginx/fastcgi.conf fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name; vim /etc/nginx/conf.d/server.conf location ~ \.php$ { fastcgi_pass 172.18.50.65:9000; fastcgi_index index.php; includefastcgi.conf; }
3)測試
重啟nginx服務,當訪問172.18.50.73下的php文件都會被調度到172.18.50.65去處理,且對應的php文件的目錄是172.18.50.65下的/app/php.
在瀏覽器下輸入http://172.18.50.73/index.php,通過命令tcpdump -i eth1 -nn port 9000在65主機上查看訪問情況
這裏附上172.18.50.65下的/app/php/index.php的測試腳本。由於以下的腳本中,有測試服務器的連接,因此php-fpm服務器端要安裝php-mysql,才能連接mysql數據庫。
yum install php-mysql
腳本如下
<?php echo "I am index.php in /app/phpwihtin 65"; $mysqli=newmysqli("172.18.50.65","wpadmin","Pass123456"); if(mysqli_connect_errno()){ echo "it is falilure!"; $mysqli=null; exit; } echo "nice job,it isconnected..."; $mysqli->close(); phpinfo(); ?>
.示例2:通過/pm_status和/ping來獲取fpm server狀態信息
可以通過?格式 來看對應不同格式的顯示。也可以是?full
php-fpm服務器要開啟如下兩個配置,註意,這裏斜杠後的status和ping是可以自定義,在nginx上location上配置匹配的選項即可。
pm.status_path = /status
ping.path = /ping
nginx調度器端配置如下:
location ~* ^/(status|ping)$ { include fastcgi_params; fastcgi_pass 172.18.50.65:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; }
.4、定義fastcgi的緩存
這個需要在http配置段裏定義
fastcgi_cache_path path [levels=levels][use_temp_path=on|off] keys_zone=name:size [inactive=time][max_size=size] [manager_files=number][manager_sleep=time] [manager_threshold=time] [loader_files=number][loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number][purger_sleep=time] [purger_threshold=time];
path 緩存位置為磁盤上的文件系統
max_size=size
磁盤path路徑中用於緩存數據的緩存空間上限
levels=levels:緩存目錄的層級數量,以及每一級的目錄數量
levels=ONE:TWO:THREE
示例:leves=1:2:2
keys_zone=name:size
k/v映射的內存空間的名稱及大小
inactive=time
非活動時長
.5、fastcgi_cache zone | off;
調用指定的緩存空間來緩存數據
可用位置:http,server, location
.6、fastcgi_cache_key
fastcgi_cache_key string;
定義用作緩存項的key的字符串
示例:fastcgi_cache_key $request_rui;
.7、fastcgi_cache_methods
fastcgi_cache_methods GET| HEAD | POST ...;
為哪些請求方法使用緩存
.8、fastcgi_cache_min_uses
fastcgi_cache_min_uses number;
緩存空間中的緩存項在inactive定義的非活動時間內至少要被訪問到此處所指定的次數方可被認作活動項
.9、fastcgi_keep_conn
fastcgi_keep_conn on | off;
收到後端服務器響應後,fastcgi服務器是否關閉連接,建議啟用長連接
.10、fastcgi_cache_valid
fastcgi_cache_valid [code...] time;
不同的響應碼各自的緩存時長
3 配置fastcgi緩存
#http配置段裏定義緩存
http { fastcgi_cache_path/var/cache/nginx/fcgi_cache levels=1:2:2 keys_zone=sunny_fcgicache:20m inactive=120s; ... }
#server 端裏調用緩存
server { location ~* \.php$ { ... fastcgi_cache sunny_fcgicache; fastcgi_cache_key $request_uri; fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 301 1h; fastcgi_cache_valid any 1m;... } }
在瀏覽器裏打開http://172.18.50.73/index.php第二次打開的時候,明顯比第一次快,因為第一次打開的時候,還沒有產生緩存
本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1977237
Nginx 之 fastcgi配置