1. 程式人生 > >利用Apache反向代理解決前後端造成的跨域問題

利用Apache反向代理解決前後端造成的跨域問題

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>