pd4d10/unpub

Reverse proxy support does not work for subpath

Opened this issue · 3 comments

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]

You need http headers, i guess.
See comment on 5a7aaa0
On my env i've done with headers, like i've wrote in this PR #80
You might want to update this instructions with apache solution.

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'),

@andrew-tpz how to solve this problem.