razão de usar Localização e Diretório para os mesmos objetos no Apache

1

de acordo com o meu entendimento no Apache Directory directives referem-se a objetos do sistema de arquivos, Location referem-se ao elemento no URI da solicitação. Portanto, se o URI corresponder aos objetos no sistema de arquivos, por que usar o Diretório e o Local alternadamente?

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>

EDITAR:

Obrigado. Veja como eu entendo, mas sinta-se à vontade para me corrigir. Estou aqui para aprender com meus erros  ScriptAlias / otrs / "/ opt / otrs / bin / cgi-bin /" designa o diretório de destino para programas CGI.

Em / opt / otrs / bin / cgi-bin / tenho o seguinte conteúdo:

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

Assim, segundo meu entendimento, se eu chamar o link , ele acionará esse script específico, localizado em / opt / otrs / bin / cgi -bin /

Portanto, com a seção, todos os scripts em "/ opt / otrs / bin / cgi-bin /" terão as opções entre <Location /otrs> </Location> applied. Se eu acessar o link , as opções da seção <Location /otrs> </Location> serão mescladas junto com as opções definidas em <Location /otrs/nph-genericinterface.pl> </Location>

Mas eu tenho o mesmo conteúdo definido em <Directory "/opt/otrs/bin/cgi-bin/">

Qual é o motivo disso? As duas diretivas não estão se referindo exatamente à mesma coisa?

    
por blablatrace 14.11.2018 / 11:54

1 resposta

2

As especificações Directory e Files aplicam-se especificamente ao sistema de arquivos. Normalmente, o acesso a apenas algumas árvores de diretórios é permitido. O acesso a determinados arquivos como .htaccess é geralmente proibido. Para alguns sites, as especificações Directory e File são suficientes e não são necessárias especificações Location . Essas especificações são geralmente usadas para controlar quais diretórios podem ser acessados.

Location especificações se aplicam ao espaço da Web (que pode conter conteúdo que não existe no sistema de arquivos). Isso está mais de acordo com o design de um site e não exige a consideração do caminho do diretório. Essas opções normalmente especificam como o conteúdo em caminhos específicos é tratado.

Existem regras de precedência e regras de ordenação que controlam as especificações. O pedido dos dois blocos Location é importante.

Configurar itens como o manipulador perl-script pode ser feito em vários locais. Até certo ponto, escolher onde configurá-lo requer a compreensão de quanto do site você deseja entregar como conteúdo CGI perl. Acesso restrito é geralmente mais seguro. Como as diretivas Location diretivas sobrescrevem (quando permitido) Directory , elas fornecem o menor acesso. Se o diretório fosse acessível por um caminho de URL diferente, as diretivas Location não se aplicariam.

Resposta original: É incomum que o local e o diretório apontem para o mesmo local. Normalmente, a raiz do site é /var/www ou algum diretório semelhante. No seu caso, parece que você está usando vários diretórios em /opt .

Para otrs , a especificação do diretório é /opt/otrs/bin/cgi-bin e o local seria /otrs . Para 'ortr-web', a especificação do diretório é /opt/otrs/var/httpd/htdocs e o local seria /otrs-web .

Se você verificar a configuração do Apache, deverá notar que o acesso ao diretório '/' é negado e o acesso à raiz do site é permitido. Normalmente, o acesso ao sistema de arquivos é controlado com Directory especificações e o acesso a caminhos de URL é controlado com Location especificações. Baring o uso de especificações de alias Location especificações são relativas ao diretório especificado no Docroot . Location pode especificar locais virtuais que não existem no disco, como /server-status e /server-info .

    
por 14.11.2018 / 14:33