1. 程式人生 > 實用技巧 >Java 之GC常用命令

Java 之GC常用命令

一、代理

  在Java設計模式中,代理模式是這樣定義的:給某個物件提供一個代理物件,並由代理物件控制原物件的引用。

  可能大家不太明白這句話,再舉一個現實生活中的例子:比如我們要買一套二手房,雖然我們可以自己去找房源,但是這太花費時間精力了,而且房屋質量檢測以及房屋過戶等一系列手續也都得我們去辦,再說現在這個社會,等我們找到房源,說不定房子都已經漲價了,那麼怎麼辦呢?最簡單快捷的方法就是找二手房中介公司(為什麼?別人那裡房源多啊),於是我們就委託中介公司來給我們找合適的房子,以及後續的質量檢測過戶等操作,我們只需要選好自己想要的房子,然後交錢就行了。

  代理簡單來說,就是如果我們想做什麼,但又不想直接去做,那麼這時候就找另外一個人幫我們去做。那麼這個例子裡面的中介公司就是給我們做代理服務的,我們委託中介公司幫我們找房子。

二、代理伺服器

1、什麼是代理伺服器

  代理伺服器,客戶機在傳送請求時,不會直接傳送給目的主機,而是先發送給代理伺服器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的資料,存放在代理伺服器的硬碟中,再發送給客戶機。

2、為什麼要使用代理伺服器

  1)提高訪問速度

  由於目標主機返回的資料會存放在代理伺服器的硬碟中,因此下一次客戶端再訪問相同的站點資料時,會直接從代理伺服器的硬碟中讀取,起到了快取的作用,尤其對於熱門站點能明顯提高請求速度。

  2)防火牆作用

  由於所有的客戶機請求都必須通過代理伺服器訪問遠端站點,因此可在代理伺服器上設限,過濾某些不安全資訊。

  3)通過代理伺服器訪問不能訪問的目標站點

  網際網路上有許多開發的代理伺服器,客戶機在訪問受限時,可通過不受限的代理伺服器訪問目標站點,通俗說,我們使用的翻牆瀏覽器就是利用了代理伺服器,雖然不能出國,但也可直接訪問外網。

三、正向代理

  正向代理伺服器位於客戶端和伺服器之間,為了向伺服器獲取資料,客戶端要向代理伺服器傳送一個請求,並指定目標伺服器,代理伺服器將目標伺服器返回的資料轉交給客戶端。這裡客戶端是要進行一些正向代理的設定的。

  舉一個例子:大家都知道,現在國內是訪問不了 Google的,那麼怎麼才能訪問 Google呢?我們又想,美國人不是能訪問 Google嗎(這不廢話,Google就是美國的),如果我們電腦的對外公網 IP 地址能變成美國的 IP 地址,那不就可以訪問 Google了。你很聰明,VPN 就是這樣產生的。我們在訪問 Google 時,先連上 VPN 伺服器將我們的 IP 地址變成美國的 IP 地址,然後就可以順利的訪問了。這裡的 VPN 就是做正向代理的。

  PS:這裡介紹一下什麼是 VPN,VPN 通俗的講就是一種中轉服務,當我們電腦接入 VPN 後,我們對外 IP 地址就會變成 VPN 伺服器的公網 IP,我們請求或接受任何資料都會通過這個VPN 伺服器然後傳入到我們本機。這樣做有什麼好處呢?比如 VPN 遊戲加速方面的原理,我們要玩網通區的 LOL,但是本機接入的是電信的寬頻,玩網通區的會比較卡,這時候就利用 VPN 將電信網路變為網通網路,然後在玩網通區的LOL就不會卡了(注意:VPN 是不能增加頻寬的,不要以為不卡了是因為網速提升了)。

四、反向代理

  反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求傳送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取資料後,在返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴露的是代理伺服器地址,隱藏了真實伺服器IP地址。

  作用:現在許多大型web網站都用到反向代理。除了可以防止外網對內網伺服器的惡性攻擊、快取以減少伺服器的壓力和訪問安全控制之外,還可以進行負載均衡,將使用者請求分配給多個伺服器。

  理解這兩種代理的關鍵在於代理伺服器所代理的物件是什麼,正向代理代理的是客戶端,我們需要在客戶端進行一些代理的設定。而反向代理代理的是伺服器,作為客戶端的我們是無法感知到伺服器的真實存在的。

  總結起來還是一句話:正向代理代理客戶端,反向代理代理伺服器。

