[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 ; #允许线程个数
pid /var/run/nginx.pid; #指定pid的存放位置
error_log /var/log/nginx_error.log; #指定error.log的位置
events {
use epoll;
worker_connections ; #指定最大连接数
}
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 ; gzip on;
include vhost.conf; #server 配置文件
}

(4)在/ect/nginx文件夹下创建host配置文件: vhost.conf

server {
listen ; #系统中原有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 /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:; #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 $;
}
if (!-e $php_url.php) {
return ;
} 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 ;

(6)开启Nginx服务:

对于Nginx服务的开启有点麻烦。首先要开启fastcgi服务:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p  -C  -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  -C  -f /usr/bin/php-cgi

   亲测有效。

OK:Nginx+PHP+MySQL开发环境就成功移植到Openwrt平台上了。

--------------------------------------------------------------------------

预告:下一章讲VPN了!(应一个同学的要求)

转载请注明出处: htttp://www.cnblogs.com/double-win/ 谢谢!

[Openwrt 项目开发笔记]:PHP+Nginx安装(七)的更多相关文章

  1. [openwrt 项目开发笔记]: 传送门

    “Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...

  2. [Openwrt 项目开发笔记]:MySQL配置(六)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...

  3. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  4. [Openwrt 项目开发笔记]:DDNS设置(五)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我主要讲述了如何在Openwrt上安 ...

  5. [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...

  6. [Openwrt 项目开发笔记]:USB挂载& U盘启动(三)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一篇中,我结合Netgear Wndr370 ...

  7. [Openwrt 项目开发笔记]:Openwrt必要设置(二)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 前面的两篇blog中,我将如何搭建Openwrt ...

  8. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 昨晚上熬夜写了[Openwrt项目开发笔记]:O ...

  9. Java社区——个人项目开发笔记(一)

    1.maven安装与测试 安装过程略,常用的maven命令行工具: mvn --version 查看maven版本 mvn compile 编译maven工程 mvn clean 删除编译文件 mvn ...

随机推荐

  1. 元素的定位tag_name,link_text,class_name

    tag_name 就是根据HTML的标签的名称来定位的: 案例:打开我要自学网,会有用户名和密码的输入框 例如:拿51zxw.net为例 from time import sleep #加载浏览器驱动 ...

  2. JPA报错, PersistenceException_Unable to build Hibernate SessionFactory

    javax.persistence.PersistenceException: [PersistenceUnit: TestJPA] Unable to build Hibernate Session ...

  3. day11:vcp考试

    Q201. Which two options are available in the Virtual Machine Component Protection (VMCP) setting Res ...

  4. day4:vcp考试

    Q61. Which two statements are true regarding Virtual SAN Fault Domains? (Choose two.)A. They enable ...

  5. Excel单元格内容拆分、合并

    例:如何将EXCEL单元格A1中的“1-2-1”,在B1.C1.D1单元格中分别显示”1“.”2“.”1“.方法一: 在B1中输入“=mid(A1,1,1)”在C1中输入“=mid(AI,3,1)”在 ...

  6. php反射机制学习

    PHP 5 具有完整的反射 API,可以通过反射机制来获取类,接口,函数的详细信息.例如可以通过反射api的成员属性,成员方法,命名空间的名称,检测某个类是否为抽象类等操作.(欢迎指点) 一般用途是在 ...

  7. [z]Windows 下基于 Eclipse 的可视化远程 Linux C/C++ 开发环境搭建

    http://blog.csdn.net/lostaway/article/details/8086056 1.简介 Windows 下远程 Linux 开发工具,比较著名的就是 WinGDB 和 M ...

  8. [远程] windows 2008 server设置了共享文件夹,并且共享给了everyone,但是还是无法访问,怎么解决呢?

    还需要设置另外一个地方,将用户加到MSAppAccess这个组里去

  9. cmd里面怎么复制粘贴

    不要打开快速编辑模式,他只能复制粘贴cmd里面的内容 其实用标记即可. 右键选择标记,然后框选内容后右键就复制了 然后再右键粘贴就行了.

  10. linux下第一个C程序

    首先,用vi编辑器新建一个文件 $vi hi.c 输入以下的程序(怎么用vi不说了) #include <stdio.h> int main() { printf("hello. ...