Ubuntu, 하위 도메인에 대한 apache2 와일드카드 DNS

Ubuntu, 하위 도메인에 대한 apache2 와일드카드 DNS

현재 저는 삼바, FTP 및 웹 서버와 같은 서비스를 사용하여 자체 (우분투) 서버를 호스팅하고 있습니다. 도메인을 구입하고 DNS A 레코드를 ISP의 IP에 연결했습니다. 이것은 올바르게 작동합니다. 이제 DNS 와일드카드 레코드를 사용하여 하위 도메인을 만들고 싶습니다. DNS 변경이 완료되기까지 24시간을 기다리지 않고 싶습니다.

지금까지는 리디렉션만 가능합니다.모두동일한 디렉터리에 들어오는 와일드카드:

test1.domain.com은 /var/www로 리디렉션됩니다.

test2.domain.com은 /var/www로 리디렉션됩니다.

내가 얻고 싶은 것은 다음과 같습니다.

test1.domain.com은 /var/www/test1로 리디렉션됩니다.

test2.domain.com은 /var/www/test2로 리디렉션됩니다.

내 생각에는 /etc/apache2/sites-available/domain.conf 파일을 변경하는 것 같습니다.

어떤 도움이나 조언이라도 환영합니다!

감사해요,

표시

편집하다:

내 /etc/apache2/sites-available/domain 파일은 다음과 같습니다.

<VirtualHost *:80>
        ServerAdmin webmaster@domain

        DocumentRoot /var/www/webroot
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/webroot>
                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>

</VirtualHost>

답변1

를 사용하여 원하는 동작을 얻을 수 있어야 합니다 VirtualDocumentRoot.

<VirtualHost>을 추가하여 ServerAlias관심 있는 모든 도메인을 찾아보세요.

    ServerAlias *.example.com

...그런 다음 원하는 디렉터리에 매핑합니다. 을 제거 DocumentRoot하고 그 자리에 다음을 추가합니다.

    VirtualDocumentRoot /var/www/%1

당신은 접근을 허용하는 블록을 원할 것이고 <Directory /var/www/>, 이 가상 호스트는 동적으로 구성된 가상 호스트에 대해서만 서비스를 처리해야 한다는 것을 명심하십시오. 만약 당신이 원 example.com하고 www.example.com별도로 처리되기를 원한다면, 그들 자신의 가상 호스트가 있기를 원할 것입니다 <VirtualHost>.

편집하다:

"기본" 도메인을 처리하기 위해 다른 가상 호스트를 사용하고 싶을 것입니다. 주석의 현재 구성을 기반으로 구축:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName catchall.example.com
    ServerAlias *.example.com
    # NOTE: this config will map test1.example.com to /var/www/test1
    VirtualDocumentRoot /var/www/%1
    # If you want that to map instead to /var/www/test1.example.com, then use %0:
    # VirtualDocumentRoot /var/www/%0
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Order Allow,Deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# This next vhost should be in a different file in sites-available to
# fit with debian-style vhosts - but make sure it's alphabetically
# after the file that contains the first vhost - we want it to load first
# so that it's default.  It can also just go in the same file.
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/www.example.com
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Order Allow,Deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

답변2

답변을 찾는 데 도움을 주셔서 감사합니다. 여기서 내 문제에 대한 해결책을 얻었습니다. 이것이 나와 같은 다른 초보자가 위에서 언급한 문제에 대한 해결책을 찾는 데 도움이 될 것이라고 생각합니다.

1단계: 아래와 같이 웹사이트를 구성하세요.

vi /etc/apache2/sites-available/yoursite

<VirtualHost *:80> ServerAlias localhost *.yoursite #wildcard catch all VirtualDocumentRoot /path/to/your/workspace/%1/public UseCanonicalName Off <Directory "path/to/your/workspace"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>

2) sudo a2ensite /etc/apache2/sites-available/yoursite

3) sudo 서비스 apache2 다시 로드

4) Dnsmasq 설치: sudo apt-get install dnsmasq

5) /etc/NetworkManager/NetworkManager.conf를 열고 dns=dnsmasq라는 줄을 주석 처리합니다. 나중에 NetworkManager를 다시 시작하십시오. sudo restart network-manager.

6)vi /etc/dnsmasq.conf 및 listening-address=127.0.0.1 줄.

7) /etc/dnsmasq.d에 새 파일을 생성하고 파일을 열고 다음과 같이 편집합니다.

address=/yourdomain/127.0.0.1

8) Dnsmasq를 다시 시작합니다: sudo /etc/init.d/dnsmasq restart.

이것은 nginx에서도 가능합니다. 이 솔루션이 저에게 효과적이었습니다. 나는 이것이 다른 모든 사람들에게도 효과가 있을 것이라고 생각합니다.

관련 정보