我希望mydomain.com/
,mydomain.com/a
和被代理到mydomain.com/b
,其他一切都到.mydomain.com/c
127.0.0.1:8001/site/*
mydomain.com
127.0.0.1:8002
这些 URL 都在完全相同的域上,不涉及子域。我不想使用子域,这不是一个选项。URL 都在同一个域中。
第一种情况还涉及重写以将内容发送到子文件夹。所以:
http://mydomain.com/ -> http://127.0.0.1:8001/site/
http://mydomain.com/a -> http://127.0.0.1:8001/site/a
http://mydomain.com/b -> http://127.0.0.1:8001/site/b
http://mydomain.com/c -> http://127.0.0.1:8001/site/c
第二种情况是“通配符”,所以任何不去 127.0.0.1:8001/site/* 的东西都应该去 127.0.0.1:8002。所以:
http://mydomain.com/monkey -> http://127.0.0.1:8002/monkey
http://mydomain.com/banana -> http://127.0.0.1:8002/banana
http://mydomain.com/x -> http://127.0.0.1:8002/x
所以在伪代码中:
if domain is 'mysite.com'
if path in ['/', '/a', '/b', '/c']
proxy to 127.0.0.1:8001 + '/site' + path
else
proxy to 127.0.0.1:8002 + path
到目前为止,我所做的一切都导致 nginx 失败并进行了一个位置的重写并获取了最后一个位置的 proxy_pass URL。
旁白:显然,很难弄清楚如何做这件微不足道的事情,这证明了为什么正确的 if/else 支持不会是邪恶的;)