五、Nginx 反向代理

  Nginx作為近年來較火的反向代理伺服器,安裝在伺服器端,主要用於轉發客戶端請求,後臺有多個http伺服器提供服務,nginx的功能就是把請求轉發給後面的伺服器,決定哪臺伺服器來處理當前請求。

  Nginx 主要能夠代理如下幾種協議,其中用到的最多的就是做Http代理伺服器。

  Nginx的功能就是把請求轉發給後面的伺服器,決定哪臺目標主機來處理當前請求。

  下面演示如何進行配置使Nginx發揮作用。

  1、模擬n個http伺服器作為目標主機

    用作測試,簡單的使用2個tomcat例項模擬兩臺http伺服器,分別將tomcat的埠改為8081和8082 。

  2、配置IP域名

    192.168.72.49 test8081.com
    192.168.72.49 test8082.com

  3、配置nginx.conf

#upstream表示負載伺服器池,定義名字為tomcatserver1 的伺服器池
upstream tomcatserver1 {  
    server 192.168.72.49:8081;  
}  
upstream tomcatserver2 {  
    server192.168.72.49:8082;  
}  
server {  
        listen       80;  
        server_name  test8081.com;  
  
        #charset koi8-r;  
  
        #access_log  logs/test8081.com.log  main;  
  
        location / {  
            #反向代理伺服器的地址        
proxy_pass http:
//tomcatserver1;
index index.html index.htm;
#下面這兩條配置,意思是將http頭轉發給後端應用,不然你後端應用服務拿客戶端IP地址的時候拿到的是nginx代理的地址而不是客戶端的。 proxy_set_header Host $host;    proxy_set_header X
-Real-IP $remote_addr; } } server { listen 80; server_name test8082.com; #charset koi8-r; #access_log logs/test8082.com.log main; location / { proxy_pass http://tomcatserver2; index index.html index.htm; } }

  4、重啟Nginx服務,驗證結果

  命令:service nginx restart

  使用瀏覽器訪問,由於nginx反向代理接受客戶機請求,找到server_name為的server節點, 根據proxy_pass對應的http路徑,將請求轉發到upstream tomcatserver1上,即埠號為8081的tomcat伺服器。

六、Nginx 反向代理相關指令介紹

1、listen

  該指令用於配置網路監聽。主要有如下三種配置語法結構:

  1)配置監聽的IP地址

listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]
    [accept_filter=filter] [bind] [ssl];

  2)配置監聽埠

listen port[default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] 
    [deferred] [bind] [ipv6only=on|off] [ssl];

  3)配置 UNIX Domain Socket

listen unix:path [default_server]  [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] 
    [deferred] [bind] [ssl];

  上面的配置看似比較複雜,其實使用起來是比較簡單的:

1 listen  *:80 | *:8080     #監聽所有80埠和8080埠
2 listen  IP_address:port   #監聽指定的地址和埠號
3 listen  IP_address        #監聽指定ip地址所有埠
4 listen  port              #監聽該埠的所有IP連線

  下面分別解釋每個選項的具體含義:

  ①address:IP地址,如果是 IPV6地址,需要使用中括號[] 括起來,比如[fe80::1]等。

  ②port:埠號,如果只定義了IP地址,沒有定義埠號,那麼就使用80埠。

  ③path:socket檔案路徑,如 var/run/nginx.sock等。

  ④default_server:識別符號,將此虛擬主機設定為 address:port 的預設主機(在 nginx-0.8.21 之前使用的是 default 指令)。

  ⑤setfib=number:Nginx-0.8.44 中使用這個變數監聽 socket 關聯路由表,目前只對 FreeBSD 起作用,不常用。

  ⑥backlog=number:設定監聽函式listen()最多允許多少網路連線同時處於掛起狀態,在 FreeBSD 中預設為 -1,其他平臺預設為511。

  ⑦rcvbuf=size:設定監聽socket接收快取區大小。

  ⑧sndbuf=size:設定監聽socket傳送快取區大小。

  ⑨deferred:識別符號,將accept()設定為Deferred模式。

  ⑩accept_filter=filter:設定監聽埠對所有請求進行過濾,被過濾的內容不能被接收和處理,本指令只在 FreeBSD 和 NetBSD 5.0+ 平臺下有效。filter 可以設定為 dataready 或 httpready。

  ⑪bind:識別符號,使用獨立的bind() 處理此address:port,一般情況下,對於埠相同而IP地址不同的多個連線,Nginx 伺服器將只使用一個監聽指令,並使用 bind() 處理埠相同的所有連線。

  ⑫ssl:識別符號,設定會話連線使用 SSL模式進行,此識別符號和Nginx伺服器提供的 HTTPS 服務有關。

