亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    Apache實現(xiàn)反向代理詳解

    實驗目的

    通過Apache實現(xiàn)反向代理的功能,類似Nginx反向代理和HAProxy反向代理。

    環(huán)境準備

    邏輯架構如下

    前端是apche服務器,監(jiān)聽80端口,后端有兩臺web服務器,分別是node1和node2

    Apache實現(xiàn)反向代理詳解

    準備兩臺機器,node1和node2。需要安裝的服務如下,由于實驗環(huán)境資源有限,把反向代理也安裝在node1上

    Apache實現(xiàn)反向代理詳解

    實驗系統(tǒng)版本

    [root@linux-node1 ~]# cat /etc/RedHat-release
    CentOS Linux release 7.3.1611 (Core)
    [root@linux-node1 ~]# uname -rm
    3.10.0-514.el7.x86_64 x86_64
    [root@linux-node1 ~]#

    配置兩臺節(jié)點做web服務器,監(jiān)聽8080端口

    關閉firewalld和selinux,主機名改名。按上面表格更改。這里就不寫具體執(zhí)行步驟了 

    兩臺機器安裝epel7的阿里云的源,安裝一些依賴包和常用工具包,安裝httpd,更改默認監(jiān)聽端口為8080

    rpm -ivh  http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
    yum install -y gcc glibc gcc-c++  make screen tree lrzsz
    yum install httpd -y
    sed -i ‘s#Listen 80#Listen 8080#g’ /etc/httpd/conf/httpd.conf
    systemctl restart httpd.service
    netstat -lntp | grep 8080

    分別設置首頁文件。用以區(qū)分不同的機器

    echo “linux-node2.example.com” > /var/www/html/index.html
    echo “linux-node1.example.com” > /var/www/html/index.html

     
    最終達到如下效果

    [root@linux-node2 ~]# curl http://10.0.1.106:8080/
    linux-node2.example.com
    [root@linux-node2 ~]# 
    [root@linux-node1 ~]# curl http://10.0.1.105:8080/
    linux-node1.example.com
    [root@linux-node1 ~]# 

    node1上配置apache做反向代理

    編譯安裝apache軟件包

    node1同時做反向代理配置,執(zhí)行如下命令,把源碼包編譯安裝在/usr/local目錄下,最后做個軟鏈接。

    看到需要安裝apr和pcre相關的包

    簡要來說apr是屏蔽底層操作系統(tǒng)細節(jié)用的。pcre正則匹配用的。openssl支持加密協(xié)議

    rpm -ivh  http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
    yum install -y gcc glibc gcc-c++  make screen tree lrzsz
    yum install -y apr-devel apr-util-devel pcre-devel openssl-devel
    cd /usr/local/src
    wget http://archive.apache.org/dist/httpd/httpd-2.4.18.tar.gz
    tar xfz httpd-2.4.18.tar.gz
    cd httpd-2.4.18
    ./configure –prefix=/usr/local/httpd-2.4.18 –enable-so –enable-modules=”all”
    make && make install
    echo $?
    ln -s /usr/local/httpd-2.4.18/ /usr/local/httpd

    APR(Apache portable Run-time libraries,Apache可移植運行庫),主要為上層的應用程序提供一個可以跨越多操作系統(tǒng)平臺使用的底層支持接口庫。
    在早期 的Apache版本中,應用程序本身必須能夠處理各種具體操作系統(tǒng)平臺的細節(jié),并針對不同的平臺調(diào)用不同的處理函數(shù)。

    那安裝Apache的時候為什么必須安裝Apr呢?
    在早期的Apache版本中,應用程序本身必須能夠處理各種具體操作系統(tǒng)平臺的細節(jié),并針對不同的平臺調(diào)用不同的處理函數(shù)。
    隨著Apache的進一步開發(fā),Apache組織決定將這些通用的函數(shù)獨立出來并發(fā)展成為一個新的項目。這樣,APR的開發(fā)就從Apache中獨立出來,Apache僅僅是使用APR而已。
    一般情況下,APR開發(fā)包很容易理解為僅僅是一個開發(fā)包,不過事實上并不是。
    目前,完整的APR實際上包含了三個開發(fā)包:apr、apr-util以及apr-iconv,每一個開發(fā)包分別獨立開發(fā),并擁有自己的版本。
    apr中包含了一些通用的開發(fā)組件,包括mmap,DSO等等
    apr-util該目錄中也是包含了一些常用的開發(fā)組件。這些組件與apr目錄下的相比,它們與apache的關系更加密切一些。比如存儲段和存儲段組,加密等等。
    apr-iconv包中的文件主要用于實現(xiàn)iconv編碼。目前的大部分編碼轉換過程都是與本地編碼相關的。在進行轉換之前必須能夠正確地設置本地編碼。
    因此假如兩個非本地編碼A和B需要轉換,則轉換過程大致為A->Local以及Local->B或者B->Local以及Local->A。

    node1上apache編譯安裝之后,檢查語法以及啟動服務 

    [root@linux-node1 httpd-2.4.18]# /usr/local/httpd/bin/apachectl -t
    Syntax OK
    [root@linux-node1 httpd-2.4.18]# /usr/local/httpd/bin/apachectl -k start
    [root@linux-node1 httpd-2.4.18]#

    接下來配置反向代理模塊

    打開apache官網(wǎng)幫助

    http://httpd.apache.org/docs/2.4/
    找到左邊“模塊”
     
    Apache實現(xiàn)反向代理詳解 

     點擊進去,找到如下mod_proxy,就是這個模塊,讓apache可以做反向代理

    Apache實現(xiàn)反向代理詳解

     

     接下配準備配置,先查看下配置文件的目錄??吹接袀€extra目錄,類似nginx的extra目錄,可以把一些定制化的配置放在extra目錄里,然后在主配置文件httpd.conf把它include進來

    這樣降低配置文件之間的耦合性,不僅方便管理,而且配置文件個別錯誤,不影響其余配置。這里就準備新建一個反向代理相關的配置文件,放在extra目錄下

    先從主配置文件拷貝一些模板性的配置

    Apache實現(xiàn)反向代理詳解

    設置主配置文件ServerName

    [root@linux-node1 conf]# pwd
    /usr/local/httpd/conf
    [root@linux-node1 conf]# vim httpd.conf
    [root@linux-node1 conf]# grep ServerName httpd.conf
    # ServerName gives the name and port that the server uses to identify itself.
    ServerName linux-node1.example.com:80
    [root@linux-node1 conf]#

    apache和nginx一樣,默認會Include一些配置文件,下面的proxy-html.conf就是默認加載的配置文件。我沒做任何操作,安裝之后系統(tǒng)默認的

    Apache實現(xiàn)反向代理詳解

    查看它默認加載的模塊
    Apache實現(xiàn)反向代理詳解 
     
    找到負載均衡的部分,很多proxy開頭的部分。復制相關參數(shù)

    Apache實現(xiàn)反向代理詳解 

    在extra目錄下新建httpd-proxy.conf文件。文件名沒要求,可以自定義。但是最好能通過配置文件知道做什么用的

    把上面主配置文件的反向代理和負載均衡相關的配置復制進來。

    同時配置后端節(jié)點。下面的/demo 是自定義的??梢噪S便寫,比如寫成/test123

    [root@linux-node1 extra]# pwd
    /usr/local/httpd/conf/extra
    [root@linux-node1 extra]# cat httpd-proxy.conf
    #www.linux-node1.example.com 
    #proxy demo
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
    LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
    LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
    ProxyRequests Off
    <Proxy balancer://mycluster>
    BalancerMember http://10.0.1.105:8080
    BalancerMember http://10.0.1.106:8080
    </Proxy>
    ProxyPass /demo balancer://mycluster
    ProxyPassReverse /demo balancer://mycluster
    [root@linux-node1 extra]#
     

    在主配置文件把這個配置文件中Include進來

    Apache實現(xiàn)反向代理詳解

    檢查語法,沒發(fā)現(xiàn)語法錯誤

    [root@linux-node1 extra]# /usr/local/httpd/bin/apachectl -t
    Syntax OK
    [root@linux-node1 extra]#
      

    啟動時沒啟動成功
    [root@linux-node1 extra]# /usr/local/httpd/bin/apachectl -k restart
    [root@linux-node1 extra]# netstat -lntp | grep 80
    [root@linux-node1 extra]# /usr/local/httpd/bin/apachectl -t
    Syntax OK
    [root@linux-node1 extra]# /usr/local/httpd/bin/apachectl -k restart
    httpd not running, trying to start
    [root@linux-node1 extra]# netstat -lntp | grep 80
    [root@linux-node1 extra]#
     
    看日志提示,是缺少模塊
     
    [root@linux-node1 logs]# pwd
    /usr/local/httpd/logs
    [root@linux-node1 logs]#
     
    [root@linux-node1 logs]# tail -f error_log
    [Sun Feb 26 23:00:09.288503 2017] [mpm_worker:notice] [pid 19856:tid 139866031015808] AH00292: Apache/2.4.18 (Unix) configured — resuming normal operations
    [Sun Feb 26 23:00:09.288632 2017] [core:notice] [pid 19856:tid 139866031015808] AH00094: Command line: ‘/usr/local/httpd-2.4.18/bin/httpd’
    [Sun Feb 26 23:48:31.206384 2017] [mpm_worker:notice] [pid 19856:tid 139866031015808] AH00298: SIGHUP received.  Attempting to restart
    [Sun Feb 26 23:48:31.210297 2017] [proxy_balancer:emerg] [pid 19856:tid 139866031015808] AH01177: Failed to lookup provider ‘shm’ for ‘slotmem’: is mod_slotmem_shm loaded??
    [Sun Feb 26 23:48:31.210351 2017] [:emerg] [pid 19856:tid 139866031015808] AH00020: Configuration Failed, exiting
    [Sun Feb 26 23:50:12.882611 2017] [proxy_balancer:emerg] [pid 20021:tid 139920264771456] AH01177: Failed to lookup provider ‘shm’ for ‘slotmem’: is mod_slotmem_shm loaded??
    [Sun Feb 26 23:50:12.882703 2017] [:emerg] [pid 20021:tid 139920264771456] AH00020: Configuration Failed, exiting

     百度下錯誤

    http://blog.csdn.net/snihcel/article/details/38844667
    如果你遇到了服務無法啟動的情況,也不報錯的,查看logs下的日志,首次安裝報錯如下:
    AH01177: Failed to lookup provider ‘shm’ for ‘slotmem’: is mod_slotmem_shm loaded??
    我想日志已經(jīng)說的很清楚了,這里編譯安裝后,配置文件conf/httpd.conf沒有開啟mod_slotmem_shm模塊,編輯該文件,放開
    LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
     
    在httpd-proxy.conf配置文件中添加這一行
     
    [root@linux-node1 extra]# cat httpd-proxy.conf
    #www.linux-node1.example.com 
    #proxy demo
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
    LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
    LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
    LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
    ProxyRequests Off
    <Proxy balancer://mycluster>
    BalancerMember http://192.168.1.105:8080
    BalancerMember http://192.168.1.106:8080
    </Proxy>
    ProxyPass /demo balancer://mycluster
    ProxyPassReverse /demo balancer://mycluster
    [root@linux-node1 extra]#
     
    再次啟動,成功
     
    [root@linux-node1 logs]# /usr/local/httpd/bin/apachectl -k start
    [root@linux-node1 logs]# netstat -lntp | grep 80
    tcp6      0      0 :::80                  :::*                    LISTEN      20034/httpd     
    [root@linux-node1 logs]#

    瀏覽器訪問,測試成功

    現(xiàn)在是輪詢算法。
    Apache實現(xiàn)反向代理詳解
    Apache實現(xiàn)反向代理詳解
     
    修改配置文件,在最后打開管理功能
     
    [root@linux-node1 extra]# cat httpd-proxy.conf
    #www.linux-node1.example.com 
    #proxy demo
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
    LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
    LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
    LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
    ProxyRequests Off
    <Proxy balancer://mycluster>
    BalancerMember http://10.0.1.105:8080
    BalancerMember http://10.0.1.106:8080
    </Proxy>
    ProxyPass /demo balancer://mycluster
    ProxyPassReverse /demo balancer://mycluster
    <Location /manager>
        SetHandler balancer-manager
        Order Deny,Allow
        Allow from all
    </Location>
    [root@linux-node1 extra]#

    優(yōu)雅重啟

     
    [root@linux-node1 ~]# /usr/local/httpd/bin/apachectl -k graceful
    [root@linux-node1 ~]#

    Method看到默認的方法是基于requests
    生產(chǎn)的配置需要設置權限,不要對外開放,可以允許內(nèi)網(wǎng)一個網(wǎng)段訪問。
    權限設置和apache的一樣

    Apache實現(xiàn)反向代理詳解

    點開左邊超鏈接之后可以設置權重

    Apache實現(xiàn)反向代理詳解

    反向代理配置虛擬主機 

    模擬用戶真實訪問環(huán)境,用戶是通過域名訪問的,而不是IP,這里開始配置虛擬主機
     
    extra默認有一個配置文件,httpd-vhosts.conf可以復制部分當模板
     
    [root@linux-node1 htdocs]# cd /usr/local/httpd/conf/extra/
    [root@linux-node1 extra]# ll
    總用量 72
    -rw-r–r– 1 root root  2891 2月  26 22:42 httpd-autoindex.conf
    -rw-r–r– 1 root root  1842 2月  26 22:42 httpd-dav.conf
    -rw-r–r– 1 root root  2942 2月  26 22:42 httpd-default.conf
    -rw-r–r– 1 root root  1119 2月  26 22:42 httpd-info.conf
    -rw-r–r– 1 root root  5078 2月  26 22:42 httpd-languages.conf
    -rw-r–r– 1 root root  1035 2月  26 22:42 httpd-manual.conf
    -rw-r–r– 1 root root  4444 2月  26 22:42 httpd-mpm.conf
    -rw-r–r– 1 root root  2237 2月  26 22:42 httpd-multilang-errordoc.conf
    -rw-r–r– 1 root root  858 2月  27 00:14 httpd-proxy.conf
    -rw-r–r– 1 root root 13464 2月  26 22:42 httpd-ssl.conf
    -rw-r–r– 1 root root  694 2月  26 22:42 httpd-userdir.conf
    -rw-r–r– 1 root root  1477 2月  26 22:42 httpd-vhosts.conf
    -rw-r–r– 1 root root  3161 2月  26 22:42 proxy-html.conf
    [root@linux-node1 extra]#

     
    可以復制下面文件的配置
     

    Apache實現(xiàn)反向代理詳解 
    把原先httpd-proxy.conf配置文件里2行ProxyPass引用的放在虛擬主機里
     
    <VirtualHost *:80>
        ServerAdmin webmaster@nmap.example.com
        DocumentRoot “/opt”
        ServerName www.apache-nmap.com
        ServerAlias apache-nmap.com
        ErrorLog “logs/nmap-error_log”
        CustomLog “logs/nmap-access_log” common
        ProxyPass / balancer://mycluster
        ProxyPassReverse / balancer://mycluster
    </VirtualHost> 

    配置截圖如下

    Apache實現(xiàn)反向代理詳解

     
    檢查語法,重新加載
     
    [root@linux-node1 extra]# /usr/local/httpd/bin/apachectl -t
    Syntax OK
    [root@linux-node1 extra]# /usr/local/httpd/bin/apachectl -k graceful
    [root@linux-node1 extra]#
     
    window的hosts文件添加域名解析
     
    10.0.1.105  www.apache-nmap.com  apache-nmap.com
     
    通過域名訪問成功
    Apache實現(xiàn)反向代理詳解
    Apache實現(xiàn)反向代理詳解
     
     
    還可以設置權重等一些參數(shù)

    Apache實現(xiàn)反向代理詳解

    apache做反向代理生產(chǎn)并不建議,因為性能不高。配置麻煩

    關于IO這塊
    apache使用select模式,性能不高
    nginx使用epel模型,性能高
    varish和haproxy都是使用epel模型的,性能高

    可能一些特殊場景會用到它做反向代理:可能某公司一些web服務器必須和apache反向代理結合,其余反向代理,比如nginx和haproxy無法使用。不得不用apache做反向代理了。

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號