更换openwrt默认的web server为nginx

最近拿到一台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很熟了,不多说了。

你可能感兴趣的:(更换openwrt默认的web server为nginx)