最近拿到一台WRT1900ACSv2,想在路由上面挂站,openwrt上默认的web server是uhttpd,还是想换成更加熟悉的nginx,遂开始了折腾。
先找下这台机器的信息,上网站:https://openwrt.org/toh/views/toh_fwdownload
cpu代号是mvebu,机型代号是shelby,先刷个官方固件,最新的稳定版本是18.06.1
装个nginx,源里面默认版本是1.12.2-1
但是。。。
直接这样把uhttpd停止,把nginx启动是不能用的,默认的nginx无法支持cgi,也就是默认的nginx进不去luci的页面。
搜到一篇文章:
https://right.com.cn/forum/thread-321157-1-1.html
看后面的评论,最新版本的nginx已经有模块支持cgi了,不用按照楼主说的做反向代理。
先去找下官方有没有现成的
https://archive.openwrt.org/snapshots/trunk/mvebu/generic/packages/packages/
居然没有nginx-mod-luci模块,算了,自己编译吧,自食其力。
还是喜欢用完整源代码的环境编译,用sdk的环境直接编译的话每次都死得很难看,老是提示缺少这个缺少那个,烦。
先搞份18.06的代码。
https://github.com/openwrt/openwrt.git
注意选择18.06的分支。
这次系统换成了centos7,要先装下依赖。
yum install ncurses-libs ncurses-devel zlib-devel gawk flex-devel patch gcc gcc-c++ perl subversion git-core unzip bzip2 perl-Thread-Queue wget perl-Thread-Queue openssl-devel zlib-static perl-Data-Dumper
源码目录update&install一下
./scripts/feeds update -a
./scripts/feeds install -a
定制一下固件,主要是选择平台和机型,其他的不用改了。
make menuconfig
一路退出,最后保存一下。
开始编译
make -j4 V=99
新代码现在不用做任何修改,直接无痛编译完成。i5的台式机大概编译半小时能完成。
编译完成后,把最新的nginx代码搞过来。
https://github.com/openwrt/packages.git
在net文件夹可以找到nginx
但是我们要的nginx-mode-luci模块还依赖uwsgi-cgi模块,同样在net目录下
把这2个文件夹拷贝到原来18.06代码的feeds/packages/net目录下
编译一下这2个新模块,因为原来18.06的代码没有uwsgi,所以还是要先install&update一下。
./scripts/feeds update -a
./scripts/feeds install -a
定制一下固件
make menuconfig
选择路径Network-Web Servers/Proxies
可以找到nginx-mod-luci了,我这里是把nginx相关的全勾上(选中为M)。
往下翻,找到uwsgi,全勾上。
一路exit。
开始编译,先编译nginx
make package/feeds/packages/nginx/compile -j5 V=s
再编译uwsgi
make package/feeds/packages/uwsgi-cgi/compile -j5 V=s
几分钟就编译完了。
在bin/packages/arm_cortex-a9_vfpv3/packages文件夹
可以找到我们的东西了!全部装上。
停止原来的uhttpd并disable防止自动启动
/etc/init.d/uhttpd stop
/etc/init.d/uhttpd disable
开启nginx并设置为自动启动
/etc/init.d/nginx enable
/etc/init.d/nginx start
ps一下看看nginx是否已经启动
注意,跟恩山上的那篇教程不同,这里不用对nginx做任何配置,直接访问一下路由ip,熟悉的界面已经回来了。
我们去路由里看下nginx的配置,cd到/etc/nginx
可以看到,nginx-mod-luci模块会自动生成一个新的nginx.conf配置文件,把原来安装nginx自动生成的nginx.conf文件改名变成nginx.conf_old
看下nginx.conf文件内容
user nobody nogroup;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 0;
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 1G;
large_client_header_buffers 2 1k;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 1;
gzip_proxied any;
root /www;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
include luci_uwsgi.conf;
}
include /etc/nginx/conf.d/*.conf;
}
我们不用做任何修改,即可让nginx支持cgi,显示luci。
至于挂站,大家对nginx很熟了,不多说了。