SimpleSAMLphp、Nginx、Ubuntu 14.04

SimpleSAMLphp、Nginx、Ubuntu 14.04

我的设置

  • Ubuntu 14.04 LTS 64 位
  • nginx
  • SimpleSAMLphp 1.13.2

我的 Nginx 服务器块:

server {
    listen 80;
    listen [::]:80;

    root /var/www/sso/html;
    index index.php index.html index.htm;

    server_name xxx.xx.x.xx;

    location / {
        try_files $uri $uri/ /index.php?$args ;
    }

    # For simpleSAMLphp
    location /simplesaml {
        alias /var/www/sso/html/simplesaml/www;
        location ~ \.php(/|$) {
                fastcgi_split_path_info ^(.+?\.php)(/.+)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
            }  
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include fastcgi_params; 
    }   
}   

我的文件结构如下,其中/var/www/sso/html/是根文件夹。我已将 SimpleSAMLphp 结构放入/var/www/sso/html/simplesaml/

我已按照上找到的安装步骤进行操作https://simplesamlphp.org/docs/stable/simplesamlphp-install虽然本指南仅涵盖 Apache 服务器。

我研究了如何以正确的方式配置 Nginx 服务器块。但我得到的行为是,当打字时my-domain.com/simplesaml我被重定向到my-domain.com/simplesaml/module.php/core/frontpage_welcome.php随着网站输出未指定输入文件。

然后我查看了 Nginx error.log,它告诉我:

[error] 26283#0: *1 FastCGI sent in stderr: "Unable to open primary script: /var/www/sso/html/simplesaml/www//module.php/core/frontpage_welcome.php (No such file or directory)" while reading response header from upstream, client: xxx.xxx.xx.234, server: xxx.xx.x.xx, request: "GET /simplesaml/module.php/core/frontpage_welcome.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "xxx.xx.x.23"

然后我阅读了错误消息并尝试根据此处所述进行更改:http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

运行后,我检查了 sso 目录中文件/目录的权限:

find sso/ -type d -exec chmod 755 {} \;
find sso/ -type f -exec chmod 755 {} \;

它看起来像这样: 在此输入图像描述

尽管一切看起来都正确,但用户组允许运行/读取/写入文件。我还更改为fastcgi_param SCRIPT_FILENAME $request_filename;Nginx服务器块。

我的想法

它为什么重定向到 simplesaml/module.php/core/frontpage_welcome.php 而不是 simplesaml/modules/core/frontpage_welcome.php ?

可能出什么问题了?

答案1

就我在 Apache 上完成的每次安装而言,这是 simplesamlphp 的正常行为。我还没有让 Nginx 工作,但想法是让它以同样的方式工作,只是通过 php-fpm 将 path_info 作为参数传递给 module.php 。

答案2

看这个答案。它说找不到文件,因为它无法解析别名的文件名。

https://groups.google.com/forum/#!topic/simplesamlphp/TvU1qZpWBIs

答案3

我知道我迟到了,但这可能会有所帮助。我遇到了类似的问题(以及其他问题:-( ),让我所有的痛苦消失的关键是 simplesamlphp/config/config.php 中的值baseurlpath。对我有用的是使用实际的 URL,而不是 *nix 路径到../www,即baseurlpath=https://mysiteurl.com/simplesaml/

作为参考,这里是我的服务器块中位置块的相关部分:

location /simplesaml/ {
    # Location Access and error log files.                                           
    access_log /var/log/nginx/simplesaml.access.log;                       
    error_log /var/log/nginx/simplesaml.error.log;

    # add alias root to global simple saml install
    alias /absolute_path/to/simplesamlphp/www/;

    # set index document
    index index.php;

    location ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
        fastcgi_split_path_info ^(.+?\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$phpfile;
        fastcgi_param PATH_INFO $pathinfo if_not_empty;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
   }
}

相关内容