[Openwrt項目開發筆記]系列文章傳送門:http://www.cnblogs.com/double-win/p/3888399.html
正文:
在上一節中,我們已經搭建了MySQL數據庫了,因此在這一節中,我主要講解php的安裝,以及php的運行環境Nginx的安裝。參考(http://www.right.com.cn/forum/thread-89216-1-1.html)
一、PHP安裝
1.安裝php軟件包。
opkg update
opkg install php5 php5-mod-apc opkg install php5-mod-gd php5-mod-session opkg install php5-mod-pdo-mysql php5-mod-pdo php5-mod-mysql opkg install php5-mod-mcrypt php5-mod-mbstring php5-fastcgi php5-cgi php5-mod-xml php5-mod-ctype php5-mod-curl php5-mod-exif php5-mod-ftp php5-mod-iconv php5-mod-json php5-mod-sockets
在上述列表中,我安裝了很多的php擴展支持,這些包可以根據自己的需要進行添加,並不是所有的php擴展包都需要安裝的。
在此,我列舉幾個較為重要的擴展:
php5:這個不用多說,php的主框架軟件包,該軟件不安裝,下面的其他軟件包都沒用。
php5-mod-apc: Alternative PHP Cache (APC)是一種對PHP有效的開源高速緩沖儲存器工具,它能夠緩存opcode的php中間碼。通過安裝APC可以大大加速網站訪問速度。
php5-mod-mysql / php-mod-pdo / php5-mod-pdo-mysql:這些是使用MySQL所必須的。
php5-mod-cgi/php5-mod-fastcgi: 網頁交互的關鍵。
php5-mod-xml: xml解析
php5-mod-json: json支持
如果大家覺得空間足夠,也可以一勞永逸(不推薦),將所有php5相關的包都安裝:
opkg update
opkg install php5*
2. 配置php
在php軟件包安裝完成之后,會在/etc下生成一個php.ini文件,該文件就是php的配置文件。我們可以根據自己的需要進行必要的配置。修改php.ini:
short_open_tag = on #如果php顯示“not found”時,將下面一行注釋 #doc_root = "/mnt/sda3/www" #在Dynamic extension部分,將我們需要添加的擴展的注釋都去掉“;” extension=ctype.so extension=curl.so extension=gd.so extension=mbstring.so extension=mcrypt.so extension=mysql.so extension=pdo.so extension=pdo_mysql.so extension=session.so extension=sockets.so extension=tokenizer.so extension=xml.so [Date] #修改時區 date.timezone = Asia/Chongqing [MySQL] #修改MySQL的設置 mysql.default_socket = /var/run/mysqld.sock
tips: 在修改時區的時候,需要添加zoneinfo,也就是前文提到的軟件包 zoneinfo-asia.opkg和zoneinfo-core.opkg,如果不添加支持,在修改之后會報錯。
本人使用的backfire里面是不帶上述兩個包的。
二、Nginx安裝
1. 安裝Nginx軟件包
opkg update
opkg install nginx
2. 修改Nginx配置文件(/etc/nginx.conf)
准備工作:
(1)創建Nginx的工作目錄:
mkdir /mnt/sda3/www
(2)增加Nginx的用戶以及用戶組:
opkg install shadow-useradd shadow-groupadd
#添加用戶組
groupadd www
#添加用戶到用戶組www
useradd -g www www
#將Nginx的工作目錄綁定到www用戶
chown -R www:www /mnt/sda3/www
(3)修改Nginx的配置文件(/etc/nginx/nginx.conf):
原本的Nginx配置文件有些復雜,將其按照不同的功能分割成不同的配置文件:
user www www; #設定用戶及其用戶名 worker_processes 1; #允許線程個數 pid /var/run/nginx.pid; #指定pid的存放位置 error_log /var/log/nginx_error.log; #指定error.log的位置 events { use epoll; worker_connections 1024; #指定最大連接數 } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log main; #access.log日志 sendfile on; tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; include vhost.conf; #server 配置文件 }
(4)在/ect/nginx文件夾下創建host配置文件: vhost.conf
server { listen 8000; #系統中原有httpd監聽80 server_name localhost; root /mnt/sda3/www; #網站的工作目錄 index index.html index.htm index.php default.php; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; #error頁面重定向 location = /50x.html { root html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~\.php$ { #將php腳本傳遞給FastCGIserver fastcgi_pass 127.0.0.1:9000; #FastCGI的server fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /mnt/sda3/www/$fastcgi_script_name; #fastcgi的參數 include fastcgi_params; #fastcgi的具體配置文件 } }
(5) FastCGI具體配置: /etc/nginx/fastcgi_param
#解決文件類型解析錯誤的問題 if ( $request_filename ~* (.*)\.php ) { set $php_url $1; } if (!-e $php_url.php) { return 403; } fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; #下面注釋中的參數:腳本名,其設置需要注意。親測有效 #fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME /mnt/sda3/www/$fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
(6)開啟Nginx服務:
對於Nginx服務的開啟有點麻煩。首先要開啟fastcgi服務:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 2 -f /usr/bin/php-cgi
如果要開機啟動,將上述指令放置到/etc/rc.local腳本之下
如果rc.local 中有exit 0 ,記得注釋掉,不然就不會開始監聽9000端口。這個問題整了好久。。。。
開啟Nginx服務
/etc/init.d/nginx enable
/etc/init.d/nginx start
三、Nginx+php+MySQL 測試
在/mnt/sda3/www文件夾下,分別放置以下文件進行測試:
在測試的時候,記得結合Nginx的日志文件:
/var/log/nginx/acesss.log /var/log/nginx/error.log
1、 index.html(測試Nginx服務是否正常開啟)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>this is a test file</title> </head> <body> <span>this is a html file</span> </body> </html>
顯示結果:
2. index.php(用於測試fastcgi是否工作正常)
<?php phpinfo(); ?>
顯示結果:
3. 1.php (測試文件名是否解釋正常)
<?php echo date("Y-m-d h:i:s",time()); ?>
五、 遇到的問題,以及解決方案
1.問題: 測試fastcgi是否工作的時候,頁面顯示“no input file specified ”。
解決方案:在網絡上查找了各種解決方案,我將對我有用的幾條寫出來,與大家分享一下:
(1)fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 改為:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #經測試無效。
接着換:fastcgi_param SCRIPT_FILENAME /mnt/sda3/www/$fastcgi_script_name; #/mnt/sda3/www為網站的工作目錄
(2)fastcgi:9000端口沒有正常開啟
在使用如下命令:
netstat-ant |grep 9000
9000端口沒有開啟。也就是說fastcgi服務沒有開啟。手動開啟:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 2 -f /usr/bin/php-cgi
親測有效。
OK:Nginx+PHP+MySQL開發環境就成功移植到Openwrt平台上了。
--------------------------------------------------------------------------
預告:下一章講VPN了!(應一個同學的要求)
轉載請注明出處: htttp://www.cnblogs.com/double-win/ 謝謝!