Welcome! Log In Create A New Profile

Advanced

ngnix+fpm, rewrite для umicms

February 14, 2012 08:29AM
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) Страницы админзоны не работают.


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

ngnix+fpm, rewrite для umicms

ymkin February 14, 2012 08:29AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 234
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready