Смотреть логи клиента, смотреть логи сервера. Если увидите разницу - снимать дамп трафика и анализировать. Если в веб-сервере всё на месте, а в РНР нет, значит дело в последнем (обычно именно так и бывает).
Вы глобально делаете не то в виде пихания нескольких сервисов в один контейнер. Забудьте про 127.0.0.1 - все контейнеры должны ходить друг к другу по именам, а доступ снаружи обеспечивается экспозом 80/443 порта на контейнере с nginx.
Универсальный рецепт - посмотреть, с какими параметрами скомпилирован нгинкс, nginx -V, там будет указан путь к дефолтному конфигу, например --conf-path=/etc/nginx/nginx.conf, в котором, по идее, будут перечислены инклюдами все каталоги.
Если точно понимаете, зачем вам Апач - почему бы и нет?
Но, честно говоря, вариантов тут немного - чаще всего такое взгромождают, когда приложение работает только с неким экзотическим модулем апача, аналога которого для других веб-серверов не существует (см. напр. 1С). Ну или когда несколько поколений веб-программистов в три слоя обмазало сайт htaccess-магией и конвертировать это в nginx-директивы никто не хочет.
Если приложение ожидает 200 кода и не умеет ходить по редиректам - так работать и не будет. В любом случае, нужно больше конкретики - что за ошибка, какой в приложении используется http-клиент и т. д.
Вам нужно проксирование на уровне TCP - просто проброс 443 порта на второй сервер. Если же вы хотите всё-таки влезать на L4 (как-то фильтровать по хосту и т.д.), то без вариантов - сертификат должен быть на первом сервере.