使用agendav / trouble转发php params配置nginx

时间:2015-12-27 23:20:16

标签: php nginx

我尝试用nginx设置agendav(一个php web日历客户端)。我设法看到了登录提示。不幸的是,我不明白当我尝试登录时会发生什么,我还不熟悉nginx。处理正则表达式也让我感到疯狂,而且也没有足够的文档。

我的php索引文件位于/usr/share/agendav/web/public/index.php我将通过以下网址访问该应用程序: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;
               }
        }

有人可以指导我如何做这项工作吗?

1 个答案:

答案 0 :(得分:0)

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;
    }
}

有关详情,请参阅this document。有关nginx文档的一般来源,请参阅this