ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ngnix+fpm, rewrite для umicms


  • To: nginx-ru@xxxxxxxxx
  • Subject: ngnix+fpm, rewrite для umicms
  • From: "ymkin" <nginx-forum@xxxxxxxx>
  • Date: Tue, 14 Feb 2012 12:00:49 -0500
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Date:Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=IQi3AAPfXwat4aHR3bD+2I+/HSpcA+TFlatcc6t5pIQ=; b=ECJSHqPn5dZO+idpz5QMgpVkvBOP5VQig+TwnJZz9SACiZBuSye4WJEsgDVnYXHAI/gpfkUf+GCynY7DSH6d7cJOsKfpB+Rd15MajfaXdCCsxwbIP8OvcLxMLl0e4Cp3;

ngnix+fpm, rewrite для umicms

Задача: построение конфигурации сайта
под umicms [http://www.umi-cms.ru/]
сравнение вариантов ngnix+apache и ngnix+fpm
Система: Ubuntu Server 11.10, apache-2.2.20, nginx-1.0.5,
php5-fpm-5.3.6.

Дистрибутив umicms содержит файл .htaccess с
набором правил преобразования url:

####################### UMI_CMS_HTACCESS_BEGIN
###########################
RewriteEngine On
#php_value auto_prepend_file "/libs/opaf.umi.php"
#To avoid manual css and js files recompile. Debug only. 
#RewriteRule
(commonClient\.js)|(compressed\.js)|(compiled\.js)|(compiled\.css)|(compressed\.css)
developerTools/preCompile.php [L]

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(sys\-temp|cache|xmldb|static|packages)\/.*$ /500/ [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^robots\.txt$  /sbots.php?path=$1%{QUERY_STRING} [L]
RewriteRule ^sitemap\.xml$  /sitemap.php [L]

RewriteRule ^config\.ini$ / [L,R]
RewriteRule ^install\.ini$ / [L,R]
RewriteRule ^install\.log$ / [L,R]
RewriteRule ^umi\.nginx\.conf$ / [L,R]
RewriteRule ^dbview\.php$ / [L,R]

RewriteCond %{REQUEST_URI} !^styles
RewriteCond %{REQUEST_URI} !^css
RewriteCond %{REQUEST_URI} !\.css
RewriteCond %{REQUEST_URI} !^js
RewriteCond %{REQUEST_URI} !\.js
RewriteCond %{REQUEST_URI} !^images
RewriteCond %{REQUEST_URI} !^webstat
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)\.xml$ index.php?xmlMode=force&path=$1&%{QUERY_STRING}
[L]

RewriteRule
^\/?(udata|upage|uobject|ufs|usel|ulang|utype|umess|uhttp):?(\/\/)?(.*)$
releaseStreams.php?scheme=$1&path=$3?%{QUERY_STRING} [L]

RewriteRule ^(.*)\.json$
index.php?jsonMode=force&viewMode=full&path=$1&%{QUERY_STRING} [L]

RewriteCond %{REQUEST_URI} !^styles
RewriteCond %{REQUEST_URI} !^css
RewriteCond %{REQUEST_URI} !\.css
RewriteCond %{REQUEST_URI} !^js
RewriteCond %{REQUEST_URI} !\.js
RewriteCond %{REQUEST_URI} !^images

RewriteCond %{REQUEST_URI} !(\.ico|\.ICO)$
RewriteCond %{REQUEST_URI} !(\.jpg|\.JPG)$
RewriteCond %{REQUEST_URI} !(\.jpeg|\.JPEG)$
RewriteCond %{REQUEST_URI} !(\.png|\.PNG)$
RewriteCond %{REQUEST_URI} !(\.gif|\.GIF)$
RewriteCond %{REQUEST_URI} !(\.css|\.CSS)$
RewriteCond %{REQUEST_URI} !(\.js|\.JS)$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING} [L]


RewriteCond %{REQUEST_URI} (\.ico|\.ICO)$
RewriteCond %{REQUEST_URI} (\.jpg|\.JPG)$
RewriteCond %{REQUEST_URI} (\.jpeg|\.JPEG)$
RewriteCond %{REQUEST_URI} (\.png|\.PNG)$
RewriteCond %{REQUEST_URI} (\.gif|\.GIF)$
RewriteCond %{REQUEST_URI} (\.css|\.CSS)$
RewriteCond %{REQUEST_URI} (\.js|\.JS)$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ [R=404]


<IfModule mod_mime.c>
        AddType application/x-java-applet .class
        AddType text/x-component .htc
