504 тайм-аут шлюза при доступе по имени хоста, но не по IP
Я использую Amazon EC2 с Elastic Load Balancing. В моем веб-приложении конечные пользователи, подключающиеся к app.myapp.com, получают ошибку времени ожидания шлюза 504 при выполнении определенных операций, таких как преобразование документа в PDF. В противном случае все приложение работает нормально.
Однако при подключении к одному из серверов напрямую через IP-адрес и выполнении того же действия НЕТ ОШИБКИ. Никогда.
На DNS-записях моего регистратора я уже сделал запись CNAME, которая указывает app.myapp.com на мое DNS-имя Elastic Load Balancer, а затем за этим стоят мои экземпляры сервера. Примечание: точная проблема все еще возникает, даже когда я перестаю использовать балансировщик нагрузки и указываю настройки DNS, чтобы app.myapp.com напрямую переходил на IP-адрес одного из моих серверов.
Суть в том, что эта операция, хотя URL-адреса не заданы жестко, истекает при подключении к приложению через имя хоста >>, но никогда не происходит при подключении через IP-адрес. В течение нескольких месяцев я пробовал каждый шаг по устранению неполадок, который только мог придумать. Готов попробовать что угодно.
Резюме: что может вызвать тайм-аут шлюза 504 при выполнении запросов с именем хоста, но не IP?
МОЙ СООТВЕТСТВУЮЩИЙ VHOSTS ENTRY:
<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 ответа
Добавить ServerName
атрибут в вашей конфигурации VirtualHost с именем хоста, который вы хотите использовать.
Починил это. В тандеме было две основные проблемы, которые вызвали это....
Основная проблема 1: При просмотре файла /etc/hosts в Ubuntu, хотя у меня не было памяти о том, чтобы когда-либо редактировать его, проблема стала очевидной. Третья строка - маршрутизация на несуществующий сервер, и мне бы очень хотелось знать, почему. Эта третья строка была удалена:
127.0.0.1 localhost
127.0.1.1 ubuntu-server
42.139.126.191 app.myapp.com
Основная проблема 2: проблема с файлом hosts выше не должна иметь значения, так как все ссылки относительны. Но по какой-то причине, хотя инструмент создания PDF-файлов использует только относительные ссылки, есть строка кода, в которой вы должны указать домен, и это подсказало мне, что где-то в коде, который он делал, переписывается полный URL-адрес, который размещают хосты. Указанный файл существует в 42.139.126.191, хотя в действительности на этом IP ничего не существует, и, следовательно, "тайм-аут шлюза 504".
Еще одну вещь, которую я решил сделать: вместо того, чтобы просто удалить проблемную третью строку, была добавлена новая третья строка (см. Ниже), потому что мы решили, что нет никакой причины направлять трафик на DNS-сервер только для того, чтобы этот DNS-сервер указывал назад. на тот же сервер, с которого был отправлен запрос (между прочим, в оба конца). Регистратор, имеющий полномочия DNS - и хост, находящийся в другой стране, вообще не имеет никакого смысла - поэтому избегайте этого, если можете.
Поэтому я добавил другую третью строку, чтобы обойти это (но мне, вероятно, следует сбросить мой старый регистратор и в любом случае использовать Amazon Route53):
127.0.0.1 localhost
127.0.1.1 ubuntu-server
127.0.0.1 app.myapp.com