SimpleSAMLphp, Nginx, 우분투 14.04

SimpleSAMLphp, Nginx, 우분투 14.04

내 설정

  • 우분투 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/modules/core/frontpage_welcome.php 대신 simplesaml/module.php/core/frontpage_welcome.php로 리디렉션되는 이유는 무엇입니까?

무엇이 잘못될 수 있나요?

답변1

이는 Apache에서 수행한 모든 설치에서 simplesamlphp의 일반적인 동작입니다. 아직 Nginx를 작동시키지는 않았지만, php-fpm을 통해 module.php에 매개변수로 path_info를 전달하여 동일한 방식으로 작동하게 하는 것이 아이디어입니다.

답변2

이 답변을 참조하십시오. 별칭 파일 이름을 확인할 수 없기 때문에 파일을 찾을 수 없다는 메시지가 나타납니다.

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

답변3

늦었다는 건 알지만 이게 도움이 될 것 같아요. 나는 비슷한 문제를 겪었습니다. (그리고 다른 문제도 있었습니다 :-() 그리고 모든 고통을 없애는 열쇠는 simplesamlphp/config/config.php의 값이었습니다 baseurlpath. 나에게 도움이 된 것은 *nix 경로가 아닌 실제 URL을 사용하는 것이었습니다. ../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;
   }
}

관련 정보