Openwrt开发之web服务器lighttpd引擎及php-fpm环境搭建

时间:2021-12-23 18:43:19

环境:

openwrt18.06 linux4.14.123;MT7688, lighttpd1.4.54

具体步骤如下:

1. 更新及安装feeds:

./scrips/feeds update -a

...........


./scrips/feeds install -a

2. 由于我当前feeds更新的lighttpd是1.4.48版本的,而我要移植的是lighttpd1.4.54,为了从零开始移植搭建环境,所以选择了手动下载编译的方式,为了防止和openwrt自带的lighttpd冲突,需要先删除package/feeds/package目录下的lighttpd文件!注意先保存该目录下的主makefile文件,以后用的到。

3. 在openwrt根目录下的package目录下建立lighttpd1.4.54文件夹,在lighttpd1.4.54文件夹下再建立个空Makefile文件,和src文件夹,将下载的lighttpd1.4.54源文件全部拷贝到src文件夹下,然后修改之前保存的makefile到我们刚才新建的Makefile文件

Openwrt开发之web服务器lighttpd引擎及php-fpm环境搭建Openwrt开发之web服务器lighttpd引擎及php-fpm环境搭建
#
# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk

PKG_NAME:=lighttpd
PKG_VERSION:=1.4.54
PKG_RELEASE:=1.4.54

PKG_SOURCE:=
PKG_SOURCE_URL:=
PKG_MD5SUM:=

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
#PKG_SOURCE_URL:=https://download.lighttpd.net/lighttpd/releases-1.4.x
#PKG_HASH:=0f8ad5aac7529d7b948b9d7e8cd0b4a9e177309d85d6bf6516e28e6e40d74f36

PKG_LICENSE:=BSD-3c
PKG_LICENSE_FILES:=COPYING

PKG_FIXUP:=autoreconf
PKG_INSTALL:=1

REBUILD_MODULES=authn_gssapi authn_ldap authn_mysql cml magnet mysql_vhost trigger_b4_dl webdav

PKG_CONFIG_DEPENDS:=CONFIG_LIGHTTPD_SSL $(patsubst %,CONFIG_PACKAGE_lighttpd-mod-%,$(REBUILD_MODULES))

include $(INCLUDE_DIR)/package.mk

define Package/lighttpd/Default
  SECTION:=Application
  CATEGORY:=Extra packages
  URL:=http://www.lighttpd.net/
  MAINTAINER:=sean
endef

define Package/lighttpd
  $(call Package/lighttpd/Default)
  MENU:=1
  DEPENDS:=+LIGHTTPD_SSL:libopenssl +libpcre +libpthread
  TITLE:=A flexible and lightweight web server
endef

define Package/lighttpd/config
config LIGHTTPD_SSL
    bool "SSL support"
    depends on PACKAGE_lighttpd
    default y
    help
      Implements SSL support in lighttpd (using libopenssl). This
      option is required if you enable the SSL engine in your
      lighttpd confguration file.
endef

BASE_MODULES:=dirlisting indexfile staticfile

CONFIGURE_ARGS+= \
    --libdir=/usr/lib/lighttpd \
    --sysconfdir=/etc/lighttpd \
    --enable-shared \
    --enable-static \
    --disable-rpath \
    --without-attr \
    --without-bzip2 \
    --without-fam \
    --with-pcre \
    --without-valgrind \
     $(call autoconf_bool,CONFIG_IPV6,ipv6)

CONFIGURE_VARS+= \
    PCRE_LIB="-lpcre" \

ifneq ($(strip $(CONFIG_LIGHTTPD_SSL)),)
  CONFIGURE_ARGS+= \
    --with-openssl="$(STAGING_DIR)/usr"
  BASE_MODULES+= openssl
else
  CONFIGURE_ARGS+= \
    --without-openssl
endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-authn_gssapi),)
  CONFIGURE_ARGS+= --with-krb5
else
  CONFIGURE_ARGS+= --without-krb5
endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-authn_ldap),)
  CONFIGURE_ARGS+= --with-ldap
else
  CONFIGURE_ARGS+= --without-ldap
endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-authn_mysql),)
  CONFIGURE_ARGS+= --with-mysql
else
  CONFIGURE_ARGS+= --without-mysql
endif

#ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-geoip),)
#  CONFIGURE_ARGS+= --with-geoip
#else
#  CONFIGURE_ARGS+= --without-geoip
#endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-cml)$(CONFIG_PACKAGE_lighttpd-mod-magnet),)
  CONFIGURE_ARGS+= --with-lua
else
  CONFIGURE_ARGS+= --without-lua
endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-mysql_vhost),)
  CONFIGURE_ARGS+= --with-mysql
else
  CONFIGURE_ARGS+= --without-mysql
endif

#ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-cml)$(CONFIG_PACKAGE_lighttpd-mod-trigger_b4_dl),)
#  CONFIGURE_ARGS+= --with-memcached
#else
#  CONFIGURE_ARGS+= --without-memcached
#endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-trigger_b4_dl),)
  CONFIGURE_ARGS+= --with-gdbm
else
  CONFIGURE_ARGS+= --without-gdbm
endif

ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-webdav),)
  CONFIGURE_ARGS+= \
    --with-webdav-locks \
    --with-webdav-props
  # XXX: needed by sqlite3 to prevent segfaults in mod_webdav.so
  CONFIGURE_VARS+= \
    LIBS="-lpthread"
else
  CONFIGURE_ARGS+= \
    --without-webdav-locks \
    --without-webdav-props
endif

define Build/Configure
$(call Build/Configure/Default)
    # XXX: override pcre (mis)detection by ./configure when cross-compiling
    echo "#define HAVE_LIBPCRE 1" >>$(PKG_BUILD_DIR)/config.h
    echo "#define HAVE_PCRE_H 1" >>$(PKG_BUILD_DIR)/config.h
endef

define Package/lighttpd/conffiles
/etc/lighttpd/lighttpd.conf
endef

define Package/lighttpd/install
    $(INSTALL_DIR) $(1)/etc/lighttpd
    $(INSTALL_DATA) ./files/lighttpd.conf $(1)/etc/lighttpd/
    $(INSTALL_DATA) $(PKG_BUILD_DIR)/doc/config/conf.d/mime.conf $(1)/etc/lighttpd/
    $(INSTALL_DIR) $(1)/etc/lighttpd/conf.d
    $(INSTALL_DIR) $(1)/etc/init.d
    $(INSTALL_BIN) ./files/lighttpd.init $(1)/etc/init.d/lighttpd
    $(INSTALL_DIR) $(1)/usr/lib/lighttpd
    for m in $(BASE_MODULES); do \
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/lighttpd/mod_$$$${m}.so $(1)/usr/lib/lighttpd/ ; \
    done
    $(INSTALL_DIR) $(1)/usr/sbin
    $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/lighttpd $(1)/usr/sbin/
endef

define BuildPlugin
  define Package/lighttpd-mod-$(1)
    $(call Package/lighttpd/Default)
    DEPENDS:=lighttpd
    ifneq ($(3),)
      DEPENDS+= $(3)
    endif
    TITLE:=$(2) module
  endef

 ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-$(1)),)
  define Package/lighttpd-mod-$(1)/install
    $(INSTALL_DIR) $$(1)/usr/lib/lighttpd
    $(CP) $(PKG_INSTALL_DIR)/usr/lib/lighttpd/mod_$(1).so $$(1)/usr/lib/lighttpd
    $(INSTALL_DIR) $$(1)/etc/lighttpd/conf.d
    if [ -f $(PKG_BUILD_DIR)/doc/config/conf.d/$(1).conf ]; then \
        $(CP) $(PKG_BUILD_DIR)/doc/config/conf.d/$(1).conf $$(1)/etc/lighttpd/conf.d/$(4)-$(1).conf ; \
    else \
        echo 'server.modules += ( "mod_$(1)" )' > $$(1)/etc/lighttpd/conf.d/$(4)-$(1).conf ; \
    fi
  endef
 endif

  $$(eval $$(call BuildPackage,lighttpd-mod-$(1)))
endef

$(eval $(call BuildPackage,lighttpd))

# First, permit redirect from HTTP to HTTPS.
$(eval $(call BuildPlugin,redirect,URL redirection,+PACKAGE_lighttpd-mod-redirect:libpcre,10))

# Next, permit authentication.
$(eval $(call BuildPlugin,auth,Authentication,,20))
$(eval $(call BuildPlugin,authn_file,File-based authentication,,20))
$(eval $(call BuildPlugin,authn_gssapi,Kerberos-based authentication,+PACKAGE_lighttpd-mod-authn_gssapi:krb5-libs,20))
$(eval $(call BuildPlugin,authn_ldap,LDAP-based authentication,+PACKAGE_lighttpd-mod-authn_ldap:libopenldap,20))
$(eval $(call BuildPlugin,authn_mysql,Mysql-based authentication,+PACKAGE_lighttpd-mod-authn_mysql:libmysqlclient,20))

