Centos7+Apache2.4 HTTP,HTTPS反向代理配置+substitute_module模塊內容替換,超簡單!

環境
系統:Centos7.4
HTTP Service:yum 安裝的 Apache,版本爲2.4
在這裏插入圖片描述
需求:碰到個需求,需要訪問域名 a.com,但是要顯示 b.com域名的內容(當然b.com可以是web服務器,也可以指定端口,這裏泛指);思來想去,想到了幾個方法!

方法一 :URL轉發技術(可以實現,有缺點)

一張圖說明URL轉發原理:

在這裏插入圖片描述

優點:設置簡單!無需代碼設置!無需配置服務器!
缺點:

  1. 單獨購買url轉發服務
  2. 穩定性不好說,畢竟是別人家的東西
  3. iframe加載也是一大缺點,如果跨域操作DOM,會讓你放棄的!

想到了正向代理與反向代理!正向代理需要設置客戶端,如果有用戶就不現實了,然後就研究反向代理了!

方法二 :反向代理(完美)

因爲我用的http服務器是Apache的,所以一開始就百度啊google啊,哎!不說了,大家都有這種感受!反正感覺別人都是對的,但是自己的就是行不通!

所以有需要的人看到後希望先覈對環境再去測試!

一張圖瞭解反向代理:
在這裏插入圖片描述

這能滿足我的願望了嗎?當然不能!
我的需求是 a.com訪問顯示 b.com,而且域名不能變,並不需要tomcat,那怎麼辦?改唄!
*看看修改後的流程:
在這裏插入圖片描述
關鍵點:直接將代理服務指向域名b.com就搞定了!

具體配置方法

網上說去httpd.conf註釋一些.so文件;新建httpd-vhsts.conf,或者修改httpd-vhsts.conf什麼都不適用,當然也可能是我方法用錯了!那又怎樣了?適合我的纔是最好的對吧!

在httpd.conf末尾添加綁定域名設置

#域名綁定設置
NameVirtualHost *80
<VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName www.a.com
ServerAlias www.a.com a.com www2.b.com 
  <Directory "/var/www/html">
   Options  FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

NameVirtualHost :監聽端口
VirtualHost :域名綁定端口
DocumentRoot :域名訪問根目錄
ServerName :綁定名稱
ServerAlias :綁定的域名
Options FollowSymLinks:禁止訪問目錄

當然因爲沒有設置強制綁定,所以沒有綁定域名訪問的將是apache根目錄,/var/www/html/

接着加上代理設置

<VirtualHost *:80>
 DocumentRoot /var/www/html/dl #域名綁定目錄
 ServerName a.com
 ServerAlias a.com
    
    ProxyRequests off
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    //代理目的地址 注意空格和 /
    ProxyPass / http://b.com/
    ProxyPassReverse / http://b.com/
</VirtualHost>

這是我測試成功的:
在這裏插入圖片描述
網站內容都沒有變,只有域名變了!目前算是達到要求了吧!缺點暫時還沒有遇到!

反向代理內容替換

以上需求都實現了,很爽很開心!
老闆:我要在返回的頁面裏修改個圖片鏈接?趕緊搞定!
我:c。。。
好吧,埋頭搜了搜替換方法,發現反向代理都實現了,替換簡直是跟走路一樣簡單!

繼續修改httpd.conf文件

末尾添加:
在這裏插入圖片描述

#內容替換 
#引入替換模塊 (經測試不需要引入模塊)
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule filter_module modules/mod_filter.so
<Location "/">
 #取消網頁壓縮後在修改,不然啓用gzip的內容無法修改
 RequestHeader set Accept-Encoding ""

    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|替換前內容|替換後內容|ni"
</Location>

替換模塊可以寫在代理配置下面:如圖
在這裏插入圖片描述

也可以單獨寫在裏面:如圖
在這裏插入圖片描述
單獨寫的好處就是 <Location “/bd”>這裏可以指定匹配請求的鏈接修改內容,不匹配的則不會修改!

注意:RequestHeader set Accept-Encoding “”

