Знаю, знаю, Apache - не лучший инструмент для использования в качестве HTTP-прокси, но он мне нужен на моем сервере.
Вот конфигурация моего виртуального хоста:
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
<VirtualHost *:80>
ServerName my.public.domain
Redirect / https://my.public.domain/
</VirtualHost>
<VirtualHost *:443>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:50001/
ProxyPassReverse / http://127.0.0.1:50001/
ServerName my.public.domain
ErrorLog ${APACHE_LOG_DIR}my-app-error.log
CustomLog ${APACHE_LOG_DIR}my-app-access.log common
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/my-cert/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my-cert/privkey.pem
</VirtualHost>
В методе UseUrls
у меня http://localhost:50001
настроен как основной URL-адрес, и он перенаправляется Apache на HTTPS @ 443.
Он работает как шарм, однако я вижу это в журналах:
предупреждение: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware [3] Не удалось определить порт https для перенаправления.
В моей конфигурации Apache обрабатывает https-трафик c, Кстати, я не могу обмениваться данными своего приложения с Apache локально через HTTPS, это просто не работает. Я также думаю, что бессмысленно шифровать локальный внутренний трафик c.
К сожалению, для правильной работы моего решения требуется взлом, - мне нужно указать URL-адрес своего сайта publi c в конфигурации моего приложения - в противном случае приложение не знает, какой это внешний адрес. Я имею в виду - я создаю некоторые ссылки вручную, потому что это суть моего вопроса - я не знаю, где фреймворк будет хранить такую информацию. Например, NavigationManager
думает, что мой URL-адрес сайта - «http://localhost: 50001 », поэтому, если мне нужен абсолютный URL-адрес в моем приложении, я не могу использовать NavigationManager
напрямую, мне нужно «вручную» создать URL-адрес в приложении.
Ссылки, созданные Identity, имеют «http» вместо «https», но он работает, потому что apache перенаправляет все на https.
Есть ли способ (и КАК ), чтобы сделать это более правильно - средство официально сообщить As pNET .Core он имеет конкретный c внешний URL?