Apache에서 동일한 객체에 대해 위치와 디렉터리를 사용하는 이유

Apache에서 동일한 객체에 대해 위치와 디렉터리를 사용하는 이유

내가 이해한 Apache 지시문에 따르면 Directory 파일 시스템 개체를 참조하면 Location요청 URI의 요소를 참조합니다. 그렇다면 URI가 파일 시스템의 개체와 일치하는 경우 디렉터리와 위치가 같은 의미로 사용되는 이유는 무엇입니까?

ScriptAlias /otrs/ "/opt/otrs/bin/cgi-bin/"
Alias /otrs-web/ "/opt/otrs/var/httpd/htdocs/"

<IfModule mod_perl.c>

    # Setup environment and preload modules
    Perlrequire /opt/otrs/scripts/apache2-perl-startup.pl

    # Reload Perl modules when changed on disk
    PerlModule Apache2::Reload
    PerlInitHandler Apache2::Reload

    # general mod_perl2 options
    <Location /otrs>
#        ErrorDocument 403 /otrs/customer.pl
        ErrorDocument 403 /otrs/index.pl
        SetHandler  perl-script
        PerlResponseHandler ModPerl::Registry
        Options +ExecCGI
        PerlOptions +ParseHeaders
        PerlOptions +SetupEnv

        <IfModule mod_version.c>
            <IfVersion < 2.4>
                Order allow,deny
                Allow from all
            </IfVersion>
            <IfVersion >= 2.4>
                Require all granted
            </IfVersion>
        </IfModule>
        <IfModule !mod_version.c>
            Order allow,deny
            Allow from all
        </IfModule>
    </Location>

    # mod_perl2 options for GenericInterface
    <Location /otrs/nph-genericinterface.pl>
        PerlOptions -ParseHeaders
    </Location>

</IfModule>

<Directory "/opt/otrs/bin/cgi-bin/">
<Directory "/opt/otrs/bin/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -Includes

    <IfModule mod_version.c>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </IfModule>
    <IfModule !mod_version.c>
        Order allow,deny
        Allow from all
    </IfModule>

    <IfModule mod_filter.c>
        <IfModule mod_deflate.c>
            AddOutputFilterByType DEFLATE text/html text/javascript application/javascript text/css text/xml application/json text/json
         </IfModule>
    </IfModule>

</Directory>

편집하다:

감사해요. 이것은 제가 이해한 내용입니다만, 자유롭게 정정해 주시기 바랍니다. 나는 내 실수로부터 배우기 위해 왔습니다.  ScriptAlias ​​​​/otrs/ "/opt/otrs/bin/cgi-bin/" CGI 프로그램의 대상 디렉터리를 지정합니다.

/opt/otrs/bin/cgi-bin/에는 다음이 있습니다.

drwxrwsr-x 4 otrs apache  205 Nov 13 16:39 ..
drwxrwsr-x 2 otrs apache  139 Oct 22 09:27 .
-rwxrwx--- 1 otrs apache 3.4K Sep 28 01:40 app.psgi
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 customer.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 index.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 installer.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 nph-genericinterface.pl
-rwxrwx--- 1 otrs apache 1.2K Sep 28 01:40 public.pl
-rwxrwx--- 1 otrs apache 7.2K Sep 28 01:40 rpc.pl

그러니까 내가 전화하면 이해해줘https://ipv4/otrs/index.pl/opt/otrs/bin/cgi-bin/ 아래에 있는 특정 스크립트를 트리거합니다.

따라서 해당 섹션에서는 "/opt/otrs/bin/cgi-bin/" 아래의 모든 스크립트에 옵션이 적용됩니다 <Location /otrs> </Location>. 내가 방문한다면https://ipv4/otrs/nph-genericinterface.pl 이 섹션의 옵션은 <Location /otrs> </Location>다음에 설정된 옵션과 병합됩니다. <Location /otrs/nph-genericinterface.pl> </Location>

하지만 아래에서도 똑같이 정의했습니다.<Directory "/opt/otrs/bin/cgi-bin/">

그 이유는 무엇입니까? 이 두 지침이 정확히 같은 것을 참조하지 않습니까?

답변1

Directory사양은 파일 Files시스템에만 적용됩니다. 일반적으로 몇 개의 디렉터리 트리에만 액세스가 허용됩니다. 특정 파일에 대한 액세스는 .htaccess일반적으로 금지되어 있으며 일부 사이트의 경우 Directory사양 File이 충분하고 Location사양이 필요하지 않습니다. 이러한 사양은 일반적으로 액세스할 수 있는 디렉터리를 제어하는 ​​데 사용됩니다.

Location사양은 네트워크 공간(파일 시스템에 존재하지 않는 콘텐츠가 포함될 수 있음)에 적용됩니다. 이는 웹 사이트 디자인과 더욱 일치하며 디렉터리 경로를 고려할 필요가 없습니다. 이러한 옵션은 일반적으로 특정 경로에서 콘텐츠를 처리하는 방법을 지정합니다.

적용할 사양을 제어하는 ​​우선 순위 및 순서 규칙이 있습니다. 두 Location블록의 순서가 중요합니다.

핸들러와 같은 설정은 perl-script여러 곳에서 수행할 수 있습니다. 이를 설정할 위치를 선택하려면 부분적으로 Perl CGI 콘텐츠로 전달하려는 사이트의 양을 이해해야 합니다. 일반적으로 액세스를 제한하는 것이 더 안전합니다. Location지시문은 (허용되는 경우) 지시문을 재정의 하므로 Directory최소한의 액세스를 제공합니다. 다른 URL 경로를 통해 디렉토리에 액세스할 수 있는 경우 이러한 Location지시문은 적용되지 않습니다.

원래 응답: 위치와 디렉터리가 동일한 위치를 가리키는 것은 일반적이지 않습니다. 일반적으로 사이트 루트는 /var/www또는 유사한 디렉터리입니다. 귀하의 경우에는 /opt.

의 경우 otrs디렉터리 지정은 이고 /opt/otrs/bin/cgi-bin위치 지정은 입니다 /otrs. "ortr-web"의 경우 디렉터리 사양은 /opt/otrs/var/httpd/htdocs이고 위치는 입니다 /otrs-web.

Apache 구성을 검색하면 "/" 디렉터리에 대한 액세스가 거부되고 사이트 루트에 대한 액세스가 허용된다는 것을 알 수 있습니다. 일반적으로 파일 시스템에 대한 액세스는 Directory사양을 통해 제어되고, URL 경로에 대한 액세스는 Location사양을 통해 제어됩니다. 별칭 지정은 금지됩니다 . Location지정은 와 같이 디스크에 존재하지 않는 가상 위치를 지정할 수 있습니다 .DocrootLocation/server-status/server-info

관련 정보