# Finally, everything else.
$(eval $(call BuildPlugin,access,Access restrictions,,30))
$(eval $(call BuildPlugin,accesslog,Access logging,,30))
$(eval $(call BuildPlugin,alias,Directory alias,,30))
$(eval $(call BuildPlugin,cgi,CGI,,30))
#$(eval $(call BuildPlugin,cml,Cache Meta Language,+PACKAGE_lighttpd-mod-cml:liblua +PACKAGE_lighttpd-mod-cml:libmemcached,30))
$(eval $(call BuildPlugin,cml,Cache Meta Language,+PACKAGE_lighttpd-mod-cml:liblua,30))
$(eval $(call BuildPlugin,compress,Compress output,+PACKAGE_lighttpd-mod-compress:zlib,30))
$(eval $(call BuildPlugin,deflate,Compress dynamic output,+PACKAGE_lighttpd-mod-deflate:zlib,30))
$(eval $(call BuildPlugin,evasive,Evasive,,30))
$(eval $(call BuildPlugin,evhost,Enhanced Virtual-Hosting,,30))
$(eval $(call BuildPlugin,expire,Expire,,30))
$(eval $(call BuildPlugin,extforward,Extract client,,30))
$(eval $(call BuildPlugin,fastcgi,FastCGI,,30))
$(eval $(call BuildPlugin,flv_streaming,FLV streaming,,30))
#$(eval $(call BuildPlugin,geoip,Geolocation,+PACKAGE_lighttpd-mod-geoip:libgeoip,30))
$(eval $(call BuildPlugin,magnet,Magnet,+PACKAGE_lighttpd-mod-magnet:liblua,30))
$(eval $(call BuildPlugin,mysql_vhost,Mysql virtual hosting,+PACKAGE_lighttpd-mod-mysql_vhost:libmysqlclient,30))
$(eval $(call BuildPlugin,proxy,Proxy,,30))
$(eval $(call BuildPlugin,rewrite,URL rewriting,+PACKAGE_lighttpd-mod-rewrite:libpcre,30))
$(eval $(call BuildPlugin,rrdtool,RRDtool,,30))
$(eval $(call BuildPlugin,scgi,SCGI,,30))
$(eval $(call BuildPlugin,secdownload,Secure and fast download,,30))
$(eval $(call BuildPlugin,setenv,Environment variable setting,,30))
$(eval $(call BuildPlugin,simple_vhost,Simple virtual hosting,,30))
$(eval $(call BuildPlugin,ssi,SSI,+PACKAGE_lighttpd-mod-ssi:libpcre,30))
$(eval $(call BuildPlugin,status,Server status display,,30))
#$(eval $(call BuildPlugin,trigger_b4_dl,Trigger before download,+PACKAGE_lighttpd-mod-trigger_b4_dl:libpcre +PACKAGE_lighttpd-mod-trigger_b4_dl:libgdbm +PACKAGE_lighttpd-mod-trigger_b4_dl:libmemcached,30))
$(eval $(call BuildPlugin,trigger_b4_dl,Trigger before download,+PACKAGE_lighttpd-mod-trigger_b4_dl:libpcre +PACKAGE_lighttpd-mod-trigger_b4_dl:libgdbm,30))
$(eval $(call BuildPlugin,userdir,User directory,,30))
$(eval $(call BuildPlugin,usertrack,User tracking,,30))
$(eval $(call BuildPlugin,webdav,WebDAV,+PACKAGE_lighttpd-mod-webdav:libsqlite3 +PACKAGE_lighttpd-mod-webdav:libuuid +PACKAGE_lighttpd-mod-webdav:libxml2,30))
$(eval $(call BuildPlugin,wstunnel,Websocket tunneling,,30))
View Code

4. 在makemenuconfig-> Extra packages->lighttpd下选择如下选项(根据自己需要):

[*]   SSL support                                                                                                   
<*>   lighttpd-mod-access........................... Access restrictions module                                      
<*>   lighttpd-mod-accesslog............................. Access logging module 
<*>   lighttpd-mod-cgi.............................................. CGI module
<*>   lighttpd-mod-fastcgi...................................... FastCGI module
<*>   lighttpd-mod-status......................... Server status display module

