Форум программистов, компьютерный форум, киберфорум
Наши страницы
nginx
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
McSim
9 / 9 / 0
Регистрация: 18.01.2010
Сообщений: 71
1

Proxy_rass regexp

20.02.2019, 16:03. Просмотров 1026. Ответов 7

Всем по привету.

Организация, в которой я работаю, блочит очень большое кол-во сайтов. Можно на каждый нужный сайт отправлять заявку, и ждать когда его разблочат... но это долго.

Есть домашний сервер, где можно проксировать такого рода сайты. Но тут столкнулся с проблемой на одном из них: подтяжка стилей, скриптов и картинок происходит с субдоменов.

Т.е.
somedomain.ru - основной сайт
sub.somedomain.ru - подгрузка стилей и скриптов
sub(\d*)?.somedomain.ru - подгрузка картинок

здесь и ежу понятно что нужно использовать регулярку, но, сволоч, не работает

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

конфиг по основному
Код
server {
    listen *:80;
    server_name somedomain.my-domain.net;
    error_log /var/log/nginx/somedomain.my-domain.net.log;

    location / {
        root /var/www/null;
        try_files $uri @static;
    }
    location @static {
        include 'somedomain.conf';
        fastcgi_param HTTP_HOST somedomain.ru;
        proxy_set_header HOST somedomain.ru;
        proxy_pass [url]https://somedomain.ru;[/url]
        proxy_set_header X-Real-IP $remote_addr;
    }
}
somedomain.conf
Код
proxy_cookie_domain somedomain.ru somedomain.my-domain.net;
proxy_set_header Accept-Encoding "";

subs_filter https://(sub\d*\.)?somedomain.ru http://$1somedomain.my-domain.net ir;
Здесь все отлично: сайт открывает, ссылки меняет. Естественно, по замененным ссылкам ничего не открывает. Для этого пишу второй конфиг с регуляркой по субдоменам:

Код
server {
    listen *:80;
    server_name ~^(?<prefix>sub\d*)\.somedomain\.my-domain\.net$;
    error_log /var/log/nginx/somedomain.my-domain_error.net.log;

    location / {
        root /var/www/null;
        try_files $uri @static;
    }
    location @static {
        fastcgi_param HTTP_HOST $prefix.somedomain.ru;
        proxy_set_header HOST $prefix.somedomain.ru;
        proxy_pass https://$prefix.somedomain.ru;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
и вот тут засада. error 502

У меня такое чувство, что не отрабатывает переменная $prefix в инструкции proxy_pass
хотя делал по этому мануалу http://nginx.org/ru/docs/http/server_names.html#regex_names

как быть?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2019, 16:03
Ответы с готовыми решениями:

Regexp
Доброго всем вечера! Не могли бы вы подсказать как построить регулярное выражение для парсинга...

regexp
Почему это не работает? $ma=&quot;ghghhfhfhfhfhfhfghfhh111sdfsdd11111&quot;; echo $ma;...

RegExp
Всем привет , есть текст Ваше имя (Алексей) И нужно средствами JavaScript вывести текст из скобок

RegExp
Добрый день ! есть вот эти четыре строки Нужно написать RegExp код корый бы выводил, dec hex...

RegExp C++
Хочу использовать в программе регулярные выражения. Нашел в интернете PCRE (pcre.org) и обертку к ...

7
Jewbacabra
Эксперт PHP
4032 / 3314 / 1429
Регистрация: 24.04.2014
Сообщений: 10,022
20.02.2019, 17:09 2
Выбран неподходящий инструмент. Следует использовать vpn или socks.
0
McSim
9 / 9 / 0
Регистрация: 18.01.2010
Сообщений: 71
20.02.2019, 17:15  [ТС] 3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Выбран неподходящий
тем не менее, он имеет право существовать

здесь уже дело принципа - "почему не работает?"
0
Jewbacabra
Эксперт PHP
4032 / 3314 / 1429
Регистрация: 24.04.2014
Сообщений: 10,022
20.02.2019, 17:39 4
Так и саморез можно молотком забить, но это не значит что надо даже пытаться так делать.
0
20.02.2019, 17:39
McSim
9 / 9 / 0
Регистрация: 18.01.2010
Сообщений: 71
20.02.2019, 17:56  [ТС] 5
Цитата Сообщение от Jewbacabra Посмотреть сообщение
саморез можно молотком забить
вбитый саморез держится лучше чем вкрученный гвоздь - это факт!

это все слова не относящиеся к теме, а по сути:
мне не так много из порезанных сайтов требуется. и открывать на паблик лишний порты (vpn или socks) совсем не хочется. поэтому хочу воспользоваться уже существующими сервисами. для nginx`a это не составит большого труда
0
Emilien
703 / 507 / 289
Регистрация: 07.11.2015
Сообщений: 815
20.02.2019, 18:03 6
Лучший ответ Сообщение было отмечено McSim как решение

Решение

Цитата Сообщение от McSim Посмотреть сообщение
"почему не работает?"
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass
В значении параметра можно использовать переменные. В этом случае, если адрес указан в виде доменного имени, имя ищется среди описанных групп серверов и если не найдено, то определяется с помощью resolver’а.
Код
resolver 8.8.8.8;
1
Jewbacabra
20.02.2019, 21:38
  #7

Не по теме:

Цитата Сообщение от McSim Посмотреть сообщение
вбитый саморез держится лучше чем вкрученный гвоздь - это факт!
Это не имеет значения. Результат будет на порядок лучше при использовании подходящего инструмента

0
McSim
9 / 9 / 0
Регистрация: 18.01.2010
Сообщений: 71
21.02.2019, 11:11  [ТС] 8
Emilien, спасибо огромное, сработало
вынес resolver 8.8.8.8; в директиву http
0
21.02.2019, 11:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2019, 11:11

Regexp
Я новичек и надеюсь на помощь. Занимаюсь аналитикой (популярность фильмов) и необходим небольшой...

REGEXP
Я вот наткнулся на использование regexp уже приличное количество раз. Но почему этот код: &lt;html&gt;...

RegExp
А как обнулить коллекцию??? а то когда по новой ищеш match он добавляет к старым матчам!?!?!


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

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

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