Расскажу, как я сделал у себя.
1. Стоит апач, который пускает из локалки без паролей.
2. На том же сервере стоит nginx который висит на 443 порту и там подключен сертификат от letsencrypt (для этого желательно иметь собственный домен, я себе завел зону mjdm.мой.домен)
3. В nginx прописана вот такая конфигурация
server {
listen 443 ssl http2;
ssl_certificate /usr/local/etc/letsencrypt/live/mjdm.мой.домен/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/mjdm.мой.домен/privkey.pem;
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;
server_name mjdm.мой.домен;
location / {
auth_basic "Restricted area";
auth_basic_user_file /usr/local/etc/nginx/htpasswd;
proxy_pass
http://127.0.0.1;
}
}
4. в файле /usr/local/etc/nginx/htpasswd прописан пользователь и невпипенный пароль из 20-ти символов, а все равно хром на мобильнике этот пароль спросит один раз и запомнит.
5. На маршрутизаторе я сделал проброс входящих на 443 порт на сервер с mjdm тоже на 443 порт.
Ну и как бы все.
Изнутри можно ходить к mjdm по ip адресу локалки без пароля. Снаружи идем на IP адрес домашнего роутера по https и с паролем.
Из того, что нужно иметь, это домен, любой, но свой и выделенный внешний IP.