Apache가 symlink를 따르도록하려면 어떻게합니까?


98

내 아파치 www 폴더 ( /var/wwwubuntu 10.10)에 다음이 있습니다.

mydir -> /home/user/mydir

(로 만든 것 ln -s)

이제 mydir웹에서 파일 목록을 보려면 아파치에 지시문을 주어야합니다 FollowSymLinks.

그러나 나는 그것을 어디에 두어야합니까? A의 .htaccess파일? 어디? 여러 가지 방법을 시도했지만 이해하지 못합니다 ...

이것은 내 /etc/apache2/sites-enabled/000-default파일입니다.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks Indexes
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

또한 설정 파일에서 Alias를 사용해 보았습니다. 여전히 작동하지 않습니다.
luca

답변:


65

여기에는 두 가지가 있습니다.

  1. 심볼릭 링크
  2. 디렉토리 목록

심볼릭 링크

/var/www기본 가상 호스트의 DocumentRoot 라고 가정하면 기본 가상 호스트 구성 파일 (아마도 /etc/apache2/sites-enabled/000-default)을 찾아 해당 가상 호스트 블록에 배치해야 합니다 ( 예 :

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

아무것도 변경하지 않은 경우 해당 옵션이 이미 있어야합니다.

디렉토리 목록

Apache가 디렉토리에 파일을 나열하게하려면 Indexes옵션도 활성화해야합니다 . 예 : change

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

/etc/apache2/sites-enabled/000-default:

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

또는 더 안전한 방법은 다음과 같이 변경하는 것입니다.

    <Directory />
        Options FollowSymLinks
        AllowOverride Indexes
    </Directory>

에 넣습니다 /home/user/mydir/.htaccess.

    Option Indexes

.htaccess가 작동하지 않는 이유

기본적으로 퍼팅 Options <something>에서 .htaccess파일 이유로 인해 설정 파일의 다른 항목의 작동하지 않습니다 AllowOverride None.

그래서 우리는 AllowOverride Indexes거기 에 두어야 합니다.

( AllowOverride 문서 )


위의 구성 파일을보십시오 ... 아직 작동하지 않습니다 ...
luca

권한 문제 일 수 있습니까? 저는 루트 사용자입니다. 어쨌든 시스템을 루트로 사용하는 것이 좋지 않다는 것을 알고 있습니다. 루트이고 루트 링크 인 디렉토리는 루트 홈 / root / mydir에 있습니다.
luca

1
예. 어떤 오류 메시지가 표시됩니까? 당신은 sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydir그것이 작동하게해야 할 것입니다, 그것은 아마 좋은 생각이 아닙니다. 가능하면 파일을 다른 곳으로 옮기는 것이 /var/www좋습니다.
Mikel

오류가 발생하여 도움을 요청할 때마다 정확한 오류 메시지를 알려주십시오. 에 실마리가있을 것입니다 /var/log/apache2/error.log.
Mikel

7
암호화되어있을 때 홈 디렉토리를 가리 키지 않도록하십시오 (예 : /var/www→ 의 기호 링크) /home/user/directory. 그것은 큰 두통을 일으킬 것입니다.

11

옵션은 다음과 같이 사용해야합니다.

Options +FollowSymLinks

일반적으로 a 안에 Apache 구성 ( httpd.conf또는 conf.d/or sites-enabled/)이 있습니다 <Directory>.

참조 Options, AllowOverride그리고 <Directory>아파치 문서입니다.


1
FollowSymLinks의 경우 특히 .conf 파일 내에있을 때 반드시 디렉토리 구조 안에 있어야합니다. Apache의 현재 매뉴얼에서 "FollowSymLinks 및 SymLinksIfOwnerMatch 옵션은 <Directory> 섹션 또는 .htaccess 파일에서만 작동합니다."
ClearCrescendo

1
경고 : + 또는-옵션과 혼합 옵션은 구문이 유효하지 않으며 예기치 않은 결과가 발생할 수 있습니다.
kurdtpage

10

Apache 2.4.7을 사용하는 Ubuntu 14.04의 원래 (신규) 구성에서는 / var / www / html에 생성 된 심볼릭 링크를 따르기 위해 * .conf의 내용을 변경할 필요가 없습니다.

그러나 www-data 사용자 는 symlink 대상의 모든 경로에 액세스 할 수 있어야 합니다 (가상 호스트뿐만 아니라 가상 호스트의 경우에도). 예를 들어

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

이 예에서 사용자 www-data (또는 원하는 경우 위험하지만 위험 할 수있는 모든 사용자) 는 디렉토리에 대한 모든 권한을 실행 해야합니다 . / path, / path / to 및 / path / to / mirror 각각에 x 권한이 필요합니다. 또한 대상 디렉토리에 대한 읽기 권한이 필요 하며 디렉토리의 목표에 따라 www-data 사용자도 쓰기 권한이 필요할 수 있습니다.

단서는 https://stackoverflow.com/a/14623574 에서 얻었습니다.


1

자동 색인 아파치 모듈을 설치하기 전까지는 작동하지 못했습니다. 수많은 블로그 게시물 및 포럼 게시물 중에서 아무도 필요하다고 언급하지 않았습니다. 이것이 누군가를 돕기를 바랍니다.

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