Форум программистов, компьютерный форум, киберфорум
Наши страницы
nginx
Войти
Регистрация
Восстановить пароль
 
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
#1

Apache+nginx избирательно перенаправлять на php-скрипт

11.05.2018, 09:37. Просмотров 230. Ответов 15
Метки нет (Все метки)

Здравствуйте форумчане, у меня установлена связка apache+nginx и статика отдается через nginx.
Так вот. Появилась задача, для конкретных пользователей отдавать статику как положено через nginx, а кому-то через php-скрипт.
Сейчас я пока сделал в конфиге nginx тупо rewrite на нужный php скрипт и там уже определяю пользователей и кому надо делаю какую-то обработку, а кому-то отдаю файл просто через readfile();
Но при таком раскладе смысл nginx теряется и на апач возрастает нагрузка. Можно ли как-то решить мою задачу другим способом?
Допустим авторизованным отдаю файл через nginx, а не авторизованным через php-скрипт?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2018, 09:37
Ответы с готовыми решениями:

Apache+Nginx+PHP+Python+MySQL
Здравствуйте дорогие форумчане, всегда ставил простую связку Apache+PHP+Mysql...

Nginx <!-- vs --> Apache
Прошу извинить за глупости, которые, возможно, придется тут прочитать. Я могу,...

Apache+nginx правило
Доброго времени суток. Уважаемые форумчане, есть проблема. На сайте требуется...

nginx и apache. Субдомены
Здраствуйте, столкнулся с той проблемой, что не могу настроить связку nginx и...

NGINX + APACHE + SSL
Добрый день. Я немного логически не могу понять как должно быть :) Стоит...

15
Jewbacabra
Эксперт PHP
3372 / 2811 / 1267
Регистрация: 24.04.2014
Сообщений: 8,515
11.05.2018, 11:52 #2
MirDj, а как ты определишь авторизован ли пользователь средствами nginx?
0
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
11.05.2018, 11:54  [ТС] #3
Jewbacabra, вот я и спрашиваю, может какой-то другой подход существует, о котором я не знаю.
0
Slash Mix
13 / 13 / 9
Регистрация: 01.04.2018
Сообщений: 105
11.05.2018, 12:10 #4
Цитата Сообщение от MirDj Посмотреть сообщение
Появилась задача, для конкретных пользователей отдавать статику как положено через nginx, а кому-то через php-скрипт.
Эта статика разная или это одни и те же файлы, что гостей, что для авторизованных?
0
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
11.05.2018, 12:12  [ТС] #5
Slash Mix, Задача заключается в том, что обычная часть пользователей получает просто картинки, а другая через скрипт с наложением налету текста на неё, типа копирайта
0
Jewbacabra
Эксперт PHP
3372 / 2811 / 1267
Регистрация: 24.04.2014
Сообщений: 8,515
11.05.2018, 13:01 #6
MirDj, можно попробовать nginx + lua + redis. И лучше поменять логику: неавторизованным отдавать либо заранее подготовленные картинки, либо использовать кеш nginx. Авторизованным делать другие пути и проверять есть ли в редисе токен текущего пользователя и отдавать картинку если есть
0
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
11.05.2018, 13:30  [ТС] #7
Jewbacabra, я вкратце почитал про предложенную Вами связку и смысл понял. Спасибо за совет, но слишком много мороки получается.
На самом деле, я воюю с парсером сайта (просто боюсь тут писать, вдруг владелец его тут тоже обитает!!!).
Сейчас парсер вычислять проблематично, потому как он использует прокси и анонимный, никакие данные под типа HTTP_VIA и HTTP_PROXY_USER не передается, кроме REMOTE_ADDR. Он конечно каждый раз разный.
Вот как получаю данные:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function getIpAll() {
 
        // Массив возможных ip-адресов
        $addrs = '';
 
        // Сбор данных возможных ip-адресов
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            // Проверяется массив ip-клиента установленных прозрачными прокси-серверами
            foreach (array_reverse(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])) as $value) {
                $value = trim($value);
                // Собирается ip-клиента
                if (preg_match('#^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$#', $value)) {
                    $addrs .= 'HTTP_X_FORWARDED_FOR: '.$value;
                }
            }
        }
        // Собирается ip-клиента HTTP_CLIENT_IP, если есть
        if (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $addrs .= 'HTTP_CLIENT_IP: '.$_SERVER['HTTP_CLIENT_IP'];
        }
        // Собирается ip-клиента HTTP_X_CLUSTER_CLIENT_IP, если есть
        if (isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
            $addrs .= 'HTTP_X_CLUSTER_CLIENT_IP: '.$_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
        }
        // Собирается ip-клиента HTTP_PROXY_USER, если есть
        if (isset($_SERVER['HTTP_PROXY_USER'])) {
          $addrs .= 'HTTP_PROXY_USER: '.$_SERVER['HTTP_PROXY_USER'];
        }
        // Собирается ip-клиента REMOTE_ADDR, если есть
        if (isset($_SERVER['REMOTE_ADDR'])) {
         $addrs .= 'REMOTE_ADDR: '.$_SERVER['REMOTE_ADDR'];
        }
        // Собирается ip-клиента HTTP_VIA, если есть
        if (isset($_SERVER['HTTP_VIA'])) {
         $addrs .= 'HTTP_VIA: '.$_SERVER['HTTP_VIA'];
        }
        // Возврат полученных ip-адресов
        return $addrs;
    }
