http에서 https로 Apache 리디렉션이 작동하지 않습니다.

http에서 https로 Apache 리디렉션이 작동하지 않습니다.

다음 conf 파일이 있습니다.

파일1:

NameVirtualHost  123.45.67.890:80

<VirtualHost 123.45.67.890:80>
    ServerName example.com

    RedirectPermanent / https://example.com/

#   RewriteEngine On
#   RewriteCond %{SERVER_PORT} !^443$
#   RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

#   SSLRequireSSL
#   Redirect permanent /secure https://example.com/

#   Redirect / https://example.com/
</VirtualHost>

주석 처리된 행에서 볼 수 있듯이 저는 여러 가지 접근 방식을 시도했습니다.

파일2:

NameVirtualHost 123.45.67.890:443

<VirtualHost 123.45.67.890:443>
    DocumentRoot "/opt/www/example-docroot"
    ServerName example.com
    DirectoryIndex index.html
    SSLEngine on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/httpd/conf.d/ssl/example.com/csr.example.2011.pem.blade
    SSLCertificateKeyFile /etc/httpd/conf.d/ssl/example.com/nokey.example.2011.pem
    SSLCACertificateFile /etc/httpd/conf.d/ssl/example.com/CA.blade.2011.csr

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/etc/httpd/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>

단순함을 위해 어떤 것들은 제거되었고, 무고한 사람들을 보호하기 위해 이름이 바뀌었습니다.

/etc/httpd/vhosts 서버에서 이 파일을 업데이트합니다.

그런 다음 실행

apachectl restart

나에게 다음과 같은 경고가 표시됩니다.

[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts

이 서버에는 수많은 가상 호스트가 실행되고 있습니다. 위의 구성은 정렬된 것으로 보이므로 이러한 경고가 여기에 적용되지 않는 것 같습니다. 어쩌면 틀렸을 수도 있습니다.

내 브라우저에서 기본 80(http) 페이지를 업데이트하면 항상 기본 http 페이지가 표시됩니다.

리디렉션을 작동시키는 방법에 대한 제안이 있으십니까?

답변1

많은 예가 특정 구성에서 작동합니다. 이는 Apache 서버가 사용하는 구성에 관계없이 항상 작동합니다.

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]

답변2

나는 며칠 전에 똑같은 문제에 직면했습니다. 작동하는 Apache httpd.conf 파일의 VirtualHost 구성(http 포트 80에 적용 가능)에서 다음을 시도했습니다.

<Virtualhost *:80>
ServerAdmin [email protected]
ServerName site.com
ServerAlias site.com www.site.com

RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>

이것은 매력처럼 작동하며 다른 곳에서는 구성이나 추가 모듈이 필요하지 않습니다.

답변3

(가능한 경우) 이를 더 잘 사용하면 .htaccess아파치 구성 파일을 망칠 필요가 없습니다. 의 시작 부분에 다음 줄을 추가하세요 .htaccess.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

답변4

우리의 문제는 구성 파일 우선 순위였습니다. 간단히 말해서, HTTP VirtualHost는 000-default.conf우리가 자체 구성 파일에서 만든 설정을 재정의했습니다.

이는 다른 곳에 정의되지 않은 경우에만 사용되는 것을 의미하는 "기본값"이라는 단어의 의미를 아는 사람에게는 혼란스럽습니다. 우리는 000-default.conf다른 구성 파일에 정의되지 않은 경우에만 구성을 제공할 것이라고 어리석게도 가정했습니다.

우리는 틀렸다. Apache는 파일 이름을 기준으로 영숫자 순서로 처음 만나는 파일의 구성을 사용합니다. 해당 파일에서 일치하는 VirtualHost를 찾을 수 없으면 다음 파일로 이동합니다. 이는 작동 방식을 모르면 재미있는 혼란을 야기하지만 일단 알고 나면 깔끔합니다.

관련 정보