我在设置时遇到麻烦apache
。
应用:
应用程序 1 - SPA(前端),在 docker 中运行。可通过以下方式本地访问
http://localhost:91
应用程序 2 - WebAPI(后端服务),在 docker 中运行。可通过以下方式本地访问
http://localhost:90
我想使用以下方式通过 HTTPS 使这两个应用程序在同一个域上可用apache
:
- 应用1:
https://my.domain.com
<-应使用基本身份验证进行保护。 - 应用2:
https://my.domain.com/api
当我使用纯 HTTP 访问资源时,我以为这个设置可以正常工作,但是一旦我切换到 HTTPS(self-signed
使用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/Auth/Login
,系统都会提示用户登录页面。这只对非 API URL 有效。
换句话说 -<Location /api>
指令似乎被忽略了。我尝试过改变位置指令以及许多其他解决方案,但都不起作用。我还尝试过更明确的指令,但<LocationMatch /(api).*>
同样失败了。
位置匹配规则有问题吗?
答案1
<Location /api>
并没有被忽略,您只是没有为其配置身份验证,因此适用更高级别的配置。
禁用AuthType
位置:
<Location /api>
AuthType None
Require all granted
ProxyPass http://localhost:90/
ProxyPassReverse http://localhost:90/
</Location>