如果你出現設置substitute_module後無法修改內容,那麼就要考慮這個了,因爲如果您代理的內容啓用了gzip壓縮的話,那麼substitute_module是無法匹配到內容的,所以纔會沒有修改,所以需要取消gzip標記,添加上就正常了!因爲這個問題花了好久的時間才找到答案,幾乎沒有相關的解答!
參考鏈接

官網介紹是這樣使用:Substitute “s/foo/bar/ni”
但是我替換的內容帶有/所以衝突,所以可以換|分割
n:使用字符串替換
i:不區分大小寫
另外如果有雙引號將無法啓動,儘量用單引號!
substitute_module模塊官網介紹用法:http://httpd.apache.org/docs/trunk/mod/mod_substitute.html

替換成後在查看返回的網頁內容:已經修改成功了!
在這裏插入圖片描述

HTTPS反向代理配置

用着用着問題又來了!
如果a.com和b.com都是http協議那麼目前一切都ok!
如果b.com是Https協議的了?結果會是什麼樣子了?有兩種情況,第一無法訪問,apache報了個錯,具體是什麼忘記截圖了,第二如果b.com設置了http強制跳轉,那麼a.com訪問後會強制跳轉到https://b.com,這樣又顯示了b.com,就又失敗了!

好了,那就來搞搞https的反向代理的問題了!
查bd,查google。。。。。。。
瞭解到訪問協議跟代理協議肯定要一致!找到問題了就不好說了!

1.先把a.com搞成https協議的!!

怎麼搞?當然去找免費的ssl證書了,阿里雲的就有而且使用方便,還有官方的安裝教程,不過能找出來免費的也需要本事!不信你們看,怎麼點都要收費!估計阿里雲現在想隱藏免費的,讓大家都買收費的!
在這裏插入圖片描述

那免費的在哪?

  1. 先點Symantec,在選擇增強型OV SSl
    在這裏插入圖片描述
  2. 點了增強型的免費的才會出來!會套路吧?估計一般人死都想不明白不要錢的卻藏在花錢的選項裏面了!!!
    在這裏插入圖片描述
  3. 然後就是按步驟申請了,記住:不管是頂級域名還是二級域名,反正只能申請單個,不是申請頂級域名,二級域名就不用申請了!這就是免費的原因吧!
  4. 安裝教程;以前發過https配置教程不重新發了,鏈接:【Centos7 Apache2.4.6+Tomcat8.5安裝配置HTTPS SSL證書+http強制跳轉HTTPS
  5. 阿里雲官網apache設置ssl教程,這隻有apache的配置教程,很簡單,需要注意自己的版本,鏈接

2.設置HTTPS反向代理

跟http配置不一樣,https需要在ssl.conf文件裏面設置

  1. 在文件末尾新建一個 VirtualHost節點,注意https端口是443
<VirtualHost _default_:443>
DocumentRoot "/var/www/html/dl"        #域名綁定目錄
ServerName dl.zaax.top:443		 #名稱
   <Proxy *>						#代理訪問設置
        Order deny,allow
        Allow from all
   </Proxy>

#代理設置
SSLEngine on
SSlProxyEngine on
SSlProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off


SSLProtocol all -SSLv2 -SSLv3
#SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on

#ssl證書配置
SSLCertificateFile /etc/httpd/ssl/1566059_dl.zaax.top_public.crt
SSLCertificateKeyFile /etc/httpd/ssl/1566059_dl.zaax.top.key
SSLCertificateChainFile /etc/httpd/ssl/1566059_dl.zaax.top_chain.crt

#反向代理設置
ProxyRequests off
#ProxyPreserveHost on

#代理目的域名設置
ProxyPass /  https://m.baidu.com/
ProxyPassReverse /  https://m.baidu.com/

#Response 內容修改設置
 RequestHeader set Accept-Encoding ""   #修改harder 關閉gzip壓縮
 AddOutputFilterByType SUBSTITUTE text/html
 Substitute "s|aaaa|bbbb|ni"  #修改替換網頁內容
</VirtualHost>

設置成功後如圖:可以看到是https訪問的,並且沒有重新定向跳轉到官網!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章