1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Nginx location (Debian)

Тема в разделе "OFF-топик", создана пользователем Yoskaldyr, 29.02.2012.

Загрузка
  1. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Вопрос к знатокам Debian и кто использовал nginx в продакшене.
    Не работают самые примитивные правила локейшенов в nginx-е (которые прекрасно работают на другом сервере).
    Код:
    server {
        listen        127.0.0.1:80;
        server_name  domain.com;
     
        access_log  /var/log/nginx/domain.com.log;
        root /home/user/www/domain.com;
     
        location / {
            try_files $uri $uri/ /index.php?$uri&$args;
            index index.php;
        }
        location ^~ /library/ {
            internal;
        }
        location ^~ /internal_data/ {
            internal;
        }
        location ~ ^/data/.*\.php$ {
            internal;
        }
        location ~ \00 {
            internal;
        }
     
        location ~ [^/]*\.php$ {
            try_files $fastcgi_script_name =404;
            include fastcgi.conf;
        }
     
        error_page  404 /404.html;
        error_page  403 /403.html;
        error_page  500 502 503 504  /50x.html;
     
        location ~ \.htaccess$ {
            deny  all;
        }
    }
    
    т.е. nginx не блокирует /library/ и /internal_data/ и т.д.

    Может есть какая-то хитрая настройка, которую я пропустил?

    версия nginx (nginx -V):
    Код:
    nginx: nginx version: nginx/1.0.10
    nginx: TLS SNI support enabled
    nginx: configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/usr/src/nginx/source/nginx-1.0.10/debian/modules/nginx-echo --add-module=/usr/src/nginx/source/nginx-1.0.10/debian/modules/nginx-upstream-fair --add-module=/usr/src/nginx/source/nginx-1.0.10/debian/modules/nginx-syslog
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Скорее всего версия старая. Можно попробовать поставить из исходников, а не из пакета. В пакете он достаточно старый.
     
  3. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    nginx version: nginx/1.0.10 - это старый?
    просто данные конструкции работали еще с 0.6 или 0.7 версии...
    ладно попробую пересобрать. Хотя странно, что не работает простейший функционал в стандартном пакете...
     
  4. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    День убит непонятно на что...
    После длительных тестов выяснилось что перестает работать правильный порядок применения локейшнов при использовании try_files. Админ сервера не хочет пересобирать nginx из исходников - говорит что 99% это не поможет...

    У кого нибудь есть установленный ксен на дебиане с nginx-ом + php_fpm с подобным конфигом?
    Т.е. try_files в корневой локейшн (/) + internal в location ^~ /library/

    Если да, то работает internal или нет?
     
  5. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    А с апачем это работает?
    Кстати, а почему из исходников пересобрать не поможет? Ошибка явно ведь в конкретной версии nginx получается. Или нет?

    Кстати, блокировку можно сделать еще так:
    Код:
    location /library { allow 127.0.0.1; deny all; }
    
    P.S. В 6-м дебиане используется версия 1.0.12.
     
  6. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    можно, но к примеру для internal_data уже не подойдет т.к. тогда перестанет работать и отдача через x-accel-redirect. К тому же там все через сокет. Да и разницы нет апач/php_fpm - ведь проблема происходит до того как передается на них управление.

    Ладно завтра еще посмотрю... Может получится уговорить пересобрать чистый nginx сразу со статически скомпилированной либой регулярок.
     
  7. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Могу виртуалку поднять для экспериментов. Надо?

    Похожая проблема описывается тут. И решение с internal, как я понял, также не работает.
     
  8. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    это уже завтра... в статье по сыылке все правильно описано, но мне надо не совсем то (хотя принципы одинаковые используются)
    Мне надо всего лишь чтобы полностью рабочий конфиг который работает на других серверах (в первом сообщении который) работал и проблемном сервере.

    P.S. Для тестов я могу и на амазоне поднять нахаляву :) Думал может уже есть готовый у кого и может подобный конфиг...
     
  9. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Понятно.

    Просьба. Когда все заработает, можно лицезреть решение? Я сам думал на одном сайте отказаться от апача. А сейчас уже не считаю это хорошей идеей. Все же заменить .htaccess не просто получается.
     
  10. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    так решение в плане конфига и так работает - конфиг выше с полностью рабочего сайта. А что именно не так с конкретным инсталлом дебиана (там стоит ленни, который почему-то не хотят обновлять) - сообщу как будет что-то известно.
    P.S. А насчет перевода htaccess-а это дело практики. Сначла не привычно ,а потом довольно легко любые конструкции можно делать - главное понять принцип локейшенов и реврайтов Nginx-а, а регулярки - они одинаковые :)
     
  11. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Кстати, на Lenny, как и на Squeeze, дефолтный нгинкс сильно ниже 1.0.x версий. На ленни 0.6, а на сквизи 0.7. Так что, судя по версии, стоит не родной nginx, а из бэкпортов, видимо. Получается, что разницы особой нет, собирать свой или из пакета. А поведение, конечно, может и от библиотеки регулярок зависеть.
    До меня пока слабо доходит принцип работы нгинкса с локейшенами и реврайтами. Надо будет почитать, да поэкспериментировать как-нить на досуге...
     
  12. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Разобрались - разница в настройках по умолчанию разных сборок. А именно различия в обработке директивы error_page. Для одних конфигов все равно есть ли файлы указанные в этой директиве (если нет выдаст стандартную страницу ошибки nginx-а), а для других заново обработаются все локации для поиска страницы ошибки и соответственно заново try_files... И хз какое поведение более правильное - выдавать стандартную ошибку или заново локейшены обрабатывать.
    Более точно разбираться нет ни времени ни желания. Одним словом заработало и ладно, значит лучше не трогать
     
  13. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    А можно с этого места поподробнее?
     
  14. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Код:
        location ^~ /library/ {
            internal;
        }
    
    это отрабатывало нормально на 404 ошибку, но т.к. была указана директива
    Код:
        error_page  404 /404.html;
    то вместо стандартной встроенной страницы ошибки запускался поиск этой страницы по всем локейшнам и следовательно запускался корневой локейшн
    Код:
        location / {
            try_files $uri $uri/ /index.php?$uri&$args;
            index index.php;
        }
    Как раз в последнем и было различие в поведении между установками (хоть конфиг и полностью одинаковый), на других даже при отсутствии файла не шел поиск по локациям а просто выдавалась стандартная страница ошибок, а на этой установке шел поиск по локациям
    и тут явно не в либах, а скорее просто в коплектации и опциях компиляции - точно надо очень детально читать мануалы по поведению для страниц ошибок
     
  15. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ах вот оно что... Я тут поползал по документации Nginx. К сожалению, явно это нигде не говорится, хотя кое что прослеживается. Но больше в виде "между строк". Жаль, что нет детального разбора обработки конкретного запроса. Я еще натыкался на директиву root. Вроде как она в каких-то ситуациях помогала решить проблему с internal. Но мне, как далеко не знатоку конфигов nginx, сложно с этим разобраться. Ну да ладно. Когда понадобится, буду искать уже конкретные решения.
    Спасибо за описание проблемы и решение.

    Не совсем в тему, но нашел интересное решение для реализации так называемого антилича. Требует как конфигурирования nginx, так и обработки ссылок в скриптах PHP.
     
  16. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Ну это старый метод :)
    Главное чтобы работал основной функционал, а то тогда и модуль антилича не поможет, если правильно не отрабатываются локейшны :)
     

Поделиться этой страницей