Что я хотел бы сделать
У меня есть домен example.com
, для которого мне требуется SSL-сертификат клиента для доступа. Это легко сделать с помощью ssl_verify_client on;
директивы.
Однако некоторые ресурсы должны быть доступны публично, например .well-known/acme-challenge/
required от Let's Encrypt или keybase.txt
из Keybase.io.
Я сделал небольшую графику ASCII, чтобы визуализировать то, что я хотел бы сделать.
+-------------+
| |
| example.com |
| |
++----------+-+
| |
Public Ressource | | Private Ressource
(Whitelist) | | (Anything else)
| |
v v
+--------------------++ ++-------------------------+
| | | |
| Normal HTTPS Server | | Requires SSL Client cert |
| | | |
+---------------------+ +--------------------------+
Что я пробовал до сих пор
Пока что мой обходной путь - использовать DNS TXT-записи для проверки запросов Let's Encrypt. Это неоптимально, поскольку их обновление может занять довольно много времени, и это не решает проблему в целом.
Моя идея была бы как определение двух бэкэнд-серверов, которые доступны только через сокетное соединение и затем связываются с ними через директивы location
. Я не знаю, возможно это или нет, но документация nginx меня не просветила.
Чего я хочу избежать
По умолчанию предлагается "Просто использовать другой поддомен", что несколько противоречит цели, так как я хочу использовать эти ресурсы для аутентификации этого домена, а не другого домена.