[Openwrt 項目開發筆記]:PHP+Nginx安裝(七)


[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/ 謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM