使用agendav/故障转发php参数配置nginx


configuring nginx with agendav / troubles forwarding php params

我尝试用nginx设置agendav(一个php网络日历客户端)。我设法看到了登录提示。不幸的是,我不知道当我尝试登录时会发生什么,我还不太熟悉nginx。处理regex也让我抓狂,而且也没有足够的文档。

我的php索引文件位于/usr/share/agendav/web/public/index.php。我将通过以下url访问该应用程序:https://server.com/public/index.php维奇工作得很好。输入用户名和密码后,我将被转发到https://server.com/public/index.php/login.但这会给我一个404错误代码。

我想我的try_files是错误的,但我不知道如何解决这个问题。

以下是我的nginx服务器配置中有趣的部分:

server {
        listen 443 ssl;
        server_name server.com;
        root /usr/share;
        index index.html index.htm;
        ssl on;
        ssl_certificate /etc/ssl/cacert.pem;
        ssl_certificate_key /etc/ssl/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
        ssl_prefer_server_ciphers on;
        fastcgi_param   HTTPS               on;
        fastcgi_param   HTTP_SCHEME         https;
        location / {
                try_files $uri $uri/ =404;
                auth_basic      "Authorisation Required";
                auth_basic_user_file /usr/share/nginx/www/users;
        }
        location /public {
               root /usr/share/agendav/web/;
               index index.php;
               location ~ /public/(.+'.php)$ {
                       try_files $uri $uri/ /index.php;
                       root /usr/share/agendav/web/;
                       fastcgi_pass unix:/var/run/php5-fpm.sock;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                       include /etc/nginx/fastcgi_params;
               }
        }

有人能指导我怎么做吗?

URI /public/index.php/login是一个带有路径信息的PHP脚本,与您的PHP正则表达式位置不匹配。您需要调整正则表达式,提取路径信息并执行脚本。

有很多使用fastcgi_split_path_infoif指令的例子,但我更喜欢使用try_files,如下所示:

set $controller /public/index.php;
location /public {
    root /usr/share/agendav/web;
    index index.php;
    try_files $uri $uri/ $controller;
    location ~ ^(?<script>.*'.php)(?<pathinfo>.*)$ {
        try_files $script $controller;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $pathinfo;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

有关详细信息,请参阅此文档。有关nginx文档的一般来源,请参见此。