通過反向代理方式處理cas單點登錄內外網雙ip訪問的問題

前言:由於項目部署的的環境是內外網隔離的模式,把網絡分成內網和外網兩部分。cas服務器及客戶端部署在內網,通過端口映射的方式把服務端口向外網開放,外網用戶只能通過外網IP訪問客戶端。因此會存在一個問題,我們的客戶端配置casServer地址及回調的url使用的是內網的。用戶通過外網ip訪問後,跳轉的cas登錄地址爲內網的地址,因此是訪問失敗的。而如果配置成外網ip的話,通過內網ip訪問也是失敗的,瀏覽器顯示的是外網的地址。

我們的需求是,通過外網ip訪問的客戶端業務系統,重定向到外網的cas服務器,登錄後跳轉回來外網ip的業務系統,內網同樣的需求。查閱資料發現,通過改源碼去動態根據訪問ip修改cas服務器的地址及客戶端回調地址的方法,一是費時且找不到可用資料,二是業務系統太多,改了一套其它都得改,造成大面積的客戶端業務系統更新,三是部分業務系統不是自己公司開發的,需要協調第三方去修改。因此採用通過反向代理方式處理cas單點登錄內外網雙ip訪問的問題。實踐證明,只需要短短半小時便解決問題。

一、通過apache進行反向代理

1.下載apache的安裝包及apr的安裝包

官網下載Apache的源碼包,http://httpd.apache.org/
這裏下載的版本是:httpd-2.4.41.tar.gz
到http://apr.apache.org/下載APR源碼包和APR-util源碼包
這裏下載的版本分別是:apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz
把httpd-2.4.41.tar.gz、apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz上傳到/opt/tools目錄下

2.解壓apr及apr-util源碼包

# cd /opt/tools
# tar -zxvf httpd-2.4.41.tar.gz
# tar -zxvf apr-1.6.5.tar.gz
# tar -zxvf apr-util-1.6.1.tar.gz

3.安裝相關組件

# yum -y install gcc gcc-c++ make
# yum -y install expat-devel
# yum -y install pcre-devel
# yum -y install mod_ssl openssl-devel
# yum -y install libtool-ltdl-devel

4.安裝apr

# cd /opt/tools/apr-1.6.5
# ./configure --prefix=/usr/local/apr
# make
# make install

5.安裝apr-util

# cd /opt/tools/apr-util-1.6.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make
# make install

6.安裝httpd

# cd /opt/tools/httpd-2.4.41
# ./configure --prefix=/opt/app/apache24 --enable-so --enable-ssl --enable-rewrite --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
# make
# make install

7.啓動命令

爲了方便以後使用apache可以將執行路徑添加的PATH中,這樣下次執行命令時,就不需要使用路徑
# echo PATH=$PATH:/opt/app/apache24/bin/apachectl >> /etc/profile
# source /etc/profile

啓動:
# apachectl start
停止:
# apachectl stop
重啓:
# apachectl restart

8.修改httpd.conf配置文件

# vi /opt/app/apache24/conf/httpd.conf
把#ServerName www.example.com:80前面的#號去掉,並把www.example.com修改爲內網ip加端口,保存退出
重啓apache
# apachectl restart

9.配置反向代理

# vi /opt/app/apache24/conf/httpd.conf
在httpd.conf中把下三行配置放開(前面的#號去掉)
LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so
Include conf/extra/httpd-vhosts.conf

10.在conf/extra/httpd-vhosts.conf中配置虛擬主機(反向代理)

# vi /opt/app/apache24/conf/extra/httpd-vhosts.conf
在文件末尾添加以下配置:
# 外網地址
<VirtualHost *:8080>
    ServerName  192.168.4.120
    ServerAlias 192.168.4.120
    ErrorLog "logs/error_log"
    CustomLog "logs/access_log" common
    
    # 關閉正向代理
    ProxyRequests Off
    # 反向代理時不保留原始Request中的HOST(即代理服務器自身Host)
    ProxyPreserveHost Off
    
    ## 把服務器響應中的內網IP地址改成外網地址
    Substitute "s|127.0.0.1:8083/dognet|192.168.4.120/dognet|n"
    Substitute "s|127.0.0.1:8443/cas|192.168.4.120/cas|n"
    Substitute "s|127.0.0.1:8081/ywjk|192.168.4.120/ywjk|n"
    
    # SSO反向代理
    ProxyPass /cas http://127.0.0.1:8443/cas
    ProxyPassReverse /cas http://127.0.0.1:8443/cas
    
    # Web應用反向代理
    ProxyPass /dognet http://127.0.0.1:8083/dognet
    ProxyPassReverse /dognet http://127.0.0.1:8083/dognet
    
    # Web應用反向代理
    ProxyPass /ywjk http://127.0.0.1:8081/ywjk
    ProxyPassReverse /ywjk http://127.0.0.1:8081/ywjk
</VirtualHost>

11.重啓apache

# apachectl restart

12.springboot客戶端配置的是內網的cas服務器地址及客戶端地址

#cas配置
cas:
  client-name: ywjk
  #測試工作機地址
  server:
    url: http://127.0.0.1:8443/cas
  #本機ip地址
  project:
    url: http://127.0.0.1:8081/ywjk/

13.測試

通過訪問192.168.4.120:8080/ywjk時,重定向到http://192.168.4.120:8080/cas/login?service=http%3A%2F%2F127.0.0.1%3A8081%2Fywjk%2F%2Fcallback%3Fclient_name%3Dywjk,登錄後跳轉回192.168.4.120:8080/ywjk。而通過127.0.0.1:8080/ywjk訪問時,重定向到http://127.0.0.1:8080/cas/login?service=http%3A%2F%2F127.0.0.1%3A8081%2Fywjk%2F%2Fcallback%3Fclient_name%3Dywjk,登錄後跳轉回127.0.0.1:8080/ywjk。至此,內外網雙ip問題得以解決。

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