Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статика для анонимов, динамика для остальных 
:(
    Опции темы
abibok
Дата 20.1.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.6.2007

Репутация: нет
Всего: нет



Привет.

Не уверен, что данная тема создается в подходящем форуме, но все же.

Есть идея, и вопрос в том, можно ли ее реализовать.

Сайт, на нем документы.
Каждый документ имеет две версии
1. статичный html
2. динамическая страница на php 

Статика - для анонимов, всяких случайных посетителей из поисковиков.
Динамика - для зарегистрированных пользователей, которых меньшинство среди всех посетителей (напр. в день приходит 10000 чел, просмотров 37000, постоянных посетителей около 500, активных зарегистрированных около 200) - содержит всякое интересное для юзеров - голосования за комменты, подсветки всякие и т.д.

Цель - снизить нагрузку на сервер.

Я понимаю, что можно сделать проверку типа
Код

if ($is_registered)
{
// ...
}
else
{
// построчно читаем статичный файл и выводим
}

, но быть может есть решения, без вызова php? 

Если да - то как?
Если нет, буду благодарен за любые соображения/ссылки по теме.
PM MAIL   Вверх
skyboy
Дата 20.1.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



опыта реализации подобных механизмов у меня нет, но есть некоторые соображения. прошу отнестись с долей скептицизма.
если "без РНР", значит, у нас не будет информации из сессии о том, залогинен пользователь или нет. Будут только НТТР-заголовки. Среди которых - установленные cookie. Так вот идея в том, чтоб устанавливать зарегистрированным пользователям cookie, при наличии которой затем делать mod_rewrite/SSI/действия с  другими неизвестными мне механизмами, чтоб максимально быстро отдать статику. в РНР коде "динамического варианта" проверку залогиненности придется, конечно, оставить. Но я не думаю, что "хакеров" с вручную установленными cookie будет много.
PM MAIL   Вверх
sTa1kEr
Дата 21.1.2010, 01:04 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Собственно, идея skyboy очень не плохая. Я бы только добавил, что можно избавиться от повторной авторизации на PHP, если хранить данные авторизации в memcache. А реализуется все это достаточно просто средствами nginx, алгоритм будет примерно следующий:

1. Приходит запрос в nginx, если он не содержит secret_key, то отдаем пользователю статическую страницу.
2. Шлем запрос в memcache (средствами nginx'а) по имеющемуся secret_key, если ничего не найдено, то отдаем пользователю статическую страницу (или, к примеру, шлем на форму авторизации)
3. Если по secret_key было получено какое-то значение, отправляем запрос на исполнение PHP

Записывать данные в memcache и устанавливать secret_key нужно сразу после аутентификации пользователя.
PM MAIL   Вверх
IgorIV
Дата 21.1.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Для Вордпресса есть плагин кеширования, Supercache plus. Он позволяет сохранять на диск кешированые страницы в формате .html.
Я с ним немного игрался и думаю, что конфигурация для nginx как раз подойдёт.
Код

# if the requested file exists, return it immediately
    if (-f $request_filename) {
    break;
    }
 
    set $supercache_file '';
    set $supercache_uri $request_uri;
 
    if ($request_method = POST) {
    set $supercache_uri '';
    }
 
    # Using pretty permalinks, so bypass the cache for any query string
    if ($query_string) {
    set $supercache_uri '';
    }
 
    if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
    set $supercache_uri '';
    }
 
    # if we haven't bypassed the cache, specify our supercache file
    if ($supercache_uri ~ ^(.+)$) {
    set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
    }
 
    # only rewrite to the supercache file if it actually exists
    if (-f $document_root$supercache_file) {
    rewrite ^(.*)$ $supercache_file break;
    }
 
    # all other requests go to Wordpress
    if (!-e $request_filename) {
    rewrite . /index.php last;
    }


Если что, в гугле - supercache plus nginx

Это сообщение отредактировал(а) IgorIV - 21.1.2010, 19:36
PM MAIL   Вверх
sTa1kEr
Дата 21.1.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



IgorIV, тогда уж проще proxy cache настроить.
PM MAIL   Вверх
IgorIV
Дата 21.1.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



А как распознать гостей и пользователей? Кому из кеша старую, кому новую страницу.
PM MAIL   Вверх
sTa1kEr
Дата 21.1.2010, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Так в приведенном вами конфиге тоже гости от пользователей не отличаются. Просто идет проверка, если для определенного урла есть статический html, то отдаем его, иначе шлем запрос бэкэнду. 
Proxy cache занимается тем же самым, только без вмешательства бэкэнда, сам создает статические html и сам их чистит.

Добавлено через 4 минуты и 40 секунд
Больше похоже, что это сделано для apache, т.к. он не имеет таких же гибких возможностей кеширования, как nginx.
PM MAIL   Вверх
IgorIV
Дата 22.1.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Цитата(sTa1kEr @  21.1.2010,  23:20 Найти цитируемый пост)
Больше похоже, что это сделано для apache

??
Это не php-код, это кусок конфига для nginx. Там же идёт проверка кук, проверка метода запроса.
PM MAIL   Вверх
sTa1kEr
Дата 22.1.2010, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(IgorIV @  22.1.2010,  01:39 Найти цитируемый пост)
Это не php-код, это кусок конфига для nginx. Там же идёт проверка кук, проверка метода запроса. 

Где вы увидели что бы я писал про PHP код?
Цитата(sTa1kEr @  22.1.2010,  00:20 Найти цитируемый пост)
Так в приведенном вами конфиге

Естественно это конфиг nginx, но сделан он, имхо, только для совместимости плагина с nginx'ом, а сам изначально плагин писался, как костыль для apacha. Т.е. все тоже самое в nginx'е "работает из коробки".

Цитата(IgorIV @  22.1.2010,  01:39 Найти цитируемый пост)
проверка метода запроса. 

Причем тут метод запроса и различные группы пользователей? Естественно кеш для POST запросов не будет работать и это не нужно проверять специально, это азы работы любого кеша.

Цитата(IgorIV @  22.1.2010,  01:39 Найти цитируемый пост)
проверка кук

Если это и является отличием гостей от пользователей, то что по вашему мешает использовать это с кешом?

Это сообщение отредактировал(а) sTa1kEr - 22.1.2010, 09:31
PM MAIL   Вверх
IgorIV
Дата 22.1.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



sTa1kEr, ну не умею читать того что не написано. А вот додумывать горазд smile А если еще и мысли не в ту сторону ...
Цитата(sTa1kEr @  22.1.2010,  07:25 Найти цитируемый пост)
 а сам изначально плагин писался, как костыль для apacha. 

С этим не согласен, абсолютно. Плагин писался как костыль модуль для вордпресса. 
Ладно, есть 2 варианта, есть выбор для вопрошавшего.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.