在以前記錄的隨筆中,只是介紹了怎麼在apache2中使用proxy模塊,後來查到了一些資料,能夠經過下面網址查看配置塊的詳細參數信息php
http://man.ddvip.com/soft/apache2.0/sections.htmlhtml
在服務器上面部署node.js應用的時候我遇到了下面的問題:node
node.js應用監聽的是3000端口,使用反向代理能夠將80端口的全部請求代理到http://127.0.0.1:3000/去web
可是當對node.js作維護的時候,中止監聽3000端口是一個很好的選擇,可是若是這個時候有人訪問你的站點,該怎麼辦呢?apache
這個問題是前一段時間遇到的,知道昨天才真正下決心把它解決掉。服務器
ok,我開始尋找解決方式,觀察中止監聽3000端口時服務器返回的錯誤代碼是503,好了,有思路了,直接重定向503頁面就能夠了。ide
因而在Virtualhost *:80中添加了以下代碼,是的服務器訪問出現503錯誤的時候,跳轉到專有界面測試
<VirtualHost *:80> ServerAdmin webmaster@dummy-host2.localhost DocumentRoot "E:/phpworkspace/myblog" ServerName www.myblog.lc ServerAlias www.myblog.lc ErrorLog "logs/dummy-host2.localhost-error.log" CustomLog "logs/dummy-host2.localhost-access.log" common <Directory "E:/phpworkspace/myblog"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from All </Directory> #ProxyPass /article http://127.0.0.1:3000/article #ProxyPassReverse /article http://127.0.0.1:3000/article ErrorDocument 503 /index.html ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ </VirtualHost>
本覺得問題解決了,進行測試,服務器端中止監聽3000端口,訪問主機地址,結果出現的仍是503錯誤spa
因而又去查找資料,仔細看了反向代理的介紹以後,恍然大悟,原來上面設置的503 都會被轉到127.0.0.1:3000/index.html代理
但是我原來的應用下面就沒有index.html文件
因而就想 可否在node.js監聽的時候去訪問3000端口,若是發現沒有監聽也就是出現503錯誤的時候訪問的是apache默認的目錄結構下的頁面呢
因而終於找準了地方 在apache的默認www下建立error文件夾 在error裏面建立一個index.html文件 用來顯示503錯誤
因而上述配置文件信息修改成下面的內容
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.localhost
DocumentRoot "E:/phpworkspace/myblog"
ServerName www.myblog.lc
ServerAlias www.myblog.lc
ErrorLog "logs/dummy-host2.localhost-error.log"
CustomLog "logs/dummy-host2.localhost-access.log" common
<Directory "E:/phpworkspace/myblog">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from All
</Directory>
#ProxyPass /article http://127.0.0.1:3000/article
#ProxyPassReverse /article http://127.0.0.1:3000/article
ErrorDocument 503 /error/index.html
ProxyPass /error/ ! 對error目錄不使用代理
ProxyPass /error/e !
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
ok,問題解決,這樣在服務器端沒有監聽3000端口的時候,服務器端會返回apache默認結構下的/error/index.html頁面