Просто делаете два сокета - каждый для своей версии и указываете их в нужных локейшенах. В конфиге (если необходимо), разносите также fastcgi_params`ы.
Судя по тексту, эта ошибка просто демонстрирует, что пришло два одинаковых пакета, ничего страшного в этом нет, ретрансмиссия - обычное дело. Если возникают проблемы с VPN, то надо копать в другом месте.
1. Деплоите ваше приложение в томкат.
2. Стандартным образом настраиваете проксирование в нгинксе.
3. С помощью certbot`а получаете сертификаты, добавляете HTTPS в конфиг нгинкса.
Все пункты обычно никаких трудностей не вызывают, благо многократно описаны в этих ваших инторнетах.
Не очень понятно, чего вы таким образом хотите добиться. По хорошему - стоит все эти объекты объединить в один сегмент локальной сети, тогда не придётся воротить никаких динамических днсов.
Производительность в вашем случае будет примерно одинакова. По удобству обслуживания - ОС, с которой лучше всего знаком обслуживающий. Если это вы сам - ну, что ж...
Хостс - это как раз костыль. Нормальное решение - добавить имя в DNS-зону. Если все ваши хосты обслуживаются одним локальным доменом - можно в локальный. В противном случае - в общедоступный.