Назад | Перейти на главную страницу

Псевдоним Nginx или перезапись URL-адреса Horde Groupware ActiveSync не обрабатывает файл rpc.php

Я пытаюсь настроить групповое ПО Horde с Nginx. Веб-интерфейс работает, но я не могу заставить работать специальный URL-адрес ActiveSync. Вики Horde объясняет, как использовать его с веб-сервером Apache Вот.

Моя проблема в том, что я настраиваю перезапись (тоже пробовал псевдоним) для обслуживания местоположения /horde/Microsoft-Server-ActiveSync через /horde/rpc.php сценарий. Но с моей текущей конфигурацией nginx выполняет перезапись и возвращает код состояния 200. Но похоже, что файл php не выполняется. Если я пойду в /horde/rpc.php непосредственно он открывает диалог входа в систему. Так что, похоже, это работает правильно.

Сначала я искал проблему в Google, но не смог найти рабочего решения. Итак, теперь я хотел бы спросить вас.

Конфигурация должна позволять доступ к части ActiveSync через URL /horde/Microsoft-Server-ActiveSync. Веб-интерфейс орды уже доступен через /horde.

Моя конфигурация выглядит так:

по умолчанию-ssl.conf

server {
        listen                  443 ssl;
        ssl                     on;
        ssl_certificate         /opt/nginx/conf/certs/server.crt;
        ssl_certificate_key     /opt/nginx/conf/certs/server.key;
        server_name             example.com;
        index                   index.html index.php;
        root                    /var/www;

        include sites-available/horde.conf;
}

horde.conf

location /horde {
        rewrite_log on;
        rewrite ^/horde/Microsoft-Server-ActiveSync(.*)$ /horde/rpc.php$1 last;

        try_files $uri $uri/ /rampage.php?$args;

        location ~ \.php$ {
                try_files $uri =404;
                include sites-available/horde.fcgi-php.conf;
        }
}

horde.fcgi-php.conf

include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_params (по умолчанию nginx)

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Уровень журнала nginx настроен на отладку. Результат после запроса:

2014/06/13 10:33:15 [notice] 17332#0: *1 "^/horde/Microsoft-Server-ActiveSync(.*)$" matches "/horde/Microsoft-Server-ActiveSync", client: XX.XX.XX.XX, server: example.com, request: "GET /horde/Microsoft-Server-ActiveSync HTTP/1.1", host: "example.com"
2014/06/13 10:33:15 [notice] 17332#0: *1 rewritten data: "/horde/rpc.php", args: "", client: XX.XX.XX.XX, server: example.com, request: "GET /horde/Microsoft-Server-ActiveSync HTTP/1.1", host: "example.com"

Все это происходит на RaspberryPi с Raspbian GNU / Linux 7 (который в основном является Debian Wheezy). Итак, я думаю, перезапись работает, но файл php не обрабатывается ?! Кто-нибудь знает, где проблема и как исправить?

ОБНОВИТЬ: Если я изменю файл rpc.php к mytest.php с этим содержанием:

<pre>
<?php var_export( $_SERVER ); ?>
</pre>

И измените перезапись на

rewrite ^/horde/Microsoft-Server-ActiveSync(.*)$ /horde/mytest.php$1 last;

Я получаю правильный результат:

array (
  'USER' => 'www-data',
  'HOME' => '/var/www',
  'FCGI_ROLE' => 'RESPONDER',
  'QUERY_STRING' => '',
  'REQUEST_METHOD' => 'GET',
  'CONTENT_TYPE' => '',
  'CONTENT_LENGTH' => '',
  'SCRIPT_NAME' => '/horde/mytest.php',
  'REQUEST_URI' => '/horde/Microsoft-Server-ActiveSync',
  'DOCUMENT_URI' => '/horde/mytest.php',
  'DOCUMENT_ROOT' => '/var/www',
  'SERVER_PROTOCOL' => 'HTTP/1.1',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_SOFTWARE' => 'nginx/1.4.4',
  'REMOTE_ADDR' => 'XX.XX.XX.XX',
  'REMOTE_PORT' => '25330',
  'SERVER_ADDR' => 'XX.XX.XX.XX',
  'SERVER_PORT' => '80',
  'SERVER_NAME' => 'example.com',
  'REDIRECT_STATUS' => '200',
  'PATH_INFO' => '',
  'PATH_TRANSLATED' => '/var/www',
  'SCRIPT_FILENAME' => '/var/www/horde/mytest.php',
  'HTTP_HOST' => 'example.com',
  'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0',
  'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5',
  'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
  'HTTP_DNT' => '1',
  'HTTP_COOKIE' => 'XXX',
  'HTTP_IF_MODIFIED_SINCE' => 'Thu, 12 Jun 2014 11:56:09 GMT',
  'HTTP_CACHE_CONTROL' => 'max-age=0',
  'HTTP_CONNECTION' => 'keep-alive',
  'PHP_SELF' => '/horde/mytest.php',
  'REQUEST_TIME_FLOAT' => 1402664378.2101,
  'REQUEST_TIME' => 1402664378,
)

Так почему же rpc.php работает некорректно? Если я правильно понимаю, он пытается установить базовый процесс аутентификации. Могло ли это быть проблемой?

После дополнительных попыток и просмотра журналов (наконец, нужных) я нашел мой вина. В конце концов, это была ошибка конфигурации.

Орда Вики дает подсказку в одной строке:

Чтобы активировать сервер, его необходимо включить в конфигурации Horde на вкладке ActiveSync.

Это дает мне правильное направление: я поискал в конфигурации, но не смог найти материал ActiveSync. Итак, я копнул глубже и понял, что не устанавливал библиотеку Horder_ActiveSync. :(

После выполнения sudo pear install horde/horde_activesync и обновление таблиц базы данных из WebUI теперь все работает!

Надеюсь, это поможет кому-то другому.