Apache httpdプロキシで接続エラーが発生しましたが、特定の仮想ホストでのみ発生しました。

Apache httpdプロキシで接続エラーが発生しましたが、特定の仮想ホストでのみ発生しました。

複数の仮想ホストに要求を提供するために、CentOS 7システムにApache v2.4リバースプロキシを設定しました。その中にはAtlassianアプリケーションサーバーがあります。

プロキシのプライベートIPアドレスは10.0.0.77、パブリックIPアドレスは77.77.77.77、複数のDNS AレコードはパブリックIPをさまざまなFQDNなどにマッピングしますfoo.example.combar.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にアクセスできます(-LBambooが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は一般的なタイムアウトのみを報告したため、問題をより早く把握できませんでした。

関連情報