Для создания сайта непосредственно на роутере, необходимо выполнить следующие требования:
- роутер с памятью не менее 256Мб c интерфейсом USB для подключения внешнего накопителя;
- прошивка, подерживающая установку стороннего программного обеспечения прошивки.
Рассмотрим создание web севера для сайта на роутере Asus AC66U с прошивкой dd-wrt. Следует заметить, что прошивка dd-wrt kong поддерживает внутри себя lighttpd сервер, но воспользоваться этим затруднительно, так прошивка заточена под узко специализированный сайт Pydio.
Для создания полноценного сайта необходима связка nginx + php7-fpm, которые есть в репозитарии Entware-3x. Первоначально необходимо форматировать накопитель, очень хорошо это описано здесь. Далее на форматированный накопитель необходимо установить Entware-3x . После того, как базовые модули из Entware-3x установлены необходимо установить следующие модули
opkg install php7 php7-cgi php7-cli php7-fpm php7-mod-ctype php7-mod-curl php7-mod-gd php7-mod-mbstring php7-mod-opcache php7-mod-openssl php7-mod-session php7-mod-xml php7-mod-zip php7-mod-hash php7-mod-dom php7-mod-simplexml nginx
Если Ваш сайт буде работать на двух протоколах на http и на https, то во избежание конфликтов лучше перенести WEB интерфейс самого роутера, скажем на 81 порт, это можно сделать так
nvram set http_lanport=81
nvram commit
reboot
Далее необходимо отредактировать следующие файлы
/opt/etc/php.ini
в нем изменить следующее
#; путь в каталог где находится сайт
open_basedir ="/opt/share/nginx/html"
#; необходимый размер памяти для php (зависит от устанавливаемого движка сайта)
memory_limit = 32M
#; путь по которому nginx находит index.php
doc_root = "/opt/share/nginx/html"
#; временный каталог для сохранения файлов
session.save_path ="/opt/share/nginx/html/tmp"
#; параметр который трактуется всеми по разному может быть 1 или 0 или по умолчанию
;cgi.fix_pathinfo=1
и добавить
#; для корректной работы curl
curl.cainfo = "/opt/etc/nginx/certs/cacert.pem".
Сам файлов сертификатов можно скачать <a href="https://curl.haxx.se/docs/caextract.html" target="_blank“> файл cacert.pem
Конфигурация php-fpm
Так как по умолчания в dd-wrt существует пользователь nobody и группа nobody, (cat /etc/passwd), а добавлять традиционнго пользователя www-data и группу www-datа неудобно, то лучше заменить файл по умолчанию /opt/etc/php7-fpm.d/www.conf
на файл nobody.conf следующего содержания
[nobody]
user = nobody
group = nobody
listen = /opt/var/run/php7-fpm.sock
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
pm = ondemand
pm.max_children = 5
Далее запустим
/opt/etc/init.d/S79php7-fpm start
и проверим корректность работы
ls -la /opt/var/run/php7-fpm.sock
если все нормально то будет что то в этом роде
srw-rw---- 1 nobody nobody 0 May 2 16:36 /opt/var/run/php7-fpm.sock
Конфигурация nginx
Простые файлы конфигурации выглядят следующим образом
nginx.conf
user nobody;
worker_processes 1;
error_log /opt/var/log/nginx/error.log;
error_log /opt/var/log/nginx/error.log notice;
error_log /opt/var/log/nginx/error.log info;
pid /opt/var/run/nginx.pid;
events {
worker_connections 64;
}
http {
sendfile on;
keepalive_timeout 65;
include mime.types;
default_type application/octet-stream;
include default;
}
И файл
default
server {
# имя сервера
server_name 192.168.1.1;
# рабочие порты
listen 80;
listen 443 ssl;
# путь в рабочий каталог файлов
root /opt/share/nginx/html;
index index.php;
# директивы для обработки файлов приведены для движка GRAV </a>
location / {
try_files $uri $uri/ /index.php$args;
}
location ~* /(.git|cache|bin|logs|backups)/.*$ {.
return 403;.
}
location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|php|pl|py|cgi|twig|sh|bat)$ {.
return 403;.
}
location ~* /user/.*\.(txt|md|yaml|php|pl|py|cgi|twig|sh|bat)$ {.
return 403;.
}
location ~ /(LICENSE|composer.lock|composer.json|nginx.conf|web.config|htaccess.txt|\.htaccess) {.
return 403;.
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/opt/var/run/php7-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
}
И запустить # nginx -s reload.
Проверить можно /opt/etc/init.d/S80nginx test.
Далее создать тестовый файл
i.php
<?php
phpinfo();
?>
и поместить его в каталог /opt/share/nginx/html
при обращении http://192.168.1.1:81
должны вывестись параиетры php7.
Если ошибки nginx
Установить права chmod 777 /opt/share/nginx/html и собственника chown -R nobody:nobody /opt/share/nginx/html.
Если ошибка No input file specified. - необходимо проверить все измененные параметры в php.ini.
Если все работает, то можно закачивать выбранный легкий движок в каталог /opt/share/nginx/html и начинать настраивать сайт. Хотя в плане эксперимента я установил Друпал 7, должен сказать что РАБОТАЕТ, НО маленький нюанс загрузка страниц с свопингом на диске длится минутами. А этот сайт на движке GRAV.