目的
公司內網的服務或業務系統不宜直接暴露到外部公網上,常見做法是在DMZ區域配置一臺服務器,實現http或https轉發。本次實驗要實現的目標,即在linux服務器上安裝apache httpd server,通過配置實現http/https轉發。
環境及文件準備
2.1. 目標系統爲Oracle linux虛擬機,已預裝openssl-0.9.8a, apache-2.2.3
2.2. apache:apache httpd-2.2.29
2.3. 依賴包:
openssl:openssl-1.0.2a.tar.gz
apr: apr-1.5.1.tar.gz, apr-util-1.5.4.tar.gz,
zlib: zlib-1.2.8.tar.gz。
注:本文安裝程序採用的是下載源文件後編譯並安裝的方式。
操作步驟
主要包括三個步驟,安裝openssl等apache依賴的其他相關程序 -> 安裝apache httpd並設置http代理與反向代理 -> 生成ssl證書並配置虛擬機以及https代理與反向代理。
步驟1、安裝依賴包
#### 安裝 apr # 首先,解壓tar包 tar zxvf apr-1.5.1.tar.gz # 然後,轉到解壓後的目錄 cd apr-1.5.1 # 最後,依次執行configure、編譯和安裝命令 ./configure --prefix=/usr/local/apr make make install #### 安裝 apr-util,步驟基本同上,在執行configure時,指定apr位置 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr #### 安裝 openssl1.0.2a,步驟基本同上,configure命令按如下: ./config --prefix=/usr/local/openssl # make && make install後的額外步驟: # 1)、在/usr/local目錄下添加一個軟鏈接,便於以後設置ssl ln -s openssl ssl # 2)、在/etc/ld.so.conf文件的最後面,添加如下內容:/usr/local/openssl/lib # 3)、執行ldconfig ldconfig # 4)、添加openssl的環境變量: # 在 etc/ 的profile的最後一行,添加: export OPENSSL=/usr/local/openssl/bin export PATH=$OPENSSL:$PATH:$HOME/bin # 5)、退出當前Terminal 命令界面,並重新登陸。注意此步驟不能缺少。 # 6)、檢測openssl的安裝情況 cd /usr/local ldd /usr/local/openssl/bin/openssl # 此步驟執行後會出現類似如下信息: linux-vdso.so.1 => (0x00007fff3bc73000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fc5385d7000) libc.so.6 => /lib64/libc.so.6 (0x00007fc538279000) /lib64/ld-linux-x86-64.so.2 (0x00007fc5387db000) # 查看路徑 which openssl # 顯示:/usr/local/openssl/bin/openssl # 查看版本 openssl version # 顯示: OpenSSL 1.0.2a 27 Mar 2015 # 至此,openssl-1.0.2a安裝完畢。 #### 安裝zlib,步驟同上 ./configure
步驟2、安裝httpd並配置httpd.conf
tar zxvf httpd-2.2.29.tar.gz cd httpd-2.2.29 # 在執行configure之前,先執行這句(*詳見:問題及解決辦法4.4章節) export LDFLAGS=-ldl # 執行configure ./configure --prefix=/usr/local/apache --enable-so --enable-ssl=static --with-ssl=/usr/local/openssl --enable-mods-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util # 編譯和安裝 make make install
步驟3、生成ssl證書及配置https代理及反向代理
ssl證書生成過程見問題及解決辦法4.5章節,本處假定已經生成server.crt、server.key文件。則http/https的代理及反向代理配置方法:
#### 修改apache虛擬機主機配置文件 usr/local/apache/conf/extra/httpd-vhost.conf: #使用vi在文件中相應位置添加: NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot /usr/local/apache/htdocs ServerName TechRunner SSLEngine on SSLProxyEngine on SSLCertificateFile /usr/local/apache/conf/server.crt SSLCertificateKeyFile /usr/local/apache/conf/server.key ProxyRequests off ProxyPass / https://****.com/ ProxyPa***everse / https://****.com/ </VirtualHost> #### 配置apache /usr/local/apache/conf/httpd.conf: # 指定虛擬主機配置文件並將其附加到主配置文件 Include conf/extra/httpd-vhosts.conf # 指定SSL配置文件並將其附加到主配置文件 Include conf/extra/httpd-ssl.conf
最後,啓動apache
# 若本機僅安裝了一個apache服務器,則可使用如下命令關閉/啓動/重啓/查看狀態: service httpd stop/start/restart/status # 否則,可通過指定httpd程序和httpd.conf配置文件的方式啓動: /usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd.conf -k start
問題及解決辦法
4.1. 端口占用
當系統安裝了多個httpd時,若配置不當,可能存在端口(默認80)佔用。此時需要查找並關閉佔用80端口的程序。#查看佔用80端口的進程(顯示pid): netstat -pan | grep :80 #查找並kill掉佔用80端口的所有進程: lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh
4.2. 啓動多個httpd進程
使用命令:
/usr/local/apache/bin/httpd -f /路徑1/httpd.conf -k start
/usr/local/apache/bin/httpd -f /路徑2/httpd.conf -k start
這樣就可以加載不同的配置文件httpd.conf,從而啓動多個httpd(apache)進程了。4.3. 如何加載ssl_module
網上查到的內容,需要通過修改httpd.conf,啓用LoadModule ssl_module modules/mod_ssl.so,但實際上httpd-2.2.26版本httpd.conf文件中無此項,這是因爲它已經內建ssl,不需要再聲明加載此模塊。4.4. 安裝httpd時報錯:configure: error: ... Error, SSL/TLS libraries were missing or unusable
解決辦法:在configure之前,執行如下一句設置環境變量:
export LDFLAGS=-ldl
參見:http://www.metsky.com/archives/563.html4.5. 製作ssl證書
一般步驟:
# 首先,生成服務器密鑰(採用des3算法): openssl genrsa -des3 -out server.key 1024 # 或者採用默認的128位rsa算法,生成密鑰,得到server.key文件 # openssl genrsa 1024 >server.key # 其次,生成服務器證書請求文件,並按要求逐一填些相關證書信息: openssl req -new -key server.key -out server.csr # 最終,生成證書(簽證): openssl x509 -req -days 700 -in server.csr -signkey server.key -out server.cert # 其中,-days參數指明證書有效期,單位爲天。 # Signature ok,將crt和key文件放到指定的conf目錄下: cp server.crt server.key /usr/local/apache/conf
4.6. 關於單獨加載proxy_modules
httpd 安裝完成後,檢查httpd.conf文件,發現未加載proxy_module和proxy_http_module。若存在這種問題,將導致無法配置實現http/https代理與反向代理。經查詢,此問題可以通過單獨編譯和加載proxy_modules的方式來解決。
首先,進入apache解壓後源碼目錄下的modules/proxy目錄,
然後,運行如下命令自動編譯、安裝和修改httpd.conf文件,激活mod_proxy模塊:apachepath/bin/apxs -c -i -a mod_proxy.c proxy_util.c apachepath/bin/apxs -c -i -a mod_proxy_http.c proxy_util.c # apxs命令選項說明: -c 執行編譯操作 -i 安裝操作,安裝一個或多個動態共享對象到服務器的modules目錄 -a 自動增加一個LoadModule行到httpd.conf文件,以激活此模塊,若此行存在則啓用之 -A 與-a類似,但是它增加的LoadModule行前有井號前綴(#) -e 需要執行編輯操作,可與-a和-A選項配合使用, 與-i操作類似,修改httpd.conf文件,但並不安裝此模塊
執行完後,檢查httpd.conf,發現proxy_modules, proxy_http_modules已經加載。
最後,重啓apache。測試結果及總結
通過配置apache虛擬機,實現了http/https的自動轉發。
配置Apache實現url轉發
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.