ProxyPass 可以把 URL A 轉去 URL B,並保留網址是 URL A。
常見的用法可能像是
- 原本有網址 site-a.com,可是之後做了新版的網站,但是舊有的論壇功能 (www.site-a.com/forum/) 要留著
- 原本有 site-a.com 跟 site-b.com,但是其實某一路徑(/path1)下的東西是一模一樣,但是想要讓 site-a.com與 site-b.com的使用者看起來都在原本網站,且不想在兩個 server 上重複 deploy
以第一個情況來說,懶惰的方式就是把舊的網站整個搬去跑在別的 port (例如 site-a.com:8008/ ),然後把 www.site-a.com/forum/ 做 proxy pass 到 www.site-a.com:8008/forum/ 。
第二個情況,可能是把 /path1/ 放在 site-a.com 上,但實際上 site-b.com/path1/ 也是 proxy pass 去 site-a.com/path1/
example config file 如下:
$ more /etc/apache2/sites-enabled/site-a.conf <VirtualHost *:80> ServerName www.site-a.com ServerAlias site-a.com ProxyPass /path1/ http://www.site-b.com/path1/ ProxyPassReverse /path1/ http://www.site-b.com/path1/ </VirtualHost>
用 proxy pass 和 redirect 是不太一樣的。如果是用 redirect,那之後的 request 都是對 redirect 之後的 server,但是 proxy 的話,兩邊的會有 request (如下)
$ tail -f /var/log/apache2/access.log 35.xxx.xxx.xxx - - [25/Jul/2017:14:57:43 +0800] "GET /path1/ HTTP/1.1" 200 1251 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0" 130.xxx.xxx.xxx - - [25/Jul/2017:14:57:43 +0800] "GET /path1/ HTTP/1.1" 200 1251 "-