複数の仮想ホストに要求を提供するために、CentOS 7システムにApache v2.4リバースプロキシを設定しました。その中にはAtlassianアプリケーションサーバーがあります。
プロキシのプライベートIPアドレスは10.0.0.77、パブリックIPアドレスは77.77.77.77、複数のDNS AレコードはパブリックIPをさまざまなFQDNなどにマッピングしますfoo.example.com
。bar.example.com
NATがあります。
77.77.77.77:10080 -> 10.0.0.77:80
77.77.77.77:10443 -> 10.0.0.77:443
これは、プロキシのパブリックIPアドレスが他のサービスにも使用されるために必要です。次に設定これは別の質問です。
以下は、仮想ホスト構成の簡略化された例です/etc/httpd/conf.d/foo.conf
。
<VirtualHost *:80>
ServerName foo.example.com
ProxyRequests Off
ProxyPreserveHost Off
SetEnv proxy-nokeepalive 1
Redirect "/" "https://foo.example.com:10443/"
</VirtualHost>
<VirtualHost *:443>
ServerName foo.example.com
ServerSignature On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine On
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# SSLCipherSuite shortened here for simplicity
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384"
SSLCertificateFile /etc/httpd/ssl/proxy.crt
SSLCertificateKeyFile /etc/httpd/ssl/proxy.key
SSLCACertificateFile /etc/httpd/ssl/proxy.ca.crt
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/" "http://foo.example.com:8080/"
ProxyPassReverse "/" "http://foo.example.com:8080/"
</VirtualHost>
この構成は、2 つの Jira サーバー、Stash サーバー、Confluence v6.10 サーバー、およびその他の複数のサーバーで機能します。ただし、WebブラウザはプロキシBamboo v6.4サーバー仮想ホストとQuestion2Answerプラットフォームをロードできません。
Firefoxで報告されたエラーはですNS_ERROR_NET_TIMEOUT
。 IEのエラーは次のとおりです。
一時的な DNS エラーが発生しました。ページを更新してみてください。
エラーコード:INET_E_RESOURCE_NOT_FOUND
失敗した各仮想ホストのhttpdアクセスログにも何もないため、LogLevel trace8
要求がプロキシに到達していないようです。
プロキシを使用してカールからBambooにアクセスできます(-L
Bambooが302を提供するため、フラグが必要です)。
[root@proxy]# curl -XGET http://bamboo.example.com:8085/
[root@proxy]# curl -v -XGET http://bamboo.example.com:8085/
* About to connect() to bamboo.example.com port 8085 (#0)
* Trying 10.0.0.11...
* Connected to bamboo.example.com (10.0.0.11) port 8085 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: bamboo.example.com:8085
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< X-ASEN: SEN-4619603
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Vary: Accept-Encoding
< Set-Cookie: JSESSIONID=E4D13B8AD7D4D172F4E5F834D1E89710; Path=/; Secure; HttpOnly
< Cache-Control: no-store
< Location: /userlogin!doDefault.action?os_destination=%2Fstart.action
< Content-Language: en-US
< Content-Length: 0
< Date: Mon, 01 Oct 2018 15:06:19 GMT
<
* Connection #0 to host bamboo.example.com left intact
[root@proxy]# curl -L -XGET http://bamboo.example.com:8085/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Log in as a Bamboo user</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta name="application-name" content="Bamboo" />
(...)
ターゲットサーバーのファイアウォールは、サーバーからエージェントとして開いています。 Atlassianアプリケーションは、TCP / 8080でコンテンツを提供するJiraなどの非標準ポートで実行されます。
他のほとんどすべてのWebホストが完全に動作するため、混乱しています。また、URLパスを再確認しましたが、正確でした。
この問題の原因は何ですか?
HTTPリクエストを追跡するより良い方法はありますか?私は現在FirefoxのアドオンであるHTTP Header Liveを使用しており、より洗練されたツールを探しています。
答え1
設定に問題がある場合は、Apacheエラーログに失敗した要求の内容を表示できます。通常、彼らは/var/log/apache2/error.log
同様の場所やどこかにあります。タイムアウトは、構成のバックエンドサーバーに接続できないことを示します。カールを使用してアクセスできるため、これは設定の問題かもしれません。
そのエントリに何もない場合、または要求へのアクセスログ(同じ場所)がない場合は、最初にプロキシに到達していない可能性があります。 Bamboo.example.com の DNS 設定が正しく、予想どおりにプロキシを指していることを確認します。
外部アクセスプロキシを使用して、curl
進行状況をより詳細に確認できます。名前が予想されるIPであることを確認してdig
ください。nslookup
私の考えでは、クライアント - >プロキシ間に問題があるようです。これは、プロキシ - >バックエンドがタイムアウトすると、ブラウザに504エラーコードが表示される可能性があるためです。
答え2
IEが報告したエラーからヒントを得ました。失敗した仮想ホストのDNS Aレコードは、プロキシサーバーを指すのではなく、サーバーのプライベートIPを指します。
Firefoxは一般的なタイムアウトのみを報告したため、問題をより早く把握できませんでした。