私は初心者です。次のApachehttpd.conf
構成で3つのWebサイトをホストする1つのLAMPCentOSサーバーがあります。
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /home/www/html/domaina.com
ServerName www.domaina.com
ServerAlias *.domaina.com
ScriptAlias /cgi-bin/ "/home/www/html/domaina.com/cgi-bin/"
RewriteEngine On
RewriteOptions Inherit
ErrorLog /home/log/domaina.com-error_log
CustomLog /home/log/domaina.com-access_log common
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
ServerAdmin [email protected]
DocumentRoot /home/www/html/domaina.com
ServerName www.domaina.com
ServerAlias *.domaina.com
ScriptAlias /cgi-bin/ "/home/www/html/domaina.com/cgi-bin/"
RewriteEngine On
RewriteOptions Inherit
ErrorLog /home/log/domaina.com-error_log
CustomLog /home/log/domaina.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /home/www/html/domainb.com
ServerName www.domainb.com
ServerAlias *.domainb.com
ScriptAlias /cgi-bin/ "/home/www/html/domainb.com/cgi-bin/"
RewriteEngine On
RewriteOptions Inherit
ErrorLog /home/log/domainb.com-error_log
CustomLog /home/log/domainb.com-access_log common
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
ServerAdmin [email protected]
DocumentRoot /home/www/html/domainb.com
ServerName www.domainb.com
ServerAlias *.domainb.com
ScriptAlias /cgi-bin/ "/home/www/html/domainb.com/cgi-bin/"
RewriteEngine On
RewriteOptions Inherit
ErrorLog /home/log/domainb.com-error_log
CustomLog /home/log/domainb.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /home/www/html/domainc.com
ServerName www.domainc.com
ServerAlias *.domainc.com
ScriptAlias /cgi-bin/ "/home/www/html/domainc.com/cgi-bin/"
RewriteEngine On
RewriteOptions Inherit
ErrorLog /home/log/domainc.com-error_log
CustomLog /home/log/domainc.com-access_log common
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
ServerAdmin [email protected]
DocumentRoot /home/www/html/domainc.com
ServerName www.domainc.com
ServerAlias *.domainc.com
ScriptAlias /cgi-bin/ "/home/www/html/domainc.com/cgi-bin/"
RewriteEngine On
RewriteOptions Inherit
ErrorLog /home/log/domainc.com-error_log
CustomLog /home/log/domainc.com-access_log common
</VirtualHost>
ドメインがこのサーバーを直接指している場合、すべてがこのサーバー上で機能します。しかし、domainc.comのリバースプロキシとして別のサーバーを使用したいと思います。そこで、Apacheを別のCentOSサーバーにインストールし、domainc.comにそのサーバーを指定しました。次の設定を/etc/httpd/conf.d/proxy.conf
に追加しました。
<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
ProxyVia On
</IfModule>
そして、この設定をhttpd.confに追加します。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.domainc.com
ErrorLog logs/domainc.com-error_log
CustomLog logs/domainc.com-access_log common
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://[IP of server 1]:80/
ProxyPassReverse / http://[IP of server 1]:80/
</VirtualHost>
しかし、domainc.comを閲覧しようとすると、domaina.comのコンテンツが表示されます。オンラインで見つけたさまざまな構成を試して、数時間それを理解しようとしていますが、それでも同じ結果が得られています。誰か助けてもらえますか?これを行うことは可能ですか?
この構成でmod_proxyを使用している場合、元のHost:
ヘッダーはProxyPass
に書き込んだものに置き換えられます。したがって、クライアントがdomainc
サーバーに接続すると、クライアントはヘッダーHost: www.domainc.com
を送信します。リバースプロキシはこのヘッダーを取り除き、代わりにHost: [IP of server]
を送信します。また、VirtualHostにIPがリストされていないため、Apacheは仮想ホストのリストの最初のIP、つまりdomaina.com
を選択するだけです。
これを修正する最善の方法は、プロキシ構成を変更して、行を追加することです。
ProxyPreserveHost On
これにより、Apacheはバックエンドサーバーに接続するときに元のHost:-headerを再利用します。
(domainc.comの仮想ホスト構成にIPアドレスを追加することもできますが、サーバー上の他のドメインをプロキシする場合はまったく同じ問題が発生するため、これはお勧めしません。)