동일한 VirtualHost에서 http (포트 80) 및 https (포트 443) 제공


29

http 및 https 모두에서 표준 포트를 사용하도록 Apache에서 VirtualHost를 설정해야합니다.

SSL 엔진을 활성화하면 (아래와 같이)-포트 80에서 오류가 발생합니다.

그 이유는 사이트의 일부가 SSL이어야하지만 다른 부분은 그렇지 않기 때문입니다. 사이트에서 http + https를 모두 제공하려면 어떻게해야합니까?

여기 내 가상 호스트 파일이 있습니다 ....

NameVirtualHost *

<VirtualHost *>
        ServerAdmin webmaster@localhost
        ServerName mysite.co.uk
        DocumentRoot /var/www/mysite/public
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/mysite/public>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                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 /var/log/apache2/error.log

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

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    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>

     #SSL STUFF...
      SSLEngine on
      SSLCertificateFile /etc/apache2/crts/mysite.crt
      SSLCertificateKeyFile /etc/apache2/crts/mysite.key
      SSLCertificateChainFile /etc/apache2/crts/DigiCertCA.crt


</VirtualHost>

답변:


44

아파치가 SSL에 대해 이야기하고 어떤 것이 아닌지 알아야하기 때문에 하나의 가상 호스트 에서이 작업을 수행 할 수 없습니다 (참고 : nginx에는이 문제가 없으므로 SSL과 관련된 청취 지시문을 말할 수 있습니다). 내가 좋아하는 많은 이유 중 하나).

Apache에서이를 관리하는 방법은 SSL과 관련이없는 모든 구성을 별도의 파일에 넣은 다음 두 개의 호스트를 서로 옆에 구성하는 것입니다. 각각의 호스트는 사이트 별 구성 파일을 포함하여 vhost 스탠자 안에 있습니다. :

<VirtualHost 192.0.2.12:80>
    Include /etc/apache2/sites/example.com
</VirtualHost>

<VirtualHost 192.0.2.12:443>
    SSLEngine On
    # etc
    Include /etc/apache2/sites/example.com
</VirtualHost>

7

Apache vHost의 문제처럼 보이지만 구성을 반복하지 않고도 작업을 수행합니다.

SSLCertificateFile /srv/.ssl/self/server.crt
SSLCertificateKeyFile /srv/.ssl/self/server.pem

# REQUIRED
<VirtualHost *:80>
    DocumentRoot /srv/www/badhost
</VirtualHost>

<VirtualHost *:80 *:443>
    SSLEngine On
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/www/example.www
</VirtualHost>

정말 이상하지만 존재합니다!
user77376

1
이것은 당신이 그런 멍청이로부터 기대할 수있는 것처럼 효과가있었습니다. Apache 2.4.10은 요청이 발생한 포트를 사용하는 대신 SERVER_PORT 환경 변수를 443으로 설정한다는 것을 알았습니다 (80 또는 443에 따라 다름). <IMAGINARY_PARAGRAPH_BREAK> 가상 호스트 당 하나의 파일을 유지하려고했기 때문에이 기능을 사용할 수 있기를 바랐습니다. <IMAGINARY_PARAGRAPH_BREAK> 또한 상단 <VirtualHost> 내에 ServerName 지시문이 필요합니다. 그렇지 않으면 실수로 요청이 복잡해집니다. ServerName badhost.bad 또는 다른 것으로 설정하십시오.
Daniel Beardsmore

1
@DanielBeardsmore : RH Software 컬렉션에서 2.4.18로 이것을 테스트했으며 기본값은 인 것으로 보입니다 UseCanonicalPhysicalPort Off. 이것을 켜면 실제 포트가 사용되는 것 같습니다. (아마도 충분히, 나는 SSLEngine On이중으로 사용되는 호스트에 접속을 끊고 포트 80을 기본값으로
Ulrich Schwarz

1
@DanielBeardsmore : FWIW %{HTTPS}도 올바르게 설정되지만 %{REQUEST_SCHEME}(항상 http) 은 아닙니다 . UseCanonicalRequestScheme그래도 지시어 에 대한 기능 요청을 어리석게 느끼고 있습니다.
Ulrich Schwarz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.