我正在使用Amazon EC2和Elastic Load Balancing。 在我的基于Web的应用程序中,当执行某些操作(如将文档转换为PDF)时,最终用户连接到app.myapp.com会出现504网关超时错误。 否则,整个应用程序正常工作。
但是,当通过IP地址直接连接到其中一台服务器并执行相同操作时,没有错误。 决不。
在我的注册服务商的DNS条目上,我已经创build了一个CNAMElogging,将app.myapp.com指向我的Elastic Load Balancer DNS名称,然后我的服务器实例就位于此。 注意:甚至当我停止使用负载均衡器并指向DNS设置时,确切的问题仍然会发生,以便app.myapp.com直接转到我的一个服务器的IP地址。
底线是这个操作,尽pipe没有URL是硬编码的,当你通过主机名连接到应用程序时会超时,但是当通过IP地址连接时永远不会发生。 几个月来,我已经尝试了几乎所有我能想到的故障排除步骤。 愿意尝试任何事情。
简介:当使用主机名而不是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>
在您的VirtualHostconfiguration中添加您要使用的主机名的ServerName属性。
修复。 有两个核心问题协同工作,造成这….
核心问题1:在查看Ubuntu的/ etc / hosts文件时,虽然我没有记住曾经编辑它,但问题变得明显。 第三行是路由到一个不存在的服务器,我真的希望我知道为什么。 第三行被删除:
127.0.0.1 localhost 127.0.1.1 ubuntu-server 42.139.126.191 app.myapp.com
核心问题2:上面的主机文件的问题应该甚至不重要,因为所有的链接都是相对的。 但是由于某些原因,即使PDF生成工具只使用相对链接,也有一行代码需要指定域,并且在代码中的某个地方将其重写为主机的完整URL文件表示存在于42.139.126.191,尽pipe实际上在该IP上并不存在,因此“504网关超时”。
还有一件事我决定去做:不是仅仅删除有问题的第三行,而是增加了一个新的第三行(见下文),因为我们认为没有理由将stream量路由到DNS服务器,只有该DNS服务器指向到发送请求的同一台服务器(顺便提一句,国际往返)。 具有DNS权限的注册服务商 – 而主机位于不同的国家 – 实际上根本就没有任何意义 – 所以如果可以的话,请避免这种情况。
所以我加了一个不同的第三行来绕过这个(但是我可能应该把我的旧注册商甩掉,并且使用亚马逊的Route53):
127.0.0.1 localhost 127.0.1.1 ubuntu-server 127.0.0.1 app.myapp.com