Но так как он парсит все с моего сайта, то я в код внедряю блок невидимый куда помещаю все переданные им заголовки и IP.
Потом на его сайте просто просматриваю код и вижу что мне надо про него.
Так я увидел что он поддерживает куки. При входе ко мне на сайт, я ему установил куку и теперь могу его пока по ней определять. Так вот и смысл не в блокировке парсера, потому как это бесполезно, он догадается со временем и выкрутится, а просто размещать ему (одному ему только) по центру картинки (чтобы вырезать нельзя было) какой-то текст.
0
Jewbacabra
Эксперт PHP
3372 / 2811 / 1267
Регистрация: 24.04.2014
Сообщений: 8,515
11.05.2018, 21:30 #8
MirDj, Можно и используя nginx проверять наличие куки. Все куки содержатся в $http_cookie
1
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
11.05.2018, 21:46  [ТС] #9
Jewbacabra, круто.. АА есть какой-нибудь пример с куками типа if и else или там другая конструкция?
0
Jewbacabra
Эксперт PHP
3372 / 2811 / 1267
Регистрация: 24.04.2014
Сообщений: 8,515
11.05.2018, 22:07 #10
https://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if
1
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
11.05.2018, 22:16  [ТС] #11
Jewbacabra, правильно я понял чтобы проверить по конкретной куки имя которой id и значение равно указанному надо сделать так:
Bash
1
2
3
4
if ($http_cookie ~* "id=(proverka)") {
    rewrite делаем на php скрипт
}
}
0
Emilien
509 / 412 / 241
Регистрация: 07.11.2015
Сообщений: 667
11.05.2018, 22:36 #12
Ещё можно использовать $cookie_имя http://nginx.org/ru/docs/http/ngx_http_core_module.html#var_cookie_
Bash
1
2
3
if ($cookie_id ~ "proverka") {
 
}
Bash
1
2
3
if ($cookie_id = "proverka") {
 
}
~ регулярное выражение с учётом регистра символов
~* без учёта регистра символов
= обычное сравнение переменной со строкой.
1
MirDj
2 / 2 / 2
Регистрация: 16.01.2013
Сообщений: 393
11.05.2018, 22:42  [ТС] #13
Emilien, благодарю... А для работы с такими куками не надо подключать что-то отдельно, библиотеки и т.д?
0
Emilien
509 / 412 / 241
Регистрация: 07.11.2015
Сообщений: 667
11.05.2018, 22:48 #14
Цитата Сообщение от MirDj Посмотреть сообщение
Emilien, благодарю... А для работы с такими куками не надо подключать что-то отдельно, библиотеки и т.д?
Нет. Это должно быть доступно сразу.
0
Jewbacabra
Эксперт PHP
3372 / 2811 / 1267
Регистрация: 24.04.2014
Сообщений: 8,515
12.05.2018, 00:18 #15
Цитата Сообщение от Emilien Посмотреть сообщение
Ещё можно использовать $cookie_имя
Что будет при обращении к такой переменной, если кука с заданным именем отсутствует?
0
Emilien
509 / 412 / 241
Регистрация: 07.11.2015
Сообщений: 667
12.05.2018, 00:23 #16
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Что будет при обращении к такой переменной, если кука с заданным именем отсутствует?
Там будет пустая строка.
1
12.05.2018, 00:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2018, 00:23

nginx параллельно с apache
Народ где можно почитать или подскажите, как на другом порту запустить тестовый...

Конвертация с nginx в apache
Всем доброго времени суток, я не так давно занимаюсь сайтами и не давно узнал...

Перевести apache в nginx
Здравствуйте! Интересует как правильно перевести apache в nginx. Суть всего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru