nginx кеширование оно же синхронизация - реально?

Metal Messiah
На сайте с 01.08.2010
Offline
160
1056

Добрый вечер. Есть пока предполагаемый кластер. Несколько IP в round-robin с nginx в качестве фронтенда, отдающие статику, и передающие на APACHE2 на IP2.

По адресу /home/admin/web/portal.ua/public_html лежат файлы сайта, причем на IP2 - PHP и статика, на IP1 - только статика. Проблемка в том что статика может периодически меняться (добавляться, например), в том числе генерироваться динамикой - скриптами, и заливаться пользователями. Можно как-то объединить синхронизацию и кеширование?

Как правило, при кешировании nginx'ом файлы обзываются абы как и лежат в /var/cache или куда настроишь. Можно заставить кеш nginx их класть в тот же каталог /home/admin/web/portal.ua/public_html для того чтоб при следующем запросе они уже отдавались как статика?

Не хочется использовать синхронизацию по FTP в кроне, хотя когда-то имел дело. Регулярно ее гонять - нагрузка, а если редко - будет сервак гонять статику от Апача.

Можно писать PHP скрипт на error404 который будет закачивать файл и класть в нужное место, но хотелось бы обойтись без PHP на nginx т.к. возможны серьезные нагрузки. Какие идеи?

Шаблон пока от VestaCP с измененным IP2.

server {

listen IP1:80;
server_name portal.ua www.portal.ua;
error_log /var/log/apache2/domains/portal.ua.error.log error;
location / {
proxy_pass http://IP2:8080;
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|...|css|js|htm|html|swf)$ {
root /home/admin/web/portal.ua/public_html;
access_log /var/log/apache2/domainф/portal.ua.log combined;
access_log /var/log/apache2/domains/portal.ua.bytes bytes;
expires max;
try_files $uri @fallback;
}
}
location /error/ {
alias /home/admin/web/portal.ua/document_errors/;
}
location @fallback {
proxy_pass http://IP2:8080;
}
}
anonymous, думай что говоришь и не забывай подписать отзыв :)
A
На сайте с 19.07.2010
Offline
130
#1
Metal_Messiah:
Не хочется использовать синхронизацию по FTP в кроне, хотя когда-то имел дело. Регулярно ее гонять - нагрузка

используйте rsync в кроне. трафик и нагрузка будет минимальной.

.............
pupseg
На сайте с 14.05.2010
Offline
364
#2

haproxy в балансер на два воркера с nginx+apache+mysqld + keepalived. Синхронизация: lsyncd

Ограничения по mysql : таблицы только в innodb. поднять percona xtradb cluster.

Локальная сеть между серверами, естественно хотя-бы 1gbit.

От vesta придется отказаться, или сильно ее допиливать. Проще самим написать себе панель, если очень надо. Если сайтов мало - то панель и не нужна вовсе.

Кеш кладите на двух воркерах в свои места, т.е. два кеша, а не один общий. Все равно он будет синхронным, так как haproxy раскидает ваших посетителей так, как нужно. Вместо haproxy можно так же использовать nginx с upstream-backend, но он не такой гибкий как haproxy.

И все. проблем не будите знать годами. То, что один из воркеров слег по каким-то причинам, если не будите мониторить - не будите даже замечать.

В подобных конфигурациях, если воркеры не мониторятся, я лично и через неделю бывает узнаю, что у меня одна из нод лежит, не замечаю падения вообще.

Правильно делать на три сервера, один из них может быть не очень мощным, подойдет и хорошая vps.

Не надежно, с бубном и куртизанками - можно на два.

Качественная помощь в обслуживании серверов. (/ru/forum/661100) Бесплатных консультаций не даю, не помогаю, не обучаю. Минималка от 100$. Как пропатчить KDE-просьба не спрашивать. Есть форумы (http://linux.org.ru) и полезные сайты (http://www.opennet.ru/).
Andreyka
На сайте с 19.02.2005
Offline
822
#3

Да, конечно можно.

В локейшн статики IP1 ставите обработку 404 на @cacheimage

Прописываете в локейшене @cacheimage чтоб сходил за статикой на IP2 и поместил ее в кеш

Потом, когда складываете по расписанию с IP2 на IP1 - чистите кеш через purge

Я сам сто раз так делал, работает как часы с минимальной нагрузкой

Не стоит плодить сущности без необходимости

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий