Apache仮想ホストルート、www、およびhttpからhttpsを含むサブドメインのセットアップ
私はかなり立ち往生しています。助けていただければ幸いです。
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.com
website2-に解決されません-website1-に解決されます-アプリにリダイレクトされないことに注意してください。しかし、website1をに表示していhttps://example.com
ます。
各サイトに1つずつ、2つのvirtualhostconfファイルがあります。どちらにも各サイト80と443の構成が含まれており、以下にあります。
SSLの証明書は、example.comとのためのリストの代替名の一般的な名前を持っているapp.example.com
、www.example.com
とexample.com
。
DNSは、example.comを持つA
サーバーIPに、www.
とapp.
されているCNAME
にexample.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>
私は本当にどんな助け、提案や他のアイデアにも感謝します!
回答
https://example.com
website2-に解決されません-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
ディレクティブを使用する)ことは完全に可能ですが、ServerName
vHostごとに一意のディレクティブが必要であり、繰り返しを減らす必要があります。
あなたの観点からの最も簡単なアプローチは、おそらく2番目の(重複した)vhost:80およびvhost:443コンテナーを削除し、残っているvhost:80およびvhost:443コンテナーの両方に以下を設定することです。
ServerName example.com
ServerAlias www.example.com
次に、HTTPSからHTTPSへのリダイレクトを設定するletsencryptを使用してhttps証明書を作成しました
LetsEncryptを使用してSSL証明書を作成する場合、「HTTPからHTTPSへのリダイレクトを設定する」必要はありませんか?