利用Apache反向代理解決前後端造成的跨域問題
阿新 • • 發佈:2018-12-06
Apache可以被配置為正向(forward)和反向(reverse)代理。
正向代理是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。
正向代理的典型用途是為在防火牆內的區域網客戶端提供訪問Internet的途徑。正向代理還可以使用緩衝特性(由mod_cache
提供)減少網路使用率。
使用ProxyRequests
指令即可啟用正向代理。因為正向代理允許客戶端通過它訪問任意網站並且隱藏客戶端自身,因此你必須採取安全措施
正向代理
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from internal.example.com
</Proxy>
反向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名字空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。
反向代理的典型用途是將防火牆後面的伺服器提供給Internet使用者訪問。反向代理還可以為後端的多臺伺服器提供負載平衡,或為後端較慢的伺服器提供緩衝服務。另外,還可以啟用高階URL策略和管理技術,從而使處於不同web伺服器系統的web頁面同時存在於同一個URL空間下。
可以使用ProxyPass
指令啟用反向代理(在RewriteRule
指令中使用[P]
標記也可以)。配置反向代理並不需要開啟ProxyRequests
指令。
開啟相關模組
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
apache重啟
sudo service apache2 restart
配置代理
反向代理 ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /foo http://foo.example.com/bar ProxyPassReverse /foo http://foo.example.com/bar
以下是配置成功的配置檔案
<VirtualHost *:8092>
ServerAdmin [email protected]
DocumentRoot "/home/vcyber/data/vue"
<Directory "/home/vcyber/data/vue">
SetOutputFilter DEFLATE
Options FollowSymLinks ExecCGI
Require all granted
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /api/ http://127.0.0.1:8093/
ProxyPassReverse /api/ http://127.0.0.1:8093/
</VirtualHost>