2、server_name

  該指令用於虛擬主機的配置。通常分為以下兩種:

  1)基於名稱的虛擬主機配置

  語法格式如下:

server_name   name ...;

  ①對於name 來說,可以只有一個名稱,也可以有多個名稱,中間用空格隔開。而每個名字由兩段或者三段組成,每段之間用“.”隔開。

server_name 123.com www.123.com

  ②可以使用萬用字元“*”,但萬用字元只能用在由三段字元組成的首段或者尾端,或者由兩端字元組成的尾端。

server_name *.123.com www.123.*

  ③還可以使用正則表示式,用“~”作為正則表示式字串的開始標記。

server_name ~^www\d+\.123\.com$;

  該表示式“~”表示匹配正則表示式,以www開頭(“^”表示開頭),緊跟著一個0~9之間的數字,在緊跟“.123.co”,最後跟著“m”($表示結尾)

  以上匹配的順序優先順序如下:

1 準確匹配 server_name
2 萬用字元在開始時匹配 server_name 成功
3 萬用字元在結尾時匹配 server_name 成功
4 正則表示式匹配 server_name 成功

2)基於 IP 地址的虛擬主機配置

  語法結構和基於域名匹配一樣,而且不需要考慮萬用字元和正則表示式的問題。

server_name 192.168.1.1

3、location

  該指令用於匹配 URL。

  語法如下:

1  location [ = | ~ | ~* | ^~] uri {
2 
3  }

  1)= :用於不含正則表示式的 uri 前,要求請求字串與 uri 嚴格匹配,如果匹配成功,就停止繼續向下搜尋並立即處理該請求。

  2)~:用於表示 uri 包含正則表示式,並且區分大小寫。

  3)~*:用於表示 uri 包含正則表示式,並且不區分大小寫。

  4)^~:用於不含正則表示式的uri 前,要求 Nginx 伺服器找到標識 uri 和請求字串匹配度最高的 location 後,立即使用此 location 處理請求,而不再使用 location 塊中的正則 uri 和請求字串做匹配。

  注意:如果 uri 包含正則表示式,則必須要有 ~ 或者 ~* 標識。

4、proxy_pass

  該指令用於設定被代理伺服器的地址。可以是主機名稱、IP地址加埠號的形式。

  語法結構如下:

proxy_pass URL;

  URL 為被代理伺服器的地址,可以包含傳輸協議、主機名稱或IP地址加埠號,URI等。

proxy_pass  http://www.123.com/uri;

5、index

  該指令用於設定網站的預設首頁。

  語法為:

index  filename ...;

  後面的檔名稱可以有多個,中間用空格隔開。

index  index.html index.jsp;

  通常該指令有兩個作用:

    第一個是使用者在請求訪問網站時,請求地址可以不寫首頁名稱;

    第二個是可以對一個請求,根據請求內容而設定不同的首頁。

七、通過分析我們不難得出,以百度為例,如果客戶機的IP和百度伺服器(目標主機)的IP在同一個網段,那就形同區域網內部發送請求,速度極快。但如果滿足不了這種需求還想到達到一個較好的請求響應時,百度伺服器就可以對外提供一個與目標伺服器在一個網段的公網IP,也就是反向代理服務的IP,通過代理伺服器轉發客戶機請求,決定幕後的N臺伺服器誰來處理這個請求,並且由於反向代理伺服器與目標主機在一個網段,訪問速度也會很快。
Nginx用作反向代理伺服器時,它就是眾多反向代理伺服器中的一種,通過簡單的配置,指定到伺服器IP或域名地址便可將客戶機請求轉發給指定伺服器處理請求。

轉自:https://www.cnblogs.com/ysocean/p/9392908.htmlhttps://www.cnblogs.com/jmao/p/9908559.html