Apache 實現ProxyPass轉發URL到Tomcat并實現http自動轉https

jopen 10年前發布 | 253K 次閱讀 Tomcat Apache Web服務器

作者:沈小然

編寫日期:2014年7月6日

1          實現原理與工作流程

原理:

客戶瀏覽器使用https協議訪問 ApacheServer ApacheServer將請求轉發到后端的TomcatApacheServer與后端的Tomcat通信使用http協議。所以Tomcat不用開啟https協議。把ApacheServer配置支持https協議就可以了。證書也在ApacheServer中配置。自始自終Tomcat都不需要修改任何地方。同理換成JBoss也一樣,JBoss不需要修改。

更進一步,讓客戶瀏覽器訪問http協議時,自動將http協議轉成https協議就更加人性化了。這個技術也是在ApacheServer中配置完成。

工作流程:

1.       搭建ApacheServer服務器,支持https協議;(基礎工作)

2.       搭建Tomcat服務器,配置基本的訪問頁面;(基礎工作,整個功能不需要配置Tomcat

3.       配置ApacheServer服務器,實現在https協議基礎上將URL請求轉發給Tomcat服務器;(關鍵)

4.       配置ApacheServer,實現訪問http協議自動轉成https協議。(關鍵)

2          搭建ApacheServer服務器

2.1       使用yum 安裝apache

Apache版本

# httpd -v

Server version: Apache/2.2.15 (Unix)

Server built:   Aug 13 2013 17:29:28

 

2.2       檢測Apache是否支持加密https協議

ll /etc/httpd/modules/

查看目錄中是否有mod_ssl模塊,若沒有使用yum install mod_ssl安裝,安裝以后變化:

l  增加了/etc/httpd/modules/mod_ssl.so文件

l  增加了/etc/httpd/conf.d/ssl.conf配置文件

2.3       實現URl轉發技術需要的模塊

我們需要使用ApacheProxyPass來轉發URL后端,需要下面兩個模塊

mod_proxy.so

mod_proxy_http.so

我們還需要實現客戶端瀏覽器訪問http自動轉成https協議,需要下面的模塊

mod_rewrite.so

 

2.4       安裝openssl提供ssl加密協議

使用yum 安裝openssl

# yum install openssl

openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013

注意:我們測試環境,不需要創建CA證書,生產環境中需要上傳CA證書,并在ssl.conf文件中指定證書路徑。

3          搭建Tomcat服務器

# tar zxf apache-tomcat-8.0.9.tar.gz

# mv apache-tomcat-8.0.9 /opt/tomcat

開啟tomcat服務,測試使用tomcat默認頁面就可以

# bin/startup.sh

訪問192.168.1.10:8080出現tomcat默認頁面,如下圖:

Apache 實現ProxyPass轉發URL到Tomcat并實現http自動轉https

 

Tomcat服務器搭建成功

1          配置Apachehttp協議基礎上使用ProxyPass轉發URLTomcat(主要測試基本的ProxyPass的轉發功能)

1)編輯/etc/httpd/conf/httpd.conf

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

#具備以上2行是說明apache具備將URL轉發給Tomcat的能力

# 測試頁面add by sxr

ProxyPass /examples http://192.168.1.10:8080/examples/

ProxyPassReverse /examples http://192.168.1.10:8080/examples/

測試,訪問192.168.1.10/examples后,自動跳轉到了后端Tomcat192.168.1.10:8080/examples頁面。

Apache 實現ProxyPass轉發URL到Tomcat并實現http自動轉https

Tomcat提供的192.168.1.10:8080/examples頁面

Apache 實現ProxyPass轉發URL到Tomcat并實現http自動轉https

1          配置Apachehttps協議中實現ProxyPass轉發URLTomcat

實現原理:客戶瀏覽器訪問Apachehtts協議,在Aapachessl.conf配置文件中配置ProxyPass轉發,將請求轉發給后端的Tomcat服務器,這樣就實現了在https協議的基礎上ApacheURL轉發給Tomcat

注意:此時,客戶端瀏覽器必須使用https://192.168.1.10/docs訪問才能實現URL轉發。

1)編輯/etc/httpd/conf/httpd.conf

Include conf.d/*.conf

#加載其他的配置文件,主要是為了使用ssl.conf

保存。

2)編輯 /etc/httpd/conf.d/ssl.conf,支持https協議

LoadModule ssl_module modules/mod_ssl.so

Listen 443

##

## SSL Virtual Host Context

##

<VirtualHost _default_:443>

ErrorLog logs/ssl_error_log

TransferLog logs/ssl_access_log

LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

<Files ~ "\.(cgi|shtml|phtml|php3?)$">

    SSLOptions +StdEnvVars

</Files>

<Directory "/var/www/cgi-bin">

    SSLOptions +StdEnvVars

</Directory>

SetEnvIf User-Agent ".*MSIE.*" \

         nokeepalive ssl-unclean-shutdown \

         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \

          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

# https協議中實現ProxyPass轉發URL,實際就是在ssl.conf中添加ProxyPass語句

ProxyPass /test http://192.168.1.10:8080/examples

ProxyPassReverse /test http://192.168.1.10:8080/examples

ProxyPass /docs http://192.168.1.10:8080/docs    注意,末尾沒有/符號,http://192.168.1.10:8080/docs/是錯誤的

ProxyPassReverse /docs http://192.168.1.10:8080/docs

注意:轉發到TomcatURL中末尾不能加/符號。如果寫成ProxyPassReverse /docs http://192.168.1.10:8080/docs/ ,訪問的結果如下圖:

Apache 實現ProxyPass轉發URL到Tomcat并實現http自動轉https

寫成ProxyPassReverse /docs http://192.168.1.10:8080/docs,訪問的結果如下圖:

Apache 實現ProxyPass轉發URL到Tomcat并實現http自動轉https

 

2          配置Apache,實現http自動轉換成https協議

上面,我們已經完成了在https協議上實現將URL轉發給Tomcat。接下來,我們只要配置Apache,實現http自動轉成https協議,就能夠讓客戶端瀏覽器輸入普通地址自動跳轉到加密的https的頁面,并且頁面還是后端Tomcat服務提供的功能。

編輯/etc/httpd/conf/httpd.conf配置文件,下面語句實現將整個Apache站點都自動轉成https協議

# add by sxr

RewriteEngine on

RewriteCond %{SERVER_PORT} 80

RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

RewriteLog /var/log/httpd/rewrite.log

RewriteLogLevel 10

保存,重啟Apache服務生效

# /etc/init.d/httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

來自:http://my.oschina.net/lionel45/blog/287735

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!