【小白教程】openwrt/qwrt搭建web环境onmp(nginx+php+myspl)
一、搭建背景及web环境搭建作用
最近在某鱼淘了一台雅典娜路由器256g版硬改了2g运行内存,刷了lean的QWRT固件,原本计划玩docker并在docker搭建nginx和php的,不过因为墙的原因下载镜像源比较麻烦,想了一下既然玩docker也这样麻烦,我的路由器运行内存(2g)和储存emmc(256g)也比较大,索性直接在路由器上搭建web环境算了,这样后续用ipv6做外网访问还可以做反向代理;那很多同学可能会问在路由器搭建web有什么用?因为我平时的web环境都是在个人电脑上搭建的,没有办法确保24小时在线,同时购买国内服务器带宽小价格还贵,部分需要响应快的web又不方便搭建在境外服务器,所有搭建在24小时在线的路由器上就是最好的选择,当然了除此以外,一般虚拟机上能够做的事情,这个web也能做了;此篇过程从一个完全小白的角度编写,力求只要是按照我的步骤搭建,基本上都能成功;
二、硬件要求
因为长时间运行web的环境需要占用资源,对路由器还是有要求的,路由器内存最好512m以上(我在512亚瑟路由器上搭建后,内存只剩200m不到了),存储空间最好1g以上(可以挂载u盘或者移动硬盘作储存使用),同时路由器固件需要openwrt或者qwrt的固件(其他固件我没有试过);
下面我的硬件情况(在浏览器登录路由器后台就可以看到)
三、搭建过程
1.安装前期准备工作,挂载点修改
挂载点修改的目的是为了方便后面指定web的根目录,同时也为了后续上传代码方便,详细修改如图
自定义修改为/home,这个目录要记好,后面需要使用,这个挂载点的修改可以在ssh终端上用命令修改,这里为了方便不习惯命令的小伙伴直接用的路由器后台页面修改
自此,安装nginx和php的前期准备工作就已经做好了,下面进入正式安装过程;
2.安装nginx
nginx的安装有两个方式,可以在路由器后台软件包里面安装,也可以登录ssh用命令安装,下图是登录路由器后台安装的截图,openwrt会有一点不同,进入路径都差不多:
考虑到部分操作必须用命令配置,我这里重点讲一下登录ssh用命令安装并配置的方法,详细如下
2.1:ssh命令安装需要的工具:FinalShell,这个工具是免费的,自己搜索一下安装就行,工具主要目的是为了登录路由器后台进行命令操作,登录路由器的是你登录路由器后台的ip,账号是:root,密码是你登录路由管理器的密码:比如我的路由器后台ip是:192.168.11.1,端口默认:22 账号:root
登录以后的界面如下:(有的是第一次登录后会自动断开,再次登录就好了)
安装命令如下:(openwrt的默认安装目录是/etc)
(1):安装nginx
opkg update
opkg install nginx
(2):创建nginx工作目录:安装好nginx后,需要创建代码存放的目录(也叫web根目录),现在需要用到前面挂载的目录/home,我们在这个目录下新建一个web目录,命令如下:(当然你也可以把目录改成其他名字,或者放到其他地方,后面在nginx配置文件里面把目录改成你建的其他目录名称就行,我这里的目录建在前面挂载的空间最大的home目录下面)
mkdir /home/web
(3):创建nginx用户组和用户并指定用户目录
#安装用户及用户组ipk
opkg install shadow-useradd shadow-groupadd
#添加用户组
groupadd www
#添加用户到用户组www
useradd -g www www
#将Nginx的工作目录绑定到www用户
chown -R www:www /home/web
(4):配置nginx的配置文件
安装完nginx后会在这个目录/etc/config/nginx下生成默认的nginx配置,但是这个配置文件是80端口的和系统本身登录后台的登录页面冲突,所以需要先删除这个配置内容,删除内容前先用下面的命令备份:
cp /etc/config/nginx /etc/config/nginx_backup
然后用下面的命令编辑内容
vi /etc/config/nginx
进入后界面如下:
按 i 字母今日编辑状态,光标移动内容最后面按删除键,删除完全部内容,然后按 ESC键退出编辑状态,英文输入状态下输入冒号 :wq 退出编辑页面,完成系统默认配置文件删除;
其次需要删除系统默认的uci.conf文件,删除前同样先备份
cp /etc/nginx/uci.conf /etc/nginx/uci.conf1
备份好后使用文件删除命令:
rm /etc/nginx/uci.conf
删除完系统默认的配置文件后,现在进行我们自己想要的nginx的配置文件,文件默认目录在/etc/nginx/nginx.conf;很多nginx安装失败的原因就在于nginx安装好了以后没有删除系统默认配置文件然后重新进行nginx.conf配置,导致nginx不能正常运行,所以这里需要使用vi命令创建或者修改nginx.conf文件,vi命令如果打开不存在文件,默认会创建文件,命令如下:
vi /etc/nginx/nginx.conf
我这里进入后面发现配置文件是空的,这个不用担心,直接把我下面的代码全部复制进去保存就行:
user www www;
worker_processes 1;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
access_log off;
include vhost.conf;
}
代码复制进去一定要注意看看最顶端的这个代码是不是user开头的,因为大多数情况下直接复制粘贴后,user前面的u会被覆盖掉,需要把光标移动到前面是手动加上u,这个地方非常重要,不然配置文件会报错
复制完成后,按一下esc键退出编辑状态,英文输入状态下输入冒号 :wq 退出编辑页面;
(5):创建vhost.conf文件,这个文件的作用大家可以自己搜索一下,创建的方式和前面nginx.conf文件一样;这里有一个点非常重要,listen的端口必须是80端口以外的端口,因为大家登陆路由后台页面的web程序已经把80端口占用了,如果继续使用80端口,会导致大家没有办法登陆路由器管理后台,这也是很多人安装nginx失败的重要原因,我这里使用了8080端口,命令如下:
vi /etc/nginx/vhost.conf
server {
listen 8080;
server_name localhost;
root /home/web;
index index.html index.htm index.php default.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~* ^.+.php(/.*)*$ {
fastcgi_pass 127.0.0.1:9000; #FastCGI的server
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/web/$fastcgi_script_name;
include fastcgi_params;
}
}
注意点和上面的nginx.conf配置一样,直接复制进去容易把最前面的一位数少了,需要单独加上
正确的配置应该如下,同样的也是按一下键盘左上角的ESC键,然后英文状态下输入 :wq 保持退出
至此,nginx的安装已经完成,大家安装nginx过程中会遇到的坑,只要用我的方法就会全部搞定;
3.安装php步骤
(1)php7文件包的安装:在openwrt和qwrt系统的软件包里面已经没有了php5的文件包了,我查询看了一下只有php7和php8,这也是很多小伙伴安装网上教程安装失败的原因,我这里安装php7,同样安装方法也是用ssh命令的方式安装,方法很简单,直接把下面代码复制粘贴进入就行:
opkg update
opkg install php7
opkg install php7-cli php7-fpm
opkg install php7-mod-gd php7-mod-session
opkg install php7-mod-pdo-mysql php7-mod-pdo
opkg install php7-mod-mcrypt php7-mod-mbstring php7-fastcgi php7-cgi php7-mod-xml php7-mod-ctype php7-mod-curl php7-mod-exif php7-mod-ftp php7-mod-iconv php7-mod-json php7-mod-sockets
(2)安装安装时区和spawn-fcgi,代码如下:
opkg install nginx spawn-fcgi zoneinfo-core zoneinfo-asia
(3):配置php.ini文件,命令如下
vi /etc/php.ini
进入后移到;short_open_tag = on,然后按一下 i 键,进入vi编辑状态,把前面 ; 号去掉,这样这项就被打开了,然后再把doc_root = "/www" 前面的 ; 去掉并修改为doc_root = "/home/web" ,
另外找到
memory_limit = 8M 把这里的修改为memory_limit = 128M
并在最后一行加上默认时区设置和mysql关联
date.timezone = Asia/Chongqing
mysql.default_socket = /var/run/mysqld.sock
最后同样按键盘左上角的ESC键退出编辑状态,英文状态下输入 :wq 退出,这样php就安装完成;
4.安装mysql
因为我不需要mysql环境,我就没有实际安装,我把大概安装步骤和代码写一下:
(1):安装mysql
opkg update
opkg install mysql-server
(2):配置过程,以下步骤需要一步一步的来,不要全部直接复制粘贴
#创建数据库文件夹
mkdir -p /home/data /home/data/mysql /home/data/tmp
#创建默认的数据库
/usr/bin/mysql_install_db --force
#启动mysql
/etc/init.d/mysqld start
#输入如下命令创建mysql的密码
/usr/bin/mysqladmin -u root password 123456
#登陆数据库
mysql -u root -p
#连接上mysql之后,创建数据库(可以自己定义,记住就行了,之后会用到)
create database abcd
g
#查看当前可用数据库
show databases
g
#退出mysql
quit
至此,mysql安装配置完成
5.配置nginx和php的运行关联
其实前面vhost.conf已经配置了nginx和php的关联,现在我们在FastCGI里面在做一个简单配置
FastCGI具体配置:
vi /etc/nginx/fastcgi_params
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 /home/web/$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;
同样按ESC键退出编辑状态,英文输入法状态下输入 :wq 保存退出,至此,配置完成
7.开启fastcgi服务、nginx服务,加入自动启动,测试是否有异常
(1):开启fastcgi服务,直接在ssh输入以下命令
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 2 -f /usr/bin/php-cgi
输入后显示:spawn-fcgi: child spawned successfully: PID: 2756,这样就成功开启了
如果要开机启动,将上述指令放置到/etc/rc.local脚本之下
如果rc.local 中有exit 0 ,记得注释掉,不然就不会开始监听9000端口
vi /etc/rc.local
同样,加入后需要按左上角ESC键,英文状态下输入 :wq 保存退出,这样就配置成功
(2):开启nginx服务,测试服务有没有问题
/etc/init.d/nginx enable
/etc/init.d/nginx start
再输入
nginx -t
结果返回
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
再加载一下配置看看有没有报错,输入一下命令:
nginx -s reload
如果报错内容
[error] 11094#0: invalid PID number "" in "/var/run/nginx.pid"
错误的原因,一般是路径错误:Nginx无法找到指定的PID文件路径,如文件不存在或路径配置有误导致,直接输入下面的代码就完美解决
nginx -c /etc/nginx/nginx.conf
这个代码就是指定路径,然后再次加载
nginx -s reload
没有报错的话,这样就是配置没有问题了,至此搭建工作全部完成,下面就开始检验成果了
四、结果检验
这里的结果检验就是上传php代码运行,代码上传方式有两种,第一打开samba网络共享,直接在文件中上传代码,第二种通过FTP上传,我这里选择第一种演示
QWTR的固件原始装了samba服务,直接按照图片路径打开就行,目录这个地方输入最开始挂载的/home目录,名称随意写一个,然后点击 保存&应用
打开服务后,你双击打开网上邻居,就可以看到共享文件夹了,点击进入上传代码
点击进入,在之前建好的nginx跟目录新建一个index.php文件,把以下代码复制进入,保存
然后在浏览器输入你的路由器ip加端口8080,192.168.12.1:8080,显示以下页面,说明正常运行
下面是我写的某节目源php代理,播放截图,完美运行
至此,教程全部结束,如果有不清楚的可以留言,我看到会及时回复,希望大家都能搭建起自己的路由器web环境