ローカルホストで ProxyPass を使用してサブドメインとして異なるサービスを公開しようとすると、Apache がクラッシュします。

ローカルホストで ProxyPass を使用してサブドメインとして異なるサービスを公開しようとすると、Apache がクラッシュします。

複数のウェブサイトとサービスに次のようなディレクトリ構造があります

/var/www/html/site1
/var/www/html/site2
/var/www/html/site3
/var/www/html/serv1
/var/www/html/serv2

site1フォルダはウェブサイトをホストしており、site1domain.comホストされているウェブアプリケーションサービスserv1serv2フォルダを公開して、

service1.site1domain.com
service2.site1domain.com

site1domain.confそこで私はこのようにファイル内の仮想ホストを設定しようとしました

<VirtualHost *:80>
    ServerName site1domain.com
    ServerAlias www.site1domain.com
    DocumentRoot /var/www/html/site1
    <Directory /var/www/html/site1>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName service1.site1domain.com
    ProxyPreserveHost On
    ProxyRequest Off
    ProxyPass        "/" "localhost/serv1"
    ProxyPassReverse "/" "localhost/serv1"
</VirtualHost>

<VirtualHost *:80>
     ServerName service2.site1domain.com
     ProxyPreserveHost On
     ProxyRequest Off
     ProxyPass        "/" "localhost/serv2"
     ProxyPassReverse "/" "localhost/serv2"
</VirtualHost>

しかし、サービスに関連する仮想ホスト コード ブロックによりサーバーがクラッシュし、エラー コード 1 で終了します。

これらを適切に設定する方法を教えていただけませんか?

答え1

次のようにしたらどうでしょうか:

<VirtualHost *:80>
    ServerName service1.site1domain.com
    DocumentRoot /var/www/html/serv1
</VirtualHost>

<VirtualHost *:80>
    ServerName service2.site1domain.com
    DocumentRoot /var/www/html/serv2
</VirtualHost>

mod_proxyは必要ありません。

答え2

エラーの原因はProxyPassそしてProxyPassReverse指令がないスキームURLの一部です。正しい構文は次のようになります。

ProxyPass "/" "http://localhost/serv1" 
ProxyPassReverse "/" "http://localhost/serv1"

しかし、アンドリューは正しいリバースプロキシこのユースケースでは必須ではなく、最適なテクノロジーでもありません。

関連情報