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    
Другие вопросы по тегам