/etc/apache2/sites-enabled/default-ssl.confから各VirtualHostを抽出して独自の設定ファイルに保存したいと思います。
1つのファイルに項目が多すぎるため、これを管理することがますます問題になっていますが、各仮想ホストごとに別々のファイルに移動すると、作業と管理が簡単になります。
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName www.customer1.com
ServerAlias customer1.com
DocumentRoot /var/www/customer1
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLStrictSNIVHostCheck on
SSLVerifyClient none
SSLProxyEngine off
SSLCertificateFile /etc/apache2/ssl_certs/customer1.cert
SSLCertificateKeyFile /etc/apache2/ssl_certs/customer1.key
SSLCertificateChainFile /etc/apache2/ssl_certs/customer1.inter.cert
<Directory /var/www/customer1>
Options -Indexes
AllowOverride All
</Directory>
同様のことを試していますが、ServerName値に基づいて分離することはできません。
awk '/^<VirtualHost/{flag=1}/^<\/VirtualHost/{print $2;flag=0}flag' /etc/apache2/sites-enabled/default-ssl.conf
ベストアンサー1
次の入力を含むfile.txtというファイルが提供されます。
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName name1
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName name2
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName name3
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName name4
</VirtualHost>
内容は次のようなget-virtual-host.shというスクリプトです。
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: get-virtual-host.sh <filename> <ServerName>"
exit 1
fi
sed -ne "/^<VirtualHost/{x;:cycle n; /ServerName/{/ServerName[[:space:]]\+$2/!{s/.*//; x; d}}; /<\/VirtualHost/{H;x;p;q}; H; bcycle}" $1
その後、次のパラメータを指定してVirtualHost部分を取得できます。
get-virtual-host.sh file.txt name2
どの出力
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName name2
</VirtualHost>
これはあなたに必要なものですか?
Sedスクリプトは、必要に応じて以下を説明します。
sed コマンドは次のように言います。
で始まる行がある場合<仮想ホスト、以下を行います。
- 交換モード空間とホールド空間
- 次の入力行を読む
- その単語が含まれている場合サーバー名、ServerNameの値が指定されたスクリプトのパラメーター2と同じであることを確認してください。
- 等しくない場合は、パターン空間内のすべての項目を削除し、パターンとホールド空間を交換してからパターン空間を削除し、次の入力ラインでsedコマンドを開始します。
- 同じ場合は、入力行に閉じるタグが含まれていることを確認してください。</仮想ホスト
- その場合は、予約済みスペースに改行文字を追加し、予約済みスペースにパターンスペースを追加し、パターンと予約済みスペースを置き換え、内容を印刷して終了します。
- それ以外の場合は、予約済みスペースに改行文字を追加し、予約済みスペースにパターンスペースの内容を追加してラベルループにジャンプします(上記のステップ2)。