내 nginx 별칭이 작동하지 않는 이유는 무엇입니까?


10

누군가가에 액세스 할 때 /phpmyadmin/nginx가 /home/phpmyadmin/일반적인 문서 루트가 아닌 별칭 을 가져 오도록 별칭을 설정하려고 합니다. 그러나 URL을 가져올 때마다 fastcgi를 통해 가져 오지 않은 모든 항목에 대해 404가 표시됩니다. fastcgi는 잘 작동하는 반면 나머지는 그렇지 않습니다. strace일반적인 문서 루트에서 다른 모든 것을 가져 오려고한다고 말하지만 이유를 알 수는 없습니다. 누구나 통찰력을 제공 할 수 있습니까?

내 구성의 관련 부분은 다음과 같습니다.

            location ~ ^/phpmyadmin/(.+\.php)$
            {
                    include fcgi.conf;
                    fastcgi_index index.php;
                    fastcgi_pass  unix:/tmp/php-cgi.sock;
                    fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
            }

            location /phpmyadmin
            {
                    alias /home/phpmyadmin/;
            }

nginx를 처음 접하는 오랜 아파치 사용자로서, 나는 이것이 정말로 이상하고 불필요하게 복잡하다는 것을 알았습니다. 나는 몇 시간 동안 문서를 살펴보고 그 이유를 이해하려고 노력했습니다. 누군가이 행동을 설명해 주시겠습니까? 별명은 위치에 대한 별명이어야합니다.
tu-Reinstate Monica-dor du

지금까지 내가 그것을 이해, 별명은 후행를 생략하면 참고하지만 것을, "그냥"이다 /별칭에 location 요청, 지시 /phpmyadminfile실제로 당신을 얻을 것이다 /home/phpmyadminfile. 질문의 구성이 작동하지 않는 이유는 나에게 맞는 것처럼 보이므로 location의도하지 않은 경우 일치하는 다른 지시문이 표시되지 않는 것 같습니다. 이 경우 접두어로 alias끝나는 것처럼 nginx 문서는 대신을 사용 하는 것이 좋습니다 . locationroot /home;
Scott Stevens

답변:


12

방법을 알아 냈습니다. 그것이 최선인지 확실하지 않지만 지금 당장 작동하고 있습니다.

내가 한 일은 다음과 같습니다.

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }

2

잘 모르겠지만 다음과 같이 작성해 보았습니다.

location /phpmyadmin/
        {
                alias /home/phpmyadmin/;
        }

또한 액세스하려는 URI는 무엇입니까?

내가 이해하는 한 URI를 사용해야합니다.

/home/phpmyadmin/

뿐만 아니라

/phpmyadmin/

자세한 내용은 여기 ( http://wiki.nginx.org/HttpCoreModule)를 참조 하십시오.


적어도 답변 감사합니다. 하지만 그래 나는 그것을 시도했다. 같은 것.
Rob

다른 위치에 별칭을 추가해야 할 수도 있습니다. serverfault.com/questions/223028/…
Black-Pixel

1

시험

location ^~ /phpMyAdmin/
{
    alias /home/phpmyadmin/;

    location ~ \.php$
    {
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
    }
}

1

이것이 작동하지 않는 이유는 서버가 별칭이있는 접두사 기반 위치가 아닌 정규식 기반 위치를 선택하기 때문입니다.

하나만 선택합니다. 접두사 기반 위치를 가져 와서 정규 표현식을 능가하는 데 사용할 수있는 연산자가 있지만 PHP가 작동하지 않습니다. 해결책은 kervin의 대답과 같으며 PHP 정규 표현식이 별칭 지시문으로 위치 안에 중첩됩니다.

그러나 URL과 별칭 디렉토리에 대문자가 다르기 때문에 그의 SCRIPT_FILENAME 설정이 작동하지 않을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.