</IfModule>

<IfModule mod_security.c>
        SecFilterScanPOST Off
</IfModule>

<Files "whatsnew.txt">
        Deny from all
</Files>
######################## UMI_CMS_HTACCESS_END
############################

На странице системных требований umicms
[http://www.umi-cms.ru/support/umi_cms_system_requirements/] есть
пример для ngnix+fpm
[http://www.umi-cms.ru/support/umi_cms_system_requirements/nginx_conf/],
но он перегружен конструкциями if() и не
работает (по-крайней мере у меня).
Пробуем создать более оптимальный
набор обработчиков, с учетом таких
особенностей umicms:
- лицензия umicms привязана к доменному
имени и ip-адресу (была получена при
работе сайта под apache),
- umicms формирует статический кеш страниц
в формате nginx.

Глобальные конфигурационные файлы nginx
содержат обычный набор настроек и
определение
upstream backend-apache { server 127.0.0.1:8080; }

Конфигурация виртуального хоста может
быть переключена на работу с backend-apache
или fpm (location  @fallback).
Вариант с apache работоспособен
полностью, а вариант с fpm имеет проблемы
в преобразовании url.

Я определяю именованые location для
обработки запросов статических файлов
(@files), передачи запросов бекэнду (@fallback)
и общего rewrite (@umi). Остальные location служат
для rewrite по разным правилам, в
соответствии с htaccess. Переходы между
location выполняются обработчиками
        error_page      405 = @files;
        error_page      400 = @fallback;


######## Виртуальный хост ########
server {
        listen          *:80;
        server_name     .test.name.ru;

        access_log      /srv/www/test/log/nginx.access.log;
        error_log       /srv/www/test/log/nginx.error.log notice;
        rewrite_log     on;

        location  @fallback {
#               proxy_pass      http://backend-apache;
#               include         proxy.conf;
#               include         proxy_params;

                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                include         fastcgi_params;
                root            /srv/www/test/www;
# Устанавливаем значение константы,
требуемое при проверке лицензии
                fastcgi_param   SERVER_ADDR     127.0.0.1;
        }
        location  @files {
                root            /srv/www/test/www;
        }
        location  @umi {
# Тут проблема (1)
#               rewrite  ^  /?path=$uri&$args  last;
                rewrite  ^  /index.php?path=$uri&$args  last;
        }

        error_page      405 = @files;
        error_page      400 = @fallback;
        server_name_in_redirect off;

        location  ~  \.php$ {
                return 400;
        }
        location  /admin {
                return 400;
        }
        location  /robots.txt {
                rewrite  ^  /sbots.php  last;
        }
        location  ~  ^(.*)\.json$ {
                rewrite  ^ 
/index.php?jsonMode=force&viewMode=full&path=$1&$query_string  last;
        }
        location  ~  ^(.*)\.xml$ {
                rewrite  ^  /index.php?xmlMode=force&path=$1&$query_string  
last;
        }
        location  ~  ^/(udata|upage|uobject|ufs|usel|ulang|utype):?(\/\/)?(.*)$
{
                rewrite  ^  /releaseStreams.php?scheme=$1&path=$3?$query_string 
last;
        }
        location  ~* 
(config\.ini|install\.ini|install\.log|umi\.nginx\.conf|dbview\.php) {
                rewrite  ^  /  permanent;
        }
        location  ~  ^/(css|styles) {
                return 405;
        }
        location  ~* 
^.+\.(ico|jpg|jpeg|gif|png|svg|js|css|htc|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$
{
                return 405;
        }

        location  / {
                if ($is_args = '?') { return 400; }
                if ($request_method = 'POST') { return 400; }
                if ($cookie_umicms_session) { return 400; }
# Обработка статического кеша umicms
                try_files  $uri/index.html  @umi;
                root    /srv/www/test/www/sys-temp/static-cache/$host;
        }


        #error_page  404  /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }

        # deny access to .htaccess files
        #
        location  ~  /\.ht {
                deny all;
        }
}

###################

Наблюдаемые проблемы:
1) Правило rewrite в location  @umi - На одном
сайте, и для ngnix+apache и для ngnix+fpm подходит
rewrite  ^  /index.php?path=$uri&$args  last;
На другом сайте, в ngnix+apache это правило
приводит к зацикливанию, а работает
rewrite  ^  /?path=$uri&$args  last;

2) Страницы админзоны не работают.


Прошу прокомментировать и указать на
ошибки.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,222390,222390#msg-222390

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.