у меня проблемы с настройкой апач
.
Приложения:
приложение 1 — SPA (интерфейс), работающее в докере. Доступно локально через http://локальный: 91
приложение 2 — WebAPI (серверная служба), работающее в докере. Доступно локально через http://локальный: 90
Я хотел бы сделать оба приложения доступными в одном домене через HTTPS, используя апач
:
- приложение 1:
https://мой.домен.com
<- должен быть защищен базовой аутентификацией.
- приложение 2:
https://мой.домен.com/api
Я думал, что эта настройка работает, когда я использовал простой HTTP для доступа к ресурсам, но как только я переключился на HTTPS (самоподписанный
с letsencrypt
) - вроде все перестало работать.
вот последняя конфигурация
<VirtualHost *:80>
ServerName my.domain.com
ServerAlias www.my.domain.com
TraceEnable off
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.my.domain.com [OR]
RewriteCond %{SERVER_NAME} =my.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName my.domain.com
ServerAlias www.my.domain.com
TraceEnable off
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
#Allow from all
Allow from 127.0.0.1
</Proxy>
Timeout 2400
ProxyTimeout 2400
ProxyBadHeader Ignore
<Location />
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
ProxyPass http://localhost:91/ Keepalive=On
ProxyPassReverse http://localhost:91/
</Location>
<Location /api>
ProxyPass http://localhost:90/
ProxyPassReverse http://localhost:90/
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/my.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.com/privkey.pem
</VirtualHost>
</IfModule>
Последняя и актуальная проблема:
Всякий раз, когда я пытаюсь получить доступ к конечной точке https://my.domain.com/api/Аутентификация/Вход
- пользователю предлагается страница входа. Это должно быть действительно только для URL-адресов, отличных от API.
Другими словами - <Location /api>
директива, кажется, игнорируется.Я пробовал перетасовывать директивы местоположения, а также десятки других решений, и ни одно из них не работает. Я также пробовал более явную директиву, например <LocationMatch /(api).*>
это тоже не сработало.
Что-то не так с правилами сопоставления местоположений?