Apache仮想ホストルート、www、およびhttpからhttpsを含むサブドメインのセットアップ

Jan 21 2020

私はかなり立ち往生しています。助けていただければ幸いです。

LAMPスタックを実行しているAWSEC2 Ubuntu 18.04インスタンス上の2つのウェブサイト(wordpressと別のphpツール)。

私の意図は以下を達成することです:

  • http://www.example.com
  • http://example.com
  • https://www.example.com

に:https://example.com

そして

  • http://app.example.com

に:https://app.example.com

仮想ホストを構成して意図したとおりに機能させた後、letsencryptを介してhttps証明書を作成し、HTTPからHTTPSへのリダイレクトを設定しました...しかし...問題が発生しました:

HTTPはすべてHTTPSにリダイレクトします。

https://app.example.com 目的のWebサイト(website1)に解決されます。

https://example.comwebsite2-に解決されません-website1-に解決されます-アプリにリダイレクトされないことに注意してください。しかし、website1をに表示していhttps://example.comます。

各サイトに1つずつ、2つのvirtualhostconfファイルがあります。どちらにも各サイト80と443の構成が含まれており、以下にあります。

SSLの証明書は、example.comとのためのリストの代替名の一般的な名前を持っているapp.example.comwww.example.comexample.com

DNSは、example.comを持つAサーバーIPに、www.app.されているCNAMEexample.com

app.example.com.conf-ウェブサイト1

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/website1/
ServerName example.com
ServerAlias app.example.com
<Directory /var/www/website1/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =app.example.com [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/website1
ServerName example.com
ServerAlias app.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website1/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

example.com.conf-ウェブサイト2

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

私は本当にどんな助け、提案や他のアイデアにも感謝します!

回答

1 MrWhite Jan 22 2020 at 02:01

https://example.comwebsite2-に解決されません-website1-に解決されます-アプリにリダイレクトされないことに注意してください。しかし、website1を表示していますhttps://example.com

はい、すべてのvHostがexample.comとして定義されてServerNameおり、website1が構成の最初に表示されると思います。

以下のためのapp.example.com.conf(サイト1)あなたが設定する必要がありますServerName app.example.comし、削除ServerAliasのバーチャルホストの両方に完全にディレクティブを:80とのバーチャルホスト:443個のコンテナを。

vhost:80コンテナでのHTTPからHTTPSへのリダイレクト:

RewriteEngine on
RewriteCond %{SERVER_NAME} =app.example.com [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

単一のmod_aliasRedirectディレクティブに簡略化できます。

Redirect 301 / https://app.example.com/

たとえば、example.com.conf(Webサイト2)では、vhost:80コンテナーとvhost:443コンテナーを複製し、ServerName example.comそれぞれで同じように定義しています。これはエラーです。このような4つのコンテナーを持つ(そしてmod_aliasRedirectディレクティブを使用する)ことは完全に可能ですが、ServerNamevHostごとに一意のディレクティブが必要であり、繰り返しを減らす必要があります。

あなたの観点からの最も簡単なアプローチは、おそらく2番目の(重複した)vhost:80およびvhost:443コンテナーを削除し、残っているvhost:80およびvhost:443コンテナーの両方に以下を設定することです。

ServerName example.com
ServerAlias www.example.com

次に、HTTPSからHTTPSへのリダイレクトを設定するletsencryptを使用してhttps証明書を作成しました

LetsEncryptを使用してSSL証明書を作成する場合、「HTTPからHTTPSへのリダイレクトを設定する」必要はありませんか?