botaniQQQ
@botaniQQQ
Q

Кому лучше доверить обработку статики, expressJS или Nginx?

Привет.

Собственно в этом и вопрос.

Статика в expressJS:

var theme = 'MyTheme';
app.use(express.static(path.join(__dirname, 'themes', theme, 'public')));


Статика в Nginx:

location ~* \.(jpg|jpeg|gif|ico|png|css|js|xml|rss|txt|svg|eot|ttf|woff|woff2)$ {
            root /home/example.com/themes/??????????/public;
            access_log off;
            autoindex off;
            expires 30d;
    }


Собственно как сделать обработку статики в Nginx, так как он не знает какая сейчас тема активна на сайте? Или же пусть всё обрабатывает expressJS?

И еще, такая неприятность в Nginx, что когда через Web открыть app.js (example.com/app.js) оно его открывает как обычный файл, каким образом это скрыть?
  • Вопрос задан
  • 934 просмотра
Пригласить эксперта
Ответы на вопрос 4
@Nc_Soft
Да никто никогда не оставляет express торчать голой жопой в веб. Всегда проксируют через nginx, а отдавать статику бекендом это вообще бред.
Ответ написан
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Статику отдают через CDN, а exspress, что торчащий голой жопой, что спрятавшийся за торчащим nginx`ом, годится только для прототипирования.
Ответ написан
sim3x
@sim3x
Делаешь симлинк на активную тему
ln -s  /home/examplecom/themes/1234/public /home/examplecom/themes/active


Как установить nodejs
https://nodejs.org/en/download/package-manager/#de...

Как настроить nginx <-> nodejs
https://www.digitalocean.com/community/tutorials/h...
Ответ написан
valerium
@valerium
Изобретая велосипед
Белые люди решают эту задачу так. Бэкэнд (в Вашем случае expressJS) формирует ссылки на статику таким образом, что они содержат в себе указание на тему, например /static/my_theme/css/style.css. В конфиге nginx пишется примерно вот так:
location /static/ {
            root /home/example.com/static/;
            access_log off;
            autoindex off;
            expires 30d;
    }

Очевидно, в папке /home/example.com/static/ лежат только публичные файлы, весь JavaScript должен лежать в других папках.

Таким образом, бэкэнд не торчит голой жопой наружу, nginx успешно выполняет работу, для которой предназначен, GET запросы остаются идемпотентными, а у Вас остаётся возможность без лишней боли вынести статику в CDN при необходимости.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект