1. 程式人生 > >使用Apache的Proxy模組實現對被代理網站的訪問

使用Apache的Proxy模組實現對被代理網站的訪問

這篇文章試過可以,在apache2.2.23版本的時候。
blog.51yip.com/apachenginx/873.html
http://shiningray.cn/proxypass-directive-in-apache.html

檢視apache支援的模組:

        httpd -l

    檢視apache載入的模組:

        httpd -t -D DUMP_MODULES

    使用apache擴充套件工具apxs可以為apache編譯和安裝擴充套件模組。新安裝的模組將作為動態共享物件提供給apache,因此,apache執行的平臺必須支援DSO特性,並且httpd必須內建mod_so模組。這樣才能使用mod_so提供的LoadModule指令在執行時將模組載入到apache伺服器中。

    要為已執行的apache新增mod_proxy模組,先定位到apache原始碼中modules/proxy目錄。然後使用apxs進行編譯安裝:

         /usr/local/apache2/bin/apxs -i -c -a  mod_proxy.c proxy_util.c

-c表示進行編譯,-i表示將生成的模組安裝到apache的modules目錄下,-a選項在httpd.conf中增加一條LoadModule指令以載入剛安裝的模組,或者如果此指令已存在,則啟用之。

    apxs會根據原始碼判斷模組的名稱,或者(在失敗的情況下)根據檔名推測模組名稱,可以用-n選項顯式地指定模組名稱。

    安裝成功以後將在apache的modules目錄下生成mod_proxy.so檔案,並且在httpd.conf中加入了一行

        LoadModule proxy_module modules/mod_proxy.so

    proxy只是核心模組,具體使用時還需要其它模組的支援,安裝方法類似。

        /usr/local/apache2/bin/apxs -i -c -a mod_proxy_http.c

        /usr/local/apache2/bin/apxs -i -c -a mod_proxy_ftp.c

        /usr/local/apache2/bin/apxs -i -c -a mod_proxy_connect.c

    同樣,安裝後在apache的modules目錄中生成了mod_proxy_http.so, mod_proxy_ftp.so, mod_proxy_connect.so檔案。並且在httpd.conf中添加了如下行:

        LoadModule proxy_http_module  modules/mod_proxy_http.so
        LoadModule proxy_ftp_module   modules/mod_proxy_ftp.so
        LoadModule proxy_connect_module modules/mod_proxy_connect.so

    這樣,mod_proxy模組就安裝好了,進行具體的應用配置,重啟apache就可以了。  

要求:
  執行多個tomcat,通過apache偵聽的埠進行區分。
  對於每個tomcat,配置各自需要服務的虛擬主機
  使用Apache的Proxy進行代理轉發,轉到對應的tomcat上面,重點在埠不同
  取消jk連線,減少複雜度。雖然損失了一些Apache對靜態文字的效能,但整體看還是值得的
  結果:
  tomcat的server.xml裡面配置了各自的虛擬主機,比如 www.lampok.net 和 oa.lampok.net。第一個是主域名,第二個是二級域名。tomcat埠為8080。第二個tomcat配置了一個 sales.lampok.net 用來支援銷售,埠為8081。詳細的配置檔案請參考tomcat的虛擬主機配置,這裡就不寫了。
  測試各個虛擬主機的執行是否正常,使用 http:// oa.lampok.net:8080/ 這樣的方式進行測試。
apache的 httpd.conf配置
開啟代理所需要的.so支援模組,在httpd.conf裡面,取消下面四行的註釋:
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_ftp_module modules/mod_proxy_ftp.so
 
製作各自的虛擬主機
NameVirtualHost *:80 
<VirtualHost *:80>
ServerName www.lampok.net
ProxyPass / http://www.lampok.net:8080/
ProxyPassReverse / http://www.lampok.net:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName oa.lampok.net
ProxyPass / http://oa.lampok.net:8080/
ProxyPassReverse / http://oa.lampok.net:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName sales.lampok.net
ProxyPass / http://sales.lampok.net:8081/
ProxyPassReverse / http://sales.lampok.net:8081/
</VirtualHost>
 
若需要內部埠整合
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
 
現在我們編輯第一個tomcat配置檔案,埠為預設的8080
<Engine name=”Catalina” defaultHost=www.lampok.net>
<Host name=www.lampok.net appBase==”/www/lampok.net/htdocs” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”

<Host name=www.cba.com appBase==”/www/cba.com/htdocs” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false” />
 

原始碼編譯安裝proxy-ajp模式的
# tar xvjf httpd-2.2.0.tar.bz2
# cd httpd-2.2.0

安裝apr
# cd srclib/apr
# ./configure –prefix=/server/soft/apr
# make
# make install

安裝apr-util
# cd ../apr-util/
# ./configure –prefix=/server/soft/apr-util \
    –with-apr=/server/soft/apr
# make
# make install
# cd ../../

安裝apache
# ./configure –prefix=/server/soft/apache \
    –enable-so \
    –enable-rewrite=share \
    –enable-proxy=share \
    –enable-proxy-ajp=share \
    –enable-dav=share \
    –with-apr=/server/soft/apr \
    –with-apr-util=/server/soft/apr-util/
# make
# make install
</Engine>
 
注意:網站檔案請分別放在/www/*/htdocs/ROOT目錄
 Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”   />
</Engine>
編輯第二個tomcat配置檔案,埠修改為8081
<Engine name=”Catalina” defaultHost=localhost>
<
 
注意:網站檔案放在tomcat安裝檔案目錄的預設ROOT目錄
localhost這裡可以不用修改,因為只有一個網站,我們就可以不用域名代替
 
附出錯分析:
如果編譯安裝沒有編輯代理模組的解決辦法
 
方法如下:
編譯的時候要開啟WITH_PROXY_MODULES選項,但我又不想重新安裝apache,所以使用以下步驟達到此目的。
1、重新編譯帶有proxy模組的apache,但不安裝。
進入原始碼目錄
#cd /usr/loacl/src/httpd2.2.9
#make WITH_PROXY_MODULES=yes
2. 分別編譯生成代理模組
    cd modules/proxy
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy.so proxy_util.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_ajp.so mod_proxy_ajp.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_connect.so mod_proxy_connect.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_http.so mod_proxy_http.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_ftp.so mod_proxy_ftp.c
 
這樣就編譯進了apache配置檔案
編譯過程中或者會出錯,因為許可權原因,需要給755許可權
chmod 755 /usr/local/apache/modules/*.so
 
檢視httpd.conf檔案顯示已經添加了代理模組
以下是httpd.conf的部分顯示
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module        modules/libphp5.so
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_ftp_module   modules/mod_proxy_ftp.so
#

已經新增進了apache,現在需要重新啟動apache,就可以正常配置代理方式了
#配置(prefix是安裝路徑,enable-mods-shared=all表示編譯配置所有so檔案)

./configure –prefix=/usr/local/apache –enable-mods-shared=all

 php編譯案例:

./configure –prefix=/usr/local/php5 –with-apxs2=/usr/local/apache2/bin/apxs –with-config-file-path=/usr/local/php5 –disable-debug –enable-ftp –enable-inline-optimization –enable-magic-quotes –enable-mbstring –enable-safe-mode –enable-wddx=shared –with-gd –with-gettext –with-regex=system –with-zlib –with-mcrypt –enable-sockets
單獨編譯apache可以進行這樣的操作
 
[[email protected] apache]#./configure –prefix=/usr/local/apache –enable-so –enable-mods-shared=”proxy proxy_http proxy_ftp proxy_connect headers”
 
編譯
[[email protected] apache]# make
檢查編譯後的是否有編譯出so檔案
[[email protected] apache]# cd /usr/local/apache/modules
[[email protected] modules]#]# ls
httpd.exp       mod_proxy_ajp.so       mod_proxy_connect.so mod_proxy_http.so
mod_headers.so mod_proxy_balancer.so mod_proxy_ftp.so      mod_proxy.so
 
如果存在以上檔案則說明編譯成功
安裝
[[email protected] apache]# make install
 
啟動APACHE
[[email protected] apache]# /usr/local/apache/bin/httpd -k start
測試如果輸出IT works那麼就ok了
附:
tomcat 404頁面設定方法在web.xml裡面加入
     <error-page>
              <error-code>404</error-code>
              <location>/404.jsp</location>
      </error-page>
新增404.jsp頁面檔案,重新啟動tomcat可生效

別忘記 proxy_util.c  
然後,我載入它   # /usr/local/apache/bin/apxs -c -i -a proxy_util.c
載入的時候出現報錯:
/usr/local/apache/build/libtool –silent –mode=compile gcc -prefer-pic   -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache/include  -I/usr/local/apache/include   -I/usr/local/apache/include   -c -o proxy_util.lo proxy_util.c && touch proxy_util.slo
/usr/local/apache/build/libtool –silent –mode=link gcc -o proxy_util.la  -rpath /usr/local/apache/modules -module -avoid-version    proxy_util.lo
apxs:Error: Sorry, cannot determine bootstrap symbol name.
apxs:Error: Please specify one with option `-n’.

APACHE中增加模組遇到的問題

用apxs 安裝apache mod_proxy時候出現undefined symbol: ap_proxy_lb_workers錯誤的解決方法

在用apxs安裝apache mod_proxy時候出現undefined symbol: ap_proxy_lb_workers的錯誤,原先用的是:

apxs -i -a -c mod_proxy.c
錯誤資訊:
httpd: Syntax error on line 19 of /opt/lamp/apache2/conf/httpd.conf: Cannot load /opt/lamp/apache2/modules/mod_proxy.so into server: /opt/lamp/apache2/modules/mod_proxy.so: undefined symbol: ap_proxy_lb_workers
原來需要加上proxy_util.c一起編譯:

apxs -i -a -c mod_proxy.c proxy_util.c
問題解決。因為proxy_util.c是基礎模組,所以必須先安裝。下面也是安裝方法。
先安裝基礎模組: 
# /usr/local/apache2/bin/apxs -c -i mod_proxy.c proxy_util.c 
# /usr/local/apache2/bin/apxs -i -a -n proxy mod_proxy.la 
再安裝mod_proxy_http模組 
# /usr/local/apache2/bin/apxs -c mod_proxy_http.c 
# /usr/local/apache2/bin/apxs -i -a -n proxy_http mod_proxy_http.la 

再去看httpd.conf時,已新增如下內容: 
LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 

重新啟動沒有任何報錯資訊,證明mod_proxy_http模組載入成功。
注:我在安裝proxy_http.c的時候,用的是
 /usr/local/apache2/bin/apxs -i -a -n http mod_proxy_http.la這樣的一個命令,所以在配置檔案中
LoadModule http_module modules/mod_proxy_http.so 為這樣一條語句,
重啟的提示為
[[email protected] proxy]# /usr/local/apache2/bin/apachectl configtest
httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `http_module' in file /usr/local/apache2/modules/mod_proxy_http.so: /usr/local/apache2/modules/mod_proxy_http.so: undefined symbol: http_module
至於我為什麼要/usr/local/apache2/bin/apxs -i -a -n http 這樣寫,
而不/usr/local/apache2/bin/apxs -i -a -n proxy_http mod_proxy_http.la 這樣寫(注意我說的是標紅的地方)
是因為我受到前面在加模組時看到的文章也出現過這樣的提示,是因為我的不符合語法。所以才那樣些,現在看來http的必須需要安裝proxy_http 
這樣些至於原因等我找到答案後在做解釋。(我懷疑因為proxy_http 是proxy的一個子模組,所以需要這樣寫的,如果直接的一個模組就不需要—了)
配apache mod_cache 後 httpd -k start
apache出現以下資訊:
Cannot load /usr/local/apache/modules/mod_cache.so into server: /usr/local/apache/modules/mod_cache.so: undefined symbol: cache_generate_key_default
正規解決方案:
modules/cache下面有很多的.c檔案,大致用途如:
mod_cache.c 編譯得到mod_cache.so 主要用來控制整個apache的cache功能。
mod_file_cache.c,mod_mem_cache.c,mod_disk_cache.c這個三個檔案編譯後得到各自的cache支援模組。
mod_cache.c還需要其他的程式來進行工作,包括cache_*.c這些檔案。因此apxs動態載入一個模組的時候,需要把這些檔案和mod_cache.c 一起編譯:perl /usr/local/apache2/bin/apxs -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
上述是我遇到問題,照著上面作者的做法做後問題解決。
在這裡我要對我上面的文章中標金黃的部分做一下解釋。
在我仔細看了配置檔案,詳細的做了對比,
LoadModule logio_module  modules/mod_logio.so
LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule cache_module       modules/mod_cache.so
LoadModule mem_cache_module         modules/mod_mem_cache.so
LoadModule disk_cache_module        modules/mod_disk_cache.so
注意到這些modules/mod_proxy.so、modules/mod_proxy_http.so模組和前面的寫法了沒,proxy_module、proxy_http_module這些寫法都是根據modules/mod_proxy.so、modules/mod_proxy_http.so這來的,如果這是mod_proxy.so,則在前面些proxy_module,如果是mod_proxy_http.so則在前面寫proxy_http_module。所以我在寫mod_mem_cache.so這個的時候,不用想就寫了LoadModule mem_cache_module ,這樣在檢查配置檔案的時候也沒有提示錯誤,直接提示ok。以後寫的時候,就可以這樣寫了,我認為是不會有錯誤的
Posted by 王 風達






最近有個需求,原本一個動態的站點,有些頁面要靜態化。但是靜態化的檔案又不希望和動態程式放在一起。並且URL也不希望發生變化,於是考慮使用Rewrite來實現。下面是一些使用的心得。 1、使用Rewrite規則來實現 Apache 的 Rewrite 是一個非常強大的工具,他的手冊提供了豐富的例項可供我們學習,利用下面這個規則,可以將對www.a.com 這個網站的特定請求都定向到 www.b.com 伺服器上。 ServerName www.a.com RewriteEngine On RewriteRule ^/a/(.*) http://www.b.com [P] 2、使用反向代理 ProxyRequests Off ProxyPass       /a      http://house.baidu.com/bj ProxyPassReverse /a     http://house.baidu.com/bj ProxyPassReverseCookieDomain data.house.sina.com.cn l.house.sina.com.cn ProxyPassReverseCookiePath / /a/ ProxyErrorOverride On 這兩種方法都可以實現用 http://www.a.com/a/abc 的形式來訪問實際上是 http://www.b.com/abc 的內容 但是,如果使用者輸入的URL在 www.b.com 中並不存在,www.b.com 發生轉向時,會顯示 www.b.com 的url 如果 www.b.com 上全是靜態檔案,檔案無法訪問到的時候,會導向404頁面,預設導向被代理伺服器的404。 但是使用 ProxyErrorOverride On 命令後,可以使用代理伺服器的404頁面。 訪問的目標檔案中,對於JS和CSS的連結。如果採用了相對連結,則會預設去 www.a.com 上請求相應的檔案。 使用代理模式時,頁面中對於Cookie的操作可能會有問題。以l.house.x.com.cn代理到data.house.x.com.cn做了實驗, bj/search/0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-1.html 頁面中的瀏覽歷史出現了問題。 該指令允許你將一個遠端伺服器對映到本地伺服器的URL空間中,此時本地伺服器並不充當代理角色,而是充當遠端伺服器的一個映象。 ProxyPass 支援構建一個連線池來提高伺服器的服務效能。配置形式為在 URL 後面追加引數,如下: ProxyPass /example http://backend.example.com smax=5 max=20 ttl=120 retry=300 其中 smax 表示Apache根據需要建立的連線數量。這些數量會在 ttl 設定到期前被 Apache 關閉。 max 表示 允許與被代理伺服器連結的最大數量。預設的連結數量,是當前MPM中配置的最大連結數。在Prefork 模式中,這個數值永遠是1. 在 Woker 模式中,連線數量由子執行緒來控制(ThreadsPerChild)。Apache建立的連線數量不會超過配置的數目。 ttl 表示以秒為單位,超過 smax 允許的非活動連結的存活時間。Apache會關閉超過 ttl 設定的非活動連結。 retry 表示連線池中為每次請求進行重試的最大時間限制,單位為秒。如果與被代理伺服器之間的連接出現了問題,Apache在這個時間到期前,不會向客戶端返回錯誤。 可以利用這個時間,對被代理伺服器進行維護或重啟等操作。 對於被代理伺服器返回的重定向資訊,可以使用 ProxyPassReverse 對其中的URL進行修改。只有明確指定的應答頭會被重寫,其它應答頭保持不變,並且HTML頁面中的URL也不會被修改。如果被代理的內容包含絕對URL引用,那麼將會繞過代理。有一個第三方模組可以檢查並改寫HTML中的URL引用,該模組就是Nick Kew編寫的mod_proxy_html

綜合起來,要想實現這個目的,就必須使用 apache 的反向代理模組。

本文轉載至鞋

http://crazoy.iteye.com/blog/1671715

 系統採用Apache http server+Tomcat部署,最近總是出現登陸不上的問題,開始每天總是偶爾有那麼幾分鐘怎麼也登不上去,由於供應商在處理我也沒怎麼在意。可最近這幾天開始經常性出現,沒辦法,動手解決一下。記錄一下經過。
    系統部署在統一伺服器上,應用部署了三個tomcat server,jvmRoute分別為t1,t2,t3,採用AJP/1.3協議,埠分別配置為9013,9023,9033,tomcat的http埠分別為:8013,8023,8033,maxThreads 設為1000,httpd採用ProxyPass做了負載均衡的對映,資料庫為Oracle 12g。
    開始用
        ps -ef | grep httpd | wc -l
    查看了一下httpd的程序數,工作正常時間低於100,問題不大。
    
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    檢視tcp連線統計:
        TIME_WAIT 410
        FIN_WAIT2 2
        ESTABLISHED 1585
    看上去好像是連線用光了。
    看apache error_log日誌:
[Tue Sep 04 18:39:55 2012] [error] (104)Connection reset by peer: ajp_ilink_receive() can't receive header
[Tue Sep 04 18:39:55 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Tue Sep 04 18:39:55 2012] [error] (120006)APR does not understand this error code: proxy: read response failed from (null) ($IP)

    看來是proxy得不到響應,於是上度娘,沒什麼結果。公司的網路google不給力,找半天沒結果。
    看看天色漸晚,已經19:00多了,心下著急,還想著回家吃飯。
    決定跟蹤一下埠:
     netstat -apn | grep "*:80"
    已經下班了,數目為個位數,系統基本沒人用。
    跟蹤9013,9023,9033
     netstat -apn | grep 9013
     netstat -apn | grep 9023
     netstat -apn | grep 9033
    竟然都是滿的。       
    而客戶端通過apache仍然連不上,但是直接連線tomcat的8013,8023,8033埠是可用的。
    至此可以斷定是apache連線tomcat出了問題,但什麼原因造成的,不知道。為了趕時間,就果斷restart了tomcat,世界清淨了。

    晚上回家google了一下,搜到[2],apache bug 38227, 似乎從httpd2.2.2就已經修復了這個bug。
    早上來到公司,檢查了一下版本,2.2.22,真夠2,問題還在。看了apache日誌,重啟後,一切都很正常,看連線數,使用者也不多,3個jvmRoute只有一個9033埠在被佔用。
    開啟日誌開始觀察:
    apache httpd:
        tail -f error_log
    apche tomcat:
        tail -f localhost.2012-09-05.log

    過了一會問題出現了,httpd報錯
[Wed Sep 05 09:42:14 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Wed Sep 05 09:42:14 2012] [error] (70007)The timeout specified has expired: proxy: read response failed from 172.16.5.68:18033 (172.16.5.68)
[Wed Sep 05 09:42:28 2012] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header

    追蹤到tomcat:

2012-9-5 9:47:06 org.apache.catalina.core.StandardWrapperValve invoke
嚴重: Servlet.service() for servlet service threw exception
com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from [email protected] -- timeout at awaitAvailable()
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1317)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)

    度娘上搜了一下,找到了[3],心下吸了口涼氣。看來是資料庫死鎖導致了tomcat連線被佔,時間長了就沒法應對ajp的請求,導致系統當掉。
    調了一下資料來源的配置,以觀後效了。
    實在不行準備用終極大招,定時輪流restart tomcat server了。

參考:
[1] http://www.2cto.com/os/201205/130110.html
[2] https://issues.apache.org/bugzilla/show_bug.cgi?id=38227
[3] http://aijuans.iteye.com/blog/1478466

ERROR: date.timezone not set in php.ini. Please contact your hosting company to set the timezone in the server PHP configuration before continuing.

今天安裝網站碰到一個問題.說是時區的問題.

網上說改php.ini的date.timezone=PRC

find / -iname php.ini -print

用命名查找出php.ini的位置

用命名查詢timezone

grep  timezone  /usr/local/Zend/etc/php.ini -r

用命名修改,修改之前記得備份cp /home/field/etc/php5/php.ini /home/field/etc/php5/php.ini.back

sed -i "s/;date.timezone=/date.timezone = PRC/g" /home/field/etc/php5/php.ini

然後重啟apache

問題解決了,

Linux下批量替換多個檔案中的字串的簡單方法。用sed命令可以批量替換多個檔案中的字串。
用sed命令可以批量替換多個檔案中的字串。
sed -i "s/原字串/新字串/g" `grep 原字串 -rl 所在目錄`(千萬注意這個符號,是最左上角那個符號不是單引號)
例如:我要把/test下所有包含abc的檔案中的abc替換為def,執行命令:
sed -i "s/abc/def/g" `grep abc -rl /test`
這是目前linux最簡單的批量替換字串命令了!
具體格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
例項程式碼:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
方法2:
在日程的開發過程中,可能大家會遇到將某個變數名修改為另一個變數名的情況,如果這個變數是一個區域性變數的話,vi足以勝任,但是如果是某個全域性變數的話,並且在很多檔案中進行了使用,這個時候使用vi就是一個不明智的選擇。這裡給出一個簡單的shell命令,可以一次性將所有檔案中的指定字串進行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
替換字元:sed -i "s/old/new/g" /test
查詢包含指定字元的檔名:grep aaa –ul  /test

http://hi.baidu.com/liu731/item/cd5c31e215a10bacc00d7571

http://www.cnblogs.com/txw1958/archive/2012/07/26/linux-pmap.html

相關推薦

使用Apache的Proxy模組實現代理網站訪問

這篇文章試過可以,在apache2.2.23版本的時候。blog.51yip.com/apachenginx/873.html http://shiningray.cn/proxypass-directive-in-apache.html 檢視apache支援的模組:

Mac與Linux 實現nginx的安裝 與 訪問虛擬機器裡的nginx 實現的反向代理網站及檔案目錄

一             現在主要實現的是 nginx   反向代理功能,      首先 , 先在虛擬機器裡的系統裝 nginx  Note:我用的是Cent

sequelize 應用hook 實現分表的訪問

https://github.com/cclient/sequelize-shardinghttps://www.npmjs.com/package/sequelize-sharding 實際有效的程式碼就幾行,主要時間都花在這篇部落格和readme.md上 ———————————————— 公司裡有n

使用JWT來實現API的授權訪問

目錄 什麼是JWT JWT(JSON Web Token)是一個開放標準(RFC 7519),它定義了一種緊湊且獨立的方式,可以在各個系統之間用JSON作為物件安全地傳輸資訊,並且可以保證所傳輸的資訊不會被篡改。 JWT通常有兩種應用場景: 授權。這是最常見的JWT使用場景。一旦使用者登入,每個後續請求

在windows端用putty實現Ubuntu的遠端訪問

一、在Ubuntu上需要做的工作。 ps:ping一下遠端控制的電腦的IP,看是否成功。不會自己停止需要用Ctrl+D停止。 1.在Ubuntu上安裝ssh。($:表示在shell輸入命令) $:sudo apg-get install openssh-server 2./

Node.js使用fs模組實現本地圖片下載

使用node.js自帶的http模組與fs模組搭建了一個可以下載圖片的伺服器。專案的github:https://github.com/junhaogz215/getImage效果如下:執行伺服器之後在位址列輸入http://localhost:3000可跳轉到index.h

Spring中AOP:Proxy動態代理淺解析(代理象必須實現接口)

ima throwable light public RR eth 對象 處理 span 小貼士:以下內容純屬個人觀點,如有不當請指出並諒解 import java.lang.reflect.Proxy; Proxy可以動態代理一個對象 寫一個代理工廠類ProxyFac

網絡安全熱門話題——如何(已經/正在)入侵網站進行檢測和防範

網絡 安全 熱門 九月安全專題討論:網絡安全熱門話題——如何對被(已經/正在)入侵網站進行檢測和防範擬進行以下技術(可以自定義相關技術)討論和技術研究,歡迎大家參與:(1)網站入侵日誌文件分析(2)抓包分析入侵行為並修補程序漏洞(3)從規則進行安全防護(4)在線監測webshell等惡意行為(5)

路徑“xxxxx”的訪問拒絕。

serial 文件夾 reat summary 我們 在服務器 方法 directory ring 對路徑“D:\\Weixin\\WechatWeb\\wapMxApi\\JsonFile\\WaterPrice.json”的訪問被拒絕。 本地vs2013編譯調試

C# 串口編程 端口的訪問拒絕

http nload pos .cn sun href 窗口 nbsp bsp 感謝Sunny秋刀魚。https://www.cnblogs.com/527289276qq/p/5595798.html 在頁面或者窗口Unloaded事件中關閉串口即可。C# 串口編程

通過jQuery和C#分別實現.NET Core Web Api的訪問以及文件上傳

補充 param 詳細 ace lin col mage exp n) 準備工作:    建立.NET Core Web Api項目    新建一個用於Api請求的UserInfo類 public class UserInfo { publ

利用主機埠轉發實現QEMU虛擬機器的訪問

作  者:郝慶豐 領 域:QEMU   適宜讀者:QEMU及虛擬化相關開發人員 背景知識:虛擬化基礎知識,QEMU基礎知識 正文: 利用主機埠轉發實現對QEMU虛擬機器的訪問 命令 選項:hostfwd 詳細描述:hostfwd=[t

requests模組基本使用、代理ip、session訪問

python原生基於網路請求的模組,比urllib更實用 相比urllib優勢 自動處理編碼 自動處理post請求引數、並轉碼 簡化cookie和代理操作 安裝使用 pip install requests 代理IP

Squid實現正向代理訪問控制--技術流ken

  Squid及正向代理簡介 Squid cache(簡稱為Squid)是一個流行的自由軟體,它符合GNU通用公共許可證。Squid作為網頁伺服器的前置cache伺服器,可以代理使用者向web伺服器請求資料並進行快取,也可以用在區域網中,使區域網使用者通過代理上網。Squid主要設計用於在Lin

nodejs 使用nodejs-websocket模組實現點實時通訊

1、首先安裝好nodejs-websocket npm install nodejs-websocket --save -g 2、編寫服務端 var ws = require("nodejs-websocket") var AllUserData = new Array(

通過Ocilib實現Oracle資料庫訪問示例[Unix][Win][C/C++]

目錄 說明 示例 建表 說明 本部落格每天都有乾貨更新,歡迎關注收藏,轉載請註明出名。更多關於Linux的技術學習與交流可加QQ群:927421758。 示例 以下展示各種使用示例。 基本使用方法示例 編碼  //1.c    #i

springboot 實現bean動態代理原始碼分析

在springboot專案中,如果在類上加有@Component、@service等註解時,spring會為該類生成一個jdk或cglib的動態代理,並快取到beanFactory中,當其他類需要注入該類時,實際得到的是該類的代理,本文主要將從原始碼的角度介紹springbo

利用Apache的轉發模組實現反向代理伺服器

問題又來公司的LAMP伺服器使用Apache的VirtualHost功能部署了多個擁有獨立域名的網站。httpd.conf配置檔案部分如下:# 省略本文無關部分 Listen 80 # www.xxx.com <VirtualHost *> Server

四、利用SeimiCrawler爬蟲框架和selenium自動化測試工具分別實現網站的爬取

一、案例背景   這裡為了簡化操作,我們以爬取 http://www.fzdm.com/ 網頁的熱門漫畫為例。 二、對比   SeimiCrawler爬蟲框架 爬取速度較快,但是不穩定(表現線上程一多,易崩潰);selenium自動化測試工具 爬取速度略慢,但是穩定。 三、方式一:S

使用 Nginx ASP.NETCore網站 或 Docker 等進行反向代理

server{} linux中 _for 演示 支持 docke 端口 技術 只需要 1,Nginx 的 配置文件 Nginx 可以配置反向代理、負載均勻等, 其默認配置文件名為 nginx.conf 。 一般存放於 /你的安裝目錄/nginx/conf 下 Nginx