Итак, решение (хоть и немного запоздавшее).
В nginx добавляем примерно такой блок server:
server {
listen 80;
server_name ~(^.*)$;#
location / {
proxy_pass http://localhost:8080/domain?domain=$http_host&after=$uri$is_args$args;
}
}
В блоке location соответственно пишем адрес локального веб сервера, в данном примере так же передаётся сам домен и запрошенный url. Дальше веб сервер должен по домену определить необходимый субдомен (в примере page1) и сделать запрос на page1.example.com и вернуть ответ пользователю, или (что гораздо лучше) просто перенаправить запрос на обрабатывающую функцию (ну или сделать тот же http запрос на локальный адрес).
Сам пользователь должен добавить к домену запись типа A на IP сервера (да, ip придётся раскрыть)