web-dev-qa-db-ja.com

ホスト名でアクセスするがIPではアクセスしない場合の504ゲートウェイタイムアウト

Elastic LoadBalancingでAmazonEC2を使用しています。私のWebベースのアプリケーションでは、エンドユーザーがapp.myapp.comに接続すると、ドキュメントをPDFに変換するなどの特定の操作を実行すると、504ゲートウェイタイムアウトエラーが発生します。それ以外の場合、アプリケーション全体は正常に機能しています。

ただし、IPアドレスを介してサーバーの1つに直接接続し、同じアクションを実行する場合、エラーは発生しません。決して。

レジストラのDNSエントリで、app.myapp.comがElastic Load Balancer DNS名を指すCNAMEレコードをすでに作成しており、サーバーインスタンスがその背後にあります。注:ロードバランサーの使用を停止し、DNS設定を指定して、app.myapp.comがいずれかのサーバーのIPアドレスに直接アクセスするようにしても、正確な問題が発生します。

要するに、この操作は、URLがハードコーディングされていなくても、ホスト名>>を介してアプリケーションに接続するとタイムアウトになりますが、IPアドレスを介して接続すると発生しません。何ヶ月にもわたって、私は考えられるほぼすべてのトラブルシューティング手順を試しました。何でも試してみてください。

概要:ホスト名を使用してリクエストを行うときに504ゲートウェイのタイムアウトが発生する原因は何ですか?

私の関連するVHOSTSエントリー:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/application/public
    <Directory /var/www/application/public>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            Allow from all
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} -s [OR]
            RewriteCond %{REQUEST_FILENAME} -l [OR]
            RewriteCond %{REQUEST_FILENAME} -d
            RewriteRule ^.*$ - [NC,L]
            RewriteRule ^.*$ index.php [NC,L]
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog ${Apache_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, cri$
    # alert, emerg.
    LogLevel warn

    CustomLog ${Apache_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
2
user3035649

使用するホスト名を使用して、VirtualHost構成にServerName属性を追加します。

2
c4urself

修正しました。これを引き起こした2つのコア問題が連携して動作していました。

コアの問題1: Ubuntuの/ etc/hostsファイルを見ると、編集した記憶がありませんでしたが、問題が明らかになりました。 3行目は、存在しないサーバーへのルーティングでした。その理由を本当に知りたいと思います。この3行目は削除されました:

127.0.0.1 localhost
127.0.1.1 ubuntu-server
42.139.126.191 app.myapp.com

コアの問題2:すべてのリンクは相対的であるため、上記のhostsファイルの問題は問題ではありません。しかし、何らかの理由で、PDF生成ツールは相対リンクのみを使用しますが、ドメインを指定する必要があるコード行があり、それがコード内のどこかにあることを私に教えてくれましたホストファイルが42.139.126.191に存在すると言った完全なURLの書き換えを行うと、実際にはそのIPには何も存在しなかったため、「504ゲートウェイのタイムアウト」が発生しました。

私がやろうと決めたもう1つのこと:問題のある3行目を削除する代わりに、DNSサーバーのみにトラフィックをルーティングする理由がないと判断したため、新しい3行目(以下を参照)が追加されましたそのDNSサーバーが、要求の送信元と同じサーバーを指すようにします(ちなみに、国際ラウンドトリップ)。 DNS権限を持つレジストラ(およびホストが別の国にあること)はまったく意味がないため、可能であればこれを避けてください。

そこで、これを回避するために別の3行目を追加しました(ただし、古いレジストラをダンプして、とにかくAmazonのRoute53を使用する必要があります)。

127.0.0.1 localhost
127.0.1.1 ubuntu-server
127.0.0.1 app.myapp.com    
0
user3035649