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配置


.1fastcgi_pass

fastcgi_pass  address;

address爲後端的fastcgi  server的地址

可用位置:location,if in location

.2fastcgi_index 

fastcgi_index  name;

fastcgi默認的主頁資源

示例:fastcgi_index  index.php;

.3fastcgi_param 

fastcgi_param  parameter value [if_not_empty];

設置傳遞給FastCGI服務器的參數值,可以是文本,變量或組合

.示例1:將php後綴的文件調度到運行php-fpm的服務器

.1)在後端服務器先配置fpm servermariadb-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服務器要開啓如下兩個配置,注意,這裏斜槓後的statusping是可以自定義,在nginxlocation上配置匹配的選項即可。

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

非活動時長

.5fastcgi_cache  zone | off;

調用指定的緩存空間來緩存數據

可用位置:http,server, location

.6fastcgi_cache_key

fastcgi_cache_key  string;

定義用作緩存項的key的字符串

示例:fastcgi_cache_key  $request_rui;

.7fastcgi_cache_methods

fastcgi_cache_methods GET| HEAD | POST ...;

爲哪些請求方法使用緩存

.8fastcgi_cache_min_uses

fastcgi_cache_min_uses  number;

緩存空間中的緩存項在inactive定義的非活動時間內至少要被訪問到此處所指定的次數方可被認作活動項

.9fastcgi_keep_conn 

fastcgi_keep_conn on | off;

收到後端服務器響應後,fastcgi服務器是否關閉連接,建議啓用長連接

.10fastcgi_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第二次打開的時候,明顯比第一次快,因爲第一次打開的時候,還沒有產生緩存



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