5. 在makemenuconfig->Languages->PHP下选择如下选项(根据自己需要):

<*> php7......................................... PHP7 Hypertext preprocessor 
[*] PHP7 Filter support
[*] PHP7 LIBXML support
[*] Use system timezone data instead of php's built-in database 
-*- php7-cgi..................... PHP7 Hypertext preprocessor (CGI & FastCGI) 
<*> php7-cli............................... PHP7 Hypertext preprocessor (CLI)
<*> php7-fastcgi...................................... FastCGI startup script
<*> php7-fpm............................... PHP7 Hypertext preprocessor (FPM)

 

6.配置想修改:

6.1. 在 lighttpd1.4.54 下新建files文件夹,新建lighttpd.conf和lighttpd.init,内容分别如下:

server.modules = (
        "mod_access",
        "mod_accesslog",
        "mod_cgi",
        "mod_fastcgi"
)
server.document-root        = "/www"
server.upload-dirs          = ( "/tmp" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/php7-fpm.pid"
server.username             = "http"
server.groupname            = "www-data"

fastcgi.server += ( ".php" =>
        ((
                "socket" => "/var/run/php7-fpm.sock",
                "broken-scriptfilename" => "enable"
        ))
)
               
#cgi.assign += ( ".php" => "/usr/bin/php-cgi" )
               
index-file.names            = ( "index.php", "index.html",
                                "index.htm", "default.htm",
                              )
                              
url.access-deny             = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
                   

### Options that are useful but not always necessary:
#server.chroot               = "/"
server.port                 = 80
#server.bind                 = "localhost"
#server.tag                  = "lighttpd"
#server.errorlog-use-syslog  = "enable"
#server.network-backend      = "writev"

### Use IPv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl"

#dir-listing.encoding        = "utf-8"
#server.dir-listing          = "enable"

include "/etc/lighttpd/mime.conf"
include "/etc/lighttpd/conf.d/*.conf"
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=50
STOP=50

USE_PROCD=1
PROG=/usr/sbin/lighttpd

validate_conf() {
    $PROG -tt -f /etc/lighttpd/lighttpd.conf >/dev/null 2>&1 || {
        echo "validation failed"
        return 1
    }
}

start_service() {
    user_exists http || user_add http
    [ -d /var/log/lighttpd ] || {
        mkdir -m 0775 -p /var/log/lighttpd
        chgrp www-data /var/log/lighttpd
    }

    validate_conf || exit 1

    procd_open_instance
    procd_set_param command $PROG -D -f /etc/lighttpd/lighttpd.conf
    procd_close_instance
}

reload_service() {
    procd_send_signal lighttpd
}

6.2 修改 lighttpd1.4.54/src/doc/config/conf.d/cgi.conf为:

#######################################################################
##
##  CGI modules
## --------------- 
##
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modcgi
##
server.modules += ( "mod_cgi" )

##
## Plain old CGI handling
##
## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini.
##
cgi.assign                 = ( 
                               ".php"  => "/usr/bin/php-cgi",
                               ".pl"  => "/usr/bin/perl",
                               ".cgi" => "/usr/bin/perl",
                               ".rb"  => "/usr/bin/ruby",
                               ".erb" => "/usr/bin/eruby",
                               ".py"  => "/usr/bin/python" )

##
## to get the old cgi-bin behavior of apache
##
## Note: make sure that mod_alias is loaded if you uncomment the
##       next line. (see modules.conf)
##
#alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )
#$HTTP["url"] =~ "^/cgi-bin" {
#   cgi.assign = ( "" => "" )
#}

##
#######################################################################

 

7.至此,配置完毕;编译烧录到开发板,然后再/www/目录下新建info.php文件

<?php
phpinfo();
?>

8.添加可执行权限:

chmod +x /www/info.php

9.在浏览器输入:开发板ip/info.php如果弹出如下信息说明配置真确:

Openwrt开发之web服务器lighttpd引擎及php-fpm环境搭建

 

 

注:php-fpm、php-fscgi均需要指定在cgi.conf文件中加入如下这句(如6.2步骤):

".php"  => "/usr/bin/php-cgi",

 否则会造成访问php文件发生503错误。

另外还需要在makemenuconfig里面关闭openwrt自带的uhttpd功能