За последние 24 часа нас посетили 20723 программиста и 1716 роботов. Сейчас ищет 1381 программист ...

Помощь с NGINX

Тема в разделе "Настройка веб-сервера", создана пользователем demon112, 10 фев 2017.

  1. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
    Здравствуйте. Требуется помощь с настройкой nginx location. Требуется, чтобы url несуществующих php скриптов обрабатывался /admin/router.php. Как реализовать?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно так попробовать
    PHP:
    1. server {
    2. ...
    3.     location / {
    4.         try_files $uri $uri/ /admin/router.php$is_args$args;
    5.     }
    6. ...
    7. }
     
    Ganzal и demon112 нравится это.
  3. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так и хорошо же
     
  5. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
    Возможно) но мне требуются .php ссылки)
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    просто тебе нужно решить эту проблему =)
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    Логично предположить, что для ссылок вида *.php у тебя заведено отдельное правило location и оно срабатывает (внезапно™)!
    это нормально :)
    --- Добавлено ---
    можешь попробовать изменить это правило так, чтобы оно срабатывало не на любой .php, а только на конкретный index.php или что там у тебя. тогда все остальные отстутствующие адреса, в т.ч. с окончанием .php, будут обрабатываться правилом для отсутствующих файлов.
    — К.О.
     
    #7 artoodetoo, 11 фев 2017
    Последнее редактирование: 11 фев 2017
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. server {
    2. ...
    3.     location / {
    4.         try_files $uri $uri/ /admin/router.php$is_args$args;
    5.     }
    6.     location ~ \.php$ {
    7.         include fastcgi_params;
    8.         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    9.         fastcgi_pass unix:/var/run/php5-fpm.sock;
    10.         try_files $uri =404;
    11.     }
    12. ...
    13. }
    Не проверял, но можно попробовать так
    PHP:
    1. server {
    2. ...
    3.     location / {
    4.         try_files $uri $uri/ /admin/router.php$is_args$args;
    5.     }
    6.     location ~ \.php$ {
    7.         include fastcgi_params;
    8.         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    9.         fastcgi_pass unix:/var/run/php5-fpm.sock;
    10.         try_files $uri $uri/ /admin/router.php$is_args$args;
    11.     }
    12. ...
    13. }
     
    demon112 нравится это.
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    первый однозначно нет. вот второй пример похож на решение
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему вы думаете, что роутеру аргументы нужны? давно уже всё в реквест ури сидит.
    --- Добавлено ---
    пример из доки с собачкой:
    Код (Text):
    1. Example for Drupal/FastCGI:
    2.  
    3. location / {
    4.     try_files $uri $uri/ @drupal;
    5. }
    6.  
    7. location ~ \.php$ {
    8.     try_files $uri @drupal;
    9.  
    10.     fastcgi_pass ...;
    11.  
    12.     fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    13.     fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
    14.     fastcgi_param QUERY_STRING    $args;
    15.  
    16.     ... other fastcgi_param's
    17. }
    18.  
    19. location @drupal {
    20.     fastcgi_pass ...;
    21.  
    22.     fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    23.     fastcgi_param SCRIPT_NAME     /index.php;
    24.     fastcgi_param QUERY_STRING    q=$uri&$args;
    25.  
    26.     ... other fastcgi_param's
    27. }
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Потому что в настройки nginx не разбираюсь :oops:
     
    #11 denis01, 12 фев 2017
    Последнее редактирование: 16 фев 2017
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    надо посмотреть код роутера, чтобы понять, каким раком он выковыривает аргументы. может и нужны. но последние годы все роутеры парсят $_SERVER['REQUEST_URI'] и в ус не дуют.
     
    denis01 нравится это.
  13. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
    Всем спасибо. Такое решение помогло:
    Код (Text):
    1. location ~ \.php$ {
    2.         try_files $uri $uri/ /admin/router.php$is_args$args;
    3.         include fastcgi_params;
    4.         fastcgi_pass php;
    5.     }
    А как теперь сделать, для всех несуществующих файлов кроме ".php", смотреть в admin/...?
    Т.е. /include/alfpha/style.css если не существуют, смотрим в /admin/alfpha/style.css
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А почему просто алиас не сделать в нужное место?
     
  15. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
    Не знаю как это работает...
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да с алиасом я возможно погорячился. Тут кажется что-то неправильное происходит:)
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    location ~ /include/(.*)(?!(\.php$)) {
    try_files $uri $uri/ /var/www/admin/$1 /var/www/admin/$1/ =404;
    }

    как-то так
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    первый шаг к безумию :D
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я уже давно с той стороны опытом делюсь :D
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему тогда ты не любишь мой PinPIE? В нём дофига безумия!
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @igordata а кто тебе сказал что я твой пинпай не люблю? Я тебя уважаю за этот движок, я горжусь что ты не зассал и толкаешь продукт в массы. Есть маленькая доля вероятности что они просто нахер не нужен в моих проектах :D
     
    artoodetoo нравится это.
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    где тут рыдающий смайлик?
     
  23. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
    @igordata
    PHP:
    1. location ~ /include/(.*)(?!(\.php$)) {
    2. try_files $uri $uri/ /var/www/admin/$1 /var/www/admin/$1/ =404;
    3. }
    Это работает для каталога include/... А как динамически сделать для всех каталогов?
    Пробовал:
    PHP:
    1. location ~ /(.*)/(.*)(?!(\.php$)) {
    2. try_files $uri $uri/ /var/www/admin/$2 /var/www/admin/$2 / =404;
    3. }
    не подходит немного. Только непосредственно в /admin/ файлы получает. $1 - путь, $2 - содержит название каталога.
    Как ограничить /(.*)/, чтоб туда только до слеша попадала информация?
     
    #23 demon112, 21 фев 2017
    Последнее редактирование модератором: 21 фев 2017
  24. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @demon112 сформулируй свою задачу
     
  25. demon112

    demon112 Новичок

    С нами с:
    1 сен 2016
    Сообщения:
    15
    Симпатии:
    0
    Для всех несуществующих файлов кроме ".php",
    вместо "{dir}/{path_to_file}", искать файлы в "admin/{path_to_file}"? {dir} - любая директория
    Т.е. /include/alfpha/style.css если не существуют, смотрим в /admin/alfpha/style.css
    /link2/alfpha/style.css = в /admin/alfpha/style.css
    /link3/img/img.png = в /admin/img/img.png
    /abrakadabra/img/img.png = в /abrakadabra/img/img.png

    ну и т.д.