|
Общее Веб-разработка в целом, идеи, проекты... |
20.01.2015, 01:16
|
#1
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
nginx rewrite
имеется
location /{
rewrite /(res|scenes)/([0-9]+)/(.+\.swf)$ /$1/$3?$2 last;
rewrite /([0-9]+)/(Web.swf)$ /$2?$1 last;
rewrite /Web([0-9]+).swf$ /Web.swf?$1 last;
rewrite /get/(.*)$ /get.php?url=$1 last;
index index.php index.html;
location ~ \.php$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|gif|png|ico|css|zip|rar|pdf|xml|js)$ {
error_page 404 = 404;
}
}
почему может не срабатывать вот это правило?
rewrite /get/(.*)$ /get.php?url=$1 last;
|
(Offline)
|
|
20.01.2015, 03:08
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: nginx rewrite
При каких ссылках конкретно не срабатывает, при всех?
Выглядят rewrite'ы грустно на самом деле, как буд-то кто-то писал endpoint'ы не думая..
Да и так понимаю ты сервишь всякие ресурсы и файлы используя php?
Если там скрипт тупо выдаёт файлы, то в разы лучше посмотреть в сторону try_files директивы в nginx, чтобы избежать не нужного стрима данных через php сокеты, что нагружает CPU и RAM зазря.
Также упрости:
rewrite /([0-9]+)/Web\.swf$ /$2?Web.swf last;
|
(Offline)
|
|
20.01.2015, 07:23
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
Сообщение от moka
При каких ссылках конкретно не срабатывает, при всех?
Выглядят rewrite'ы грустно на самом деле, как буд-то кто-то писал endpoint'ы не думая..
Да и так понимаю ты сервишь всякие ресурсы и файлы используя php?
Если там скрипт тупо выдаёт файлы, то в разы лучше посмотреть в сторону try_files директивы в nginx, чтобы избежать не нужного стрима данных через php сокеты, что нагружает CPU и RAM зазря.
|
Я писал эти эндпоинты) Основная задача - сделать статические ссылки. Вся суть в том, что, когда я заливаю обновление на хостинг, то при не изменном названии файла меняется его crc сумма (ее выдает Unity). Чтобы избежать кеширования браузером, я передаю в ссылке эту crc сумму. Все мои файлы на хостинге лежат в папке /res сейчас.
По поводу не работающего. Не работает так:
https://steamcraft.landrays.com/get/http%3A%2F%2Fwww.biletomsk.ru%2F_files%2Fnews%2Fimages%2Fc67d52407cf4b16e95d41e7d59cb52a3.jpg
Работает так
https://steamcraft.landrays.com/get.php?url=http%3A%2F%2Fwww.biletomsk.ru%2F_files%2Fnews%2Fimages%2Fc67d52407cf4b16e95d41e7d59cb52a3.jpg
Скачиваю некоторые аватарки через кроссдомен используя php скрипт на своем сервере. статическая ссылка необходима, чтобы файл закешировала CDN (cloudflare у нас сейчас).
Сообщение от moka
Также упрости:
rewrite /([0-9]+)/Web\.swf$ /$2?Web.swf last;
|
Этот вариант я тоже пробовал и уже не использую как и свой, они создают одну проблему - смену адреса файла. Именно для этого файла это создает проблему с не сохранением PlayerPrefs при изменении файла.
|
(Offline)
|
|
20.01.2015, 07:51
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: nginx rewrite
Простейший способ избежать кеширования — каждый раз добавлять к ссылке какой-нибудь левый параметр типа ×tamp=нынешнеевремя
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
20.01.2015, 07:59
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
Мне нужно кеширование и нужно перекачать изменившийся файл.
|
(Offline)
|
|
20.01.2015, 14:37
|
#6
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: nginx rewrite
В игре чатика нет? А то в бою хочется написать что-нибудь булчанам, а нельзя
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
20.01.2015, 15:28
|
#7
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: nginx rewrite
Добавь ^ ко всем rewrite вначале строки.
rewrite ^/get/(.*)$ /get.php?url=$1 last;
При изменении файла меняется его modified date в системе? Если да, то ты можешь сделать так:
location / { try_files $uri $uri/ =404; expires modified 365d; }
Это будет учитывать кеш и обновленный файл, заголовки будут посланы таким образом, что броузер все равно будет делать запрос на файл с заголовком даты своего кеша, если сервер считает что кеш на клиенте идентичен то шлет 304 обрывая соединение (по сути запрос только обменяет заголовки), и клиент грузит файл с кеша.
Такой метод стабильно работает для кеша и решил мне много проблем с очень похожими ситуациями как у тебя.
Относительно аватарок, можно вообще сделать proxy на CDN, и если файл там не найден, но редиректнит обратно на ссылку с запросом генерации аватарки в твоем скрипте. Скрипт сгенерит аватарку выдаст клиенту и паралельно зальет ее на CDN. И следующий запрос получит ее с CDN сразу.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
20.01.2015, 16:16
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
Попробую с ^ спасибо, а по поводу заголовков и expires - я использую cloudflare, все запросы идут через него, его кэш может обновится через год, если я такой expires поставлю.
UPD: с ^ тоже не срабатывает
|
(Offline)
|
|
20.01.2015, 16:32
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
Сообщение от Igor
В игре чатика нет? А то в бою хочется написать что-нибудь булчанам, а нельзя
|
Будет, вообще сейчас под окном игры есть окошко с комментами
|
(Offline)
|
|
20.01.2015, 16:49
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: nginx rewrite
Сообщение от pax
Попробую с ^ спасибо, а по поводу заголовков и expires - я использую cloudflare, все запросы идут через него, его кэш может обновится через год, если я такой expires поставлю.
|
modified на то и создан, чтобы он все равно делал запрос и получал заголовок не смотря на наличие кеша, и только потом делал выводы - юзать кеш или грузить новый файл.
Также я не знаю как CloudFlare отвечает с заголовками, но думаю при заливке на него, ты можешь сам установить нужные Meta данные для Modified кеширования тоже.
|
(Offline)
|
|
20.01.2015, 17:16
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
т.е. 1000 пользователей буду запускать игру и качать 100 файлов и на каждый будет идти запрос user=>cloudflare=>server=>cloudflare=>user пусть даже для валидации? Да нафиг надо. Мне всего то надо сделать статическую ссылку на скрипт.
|
(Offline)
|
|
20.01.2015, 22:33
|
#12
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: nginx rewrite
Сообщение от pax
т.е. 1000 пользователей буду запускать игру и качать 100 файлов и на каждый будет идти запрос user=>cloudflare=>server=>cloudflare=>user пусть даже для валидации? Да нафиг надо. Мне всего то надо сделать статическую ссылку на скрипт.
|
Сейчас, если нету картинки:
nginx > php (cpu, ram) > check file > API request > download > save > serve
Если есть картинка:
nginx > php (cpu, ram) > check file > serve
?
Я предлагаю:
Если нету картинки:
nginx > perm_redirect(cdn) > 404, temp_redirect(php) > php > API request > download > save > redirect_back
Если есть:
nginx > perm_redirect(cdn)
Таким образом у тебя php будет только качать картинку и заливать, и проверка будет не на php. Для того чтобы сервить картинку, что будет 99.8% запросов, у тебя вообще никакой нагрузки на сервер не будет.
А сейчас у тебя php должен проверять наличие файла, если он на cdn ты как проверяешь, запрос из php делаешь? Тогда у тебя IO и потоки из pool'а тупо отстаивают.
Такой подход имеет минимальную нагрузку на твой сервер, иначе у тебя пользы от CDN вообще никакой, т.к. ты все равно сервишь из PHP тем более через прокси. Вообще ноль пользы от php.
Используя Permanent редирект (если картинка под ID хранится и никогда не изменится ID картинки), то это ваще броузером будет resolve'ится, и даже сервер твой трогаться не будет для картинок. В таком случае есть реальная польза от CDN.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.01.2015, 01:01
|
#13
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
Я если честно ничего не понял, придется много гуглить. Но наверное не в ближайшие дни. Потом к этой задаче вернусь.
Моя логика такая - я обращаюсь через CDN на свой сервер по url для скачки картинки. php скачивает картинку, отдает cdn. Если ссылка статическая, то cdn ее кеширует и отдает игроку. В следующий раз по этой ссылке cdn не будет запрашивать файл с моего сервера. Как-то так... Статической ссылку пока не вышло сделать. Не пойму почему не работает.
|
(Offline)
|
|
21.01.2015, 01:32
|
#14
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: nginx rewrite
Сообщение от pax
Я если честно ничего не понял, придется много гуглить. Но наверное не в ближайшие дни. Потом к этой задаче вернусь.
Моя логика такая - я обращаюсь через CDN на свой сервер по url для скачки картинки. php скачивает картинку, отдает cdn. Если ссылка статическая, то cdn ее кеширует и отдает игроку. В следующий раз по этой ссылке cdn не будет запрашивать файл с моего сервера. Как-то так... Статической ссылку пока не вышло сделать. Не пойму почему не работает.
|
Ты описал именно то что я и описал во втором варианте :D
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.01.2015, 09:10
|
#15
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: nginx rewrite
Ну так у меня и устроено. Осталось решить проблему со статической ссылкой. Вообще это можно настроить в панели cloudflare... наверное так и сделаю.
Cloudflare работает через dns, так что я просто указал для каких доменов включить трафик через него и все. Работаю со своим доменом как и работал, у него просто ip адрес сменился и весь трафик идет через cloudflare. Указал агрессивное кеширование на 1 год ))
UPD: неужели наконец счастье) Жаль на домен всего три правила можно на бесплатном аккаунте
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:57.
|