Нужно заняться отладкой и понять где возникает проблема, т.е. в чем причина зависания. Возможно, нужно просто выделить больше памяти для работы скрипта импорта. Попробуй писать лог из критичных мест скрипта и посмотри где скрипт зависает/падает.
--[дополнено]--
Ошибка 504 Gateway Timeout (time out), означает что веб-сервер не смог обработать данные в отведенные срок выполнения скрипта. Как написал уже
Kravalg , тебе нужно в момент получения данных сохранить их в файл.
Затем запланировать задачу по импорту через крон без использования веб-сервера. Т.е. написать весь импорт в файле import.php который будет запускаться по крону без использования веб-сервера
(по типу /usr/bin/php import.php). Так твой скрипт импорта будет работать столько сколько надо.
Другой способ, это сообщить веб-серверу, что соединение закрыто, но продолжить выполнение твоего скрипта, примерно так
session_write_close(); // закрыть сессию
fastcgi_finish_request(); // завершить обработку запроса клиента
.. // тут "долгие" операции
будет ли работать этот способ зависит от настроек твоего веб-сервера и php
по классике, делай по первому способу: сначало прием данных из вне и только сохранение в файл, затем обработка по крону. А еще лучше, загрузка+обработка по крону без участие веб сервера.
P.S. при обработке по крону, в 90% случаев ты можешь игнорировать ограничения по времени работы скрипта и кол-во памяти (смотри опции вызова бинарника php).
Т.е. ты легко можешь прочитать через
json_decode(file_get_contents(..))
гигабайтный или более файл и потом еще час его обрабатывать так, как тебе надо...