Reverse proxy support does not work for subpath
Opened this issue · 3 comments
andrew-tpz commented
Apache:
ProxyPass /unpub/ http://localhost:4000/
ProxyPassReverse /unpub/ http://localhost:4000/
Unpub params
--proxy-origin=http://localhost/unpub/
Browser Console
GET http://localhost/main.dart.js [HTTP/1.1 404 Not Found 2ms]
sIspravnikov commented
andrew-tpz commented
There is no subpath in that comment, just another root domain.
Problem 1 - "proxy-origin" does not affect static html part.
index.html has lines
<base href="/" />
...
<script defer src="main.dart.js"></script>
As I understand:
* browser requests http://localhost/unpub/
* apache redirects to http://localhost:4000
* unpub responses with index.html
* browser parses html and requests http://localhost/main.dart.js instead of http://localhost/unpub/main.dart.js
* apache doesn't redirect request and responses with 404
Problem 2 - Uri.resolve(reference) include subpath in the result only in one case; Uri ends with '/' and reference doesn't start with '/'.
Uri.parse('http://localhost/unpub/').resolve('/api/smth').toString()
returns 'http://localhost/api/smth'
instead of 'http://localhost/unpub/api/smth'
So, App._versionToJson generates wrong archive_url:
Map<String, dynamic> _versionToJson(UnpubVersion item, shelf.Request req) {
...
'archive_url': _resolveUrl(req, '/packages/$name/versions/$version.tar.gz'),
ChenFan418 commented
@andrew-tpz how to solve this problem.