Nginx反向代理和jetty服務器配置

這裏是修真院前端小課堂,每篇分享文從html

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】前端

八個方面深度解析前端知識/技能,本篇分享的是:java

【Nginx反向代理和jetty服務器配置】linux

 

你們好,我是IT修真院深圳分院第01期學員,一枚正直純潔善良的web程序員。nginx

今天給你們分享一下,修真院官網JAVA(職業)任務3,深度思考中的知識點——Nginx反向代理。git

1.介紹程序員

Nginx是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。github

2.涉及web

2.1 代理服務器瀏覽器

通常是指局域網內部的機器經過代理服務器發送請求到互聯網上的服務器,代理服務器通常做用在客戶端。 一個完整的代理請求過程爲:客戶端首先與代理服務器建立鏈接,接着根據代理服務器所使用的代理協議,請求對目標服務器建立鏈接、或者得到目標服務器的指定資源。 Web代理(proxy)服務器是網絡的中間實體。 代理位於Web客戶端和Web服務器之間,扮演「中間人」的角色。HTTP的代理服務器便是Web服務器又是Web客戶端。

2.2 正向代理

是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理。

2.3 反向代理

在服務器端接受客戶端的請求,而後把請求分發給具體的服務器進行處理,而後再將服務器的響應結果反饋給客戶端。

二者的區別在於代理的對象不同:正向代理代理的對象是客戶端,反向代理代理的對象是服務端。

2.4 爲何要用反向代理

便於服務器分佈擴展。在實際中單個服務器處理客戶端請求能力有一個極限,當請求量過大,則服務器忙不過來,所以使用多個服務器來共同分擔用戶的請求處理,這些服務器提供相同的服務,對於用戶來講沒有差異。那麼就須要一個負載均衡設備來分發用戶的請求到空閒的服務器上,而後服務器返回結果到負載均衡設備上,負載均衡再將其返回給用戶。這樣當增長/移除某臺服務器時,只須要修改負載均衡的服務器列表,而不會影響服務。

安全。避免ip和端口直接暴露在internet,使主機免於被開採安全漏洞,代理服務器數量有限,安全防禦更方便。

2.5 nginx反向代理配置

編輯nginx.conf文件:

clipboard.png

a

上圖是在服務器上解壓安裝nginx的tar包後,安裝目錄下的conf/nginx.conf文件,紅色部分爲自定義配置,其中log_format表示nginx日誌格式配置,userformat是自定義的日誌格式名,後面的是一些日誌輸出參數,從左到右依次表示:客戶端地址,客戶端名稱,服務器本地時間,請求信息,請求狀態碼,主體內容大小,請求處理時間,響應延時,從哪個地址跳轉過來,請求代理,XXF頭。任務3要求統計訪問次數和響應延時,使用awk命令處理配置路徑下的8081_access.log文件獲取須要的信息。

server內容表示虛擬主機配置,可配置多個。內容依次爲:端口,本地地址,日誌配置(日誌路徑、格式),反向代理配置(location表示子域,proxy_pass表示代理的服務器地址),這裏面須要注意的一點是:proxy_pass有的人須要在後面加「/」才能成功,而有的不須要也能成功,這一點我尚未搞清楚緣由。

2.6 jetty服務器配置

接下來就是配置web服務器了,可使用jetty、tomcat或resin安裝配置,我用的是jetty,精巧方便。

下載jetty的tar.gz包在服務器上選擇一個位置解壓,個人位置是/opt/jetty,解壓後進入目錄,這個目錄就是${jetty.home}目錄(由於jetty建議${jetty.home}和${jetty.base}分離,便於配置管理和版本升級),找到start.jar包,另外新建一個目錄,好比個人/opt/web/jettybase,這個目錄做爲${jetty.base},在此目錄下運行${jetty.home}中找到的start.jar包,並加入可選的模塊(好比:java -jar /opt/jetty/start.jar --add-to-start=deploy,http,logging-log4j,模塊可在${jetty.home}下的modules文件夾中自行選擇所需),而後ls命令查看目錄下的文件,找到start.ini文件進行編輯,設定運行端口和項目目錄,以下圖:

clipboard.png

b

clipboard.png

c

如此,jetty就安裝完成了,將項目代碼打包後上傳到${jetty.base}的webapps目錄下,就能夠運行了,啓動jetty在${jetty.home}的bin文件夾下,運行jetty.sh,而後在瀏覽器輸入服務器ip+端口號+項目包名,若是一切正常的話,就能夠看到你的項目主頁,輸入服務器ip+nginx配置的端口號,也能夠進入項目主頁。

若是你嫌啓動jetty太麻煩,能夠將jetty配置爲系統服務:

新建目錄好比/opt/jetty/temp,運行如下命令:

cp /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/bin/jetty.sh /etc/init.d/jetty

echo "JETTY_HOME=/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT" > /etc/default/jetty

echo "JETTY_BASE=/opt/web/mybase" >> /etc/default/jetty

echo "TMPDIR=/opt/jetty/temp" >> /etc/default/jetty

而後運行service jetty status進行測試,若是正常的話,會出現如下內容:

Checking arguments to Jetty:

START_INI      =  /opt/web/mybase/start.ini

JETTY_HOME    =  /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT

JETTY_BASE    =  /opt/web/mybase

JETTY_CONF    =  /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/etc/jetty.conf

JETTY_PID      =  /var/run/jetty.pid

JETTY_START    =  /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/start.jar

JETTY_LOGS    =  /opt/web/mybase/logs

CLASSPATH      =

JAVA          =  /usr/bin/java

JAVA_OPTIONS  =  -Djetty.state=/opt/web/mybase/jetty.state

........

我運行的時候報錯:在默認路徑下找不到java。緣由是我服務器安裝的jdk路徑與jetty的默認尋找路徑不一致,所以須要手動將java路徑寫入/etc/default/jetty:

clipboard.png

d

再次運行,成功!

再次進入/opt/web/jettybase/目錄,找到resource文件夾進入,有一個log4j.xml文件,這是jetty運行的日誌配置文件,能夠自行按須要配置,個人配置以下:

clipboard.png

e

以上就是任務3服務器nginx和jetty配置的內容。

3.常見問題

實際使用

4.解決方案

5.編碼實戰

6.擴展思考

nginx優勢

1)更快:單次請求獲得響應更快,高峯狀況下,比其餘web服務器如Apache更快響應請求。這得益於Nginx使用了最新的epoll(Linux 2.6內核)和kqueue(freebsd)網絡I/O模型,而Apache則使用的是傳統的select模型。而在高併發服務器中,輪詢I/O是很是耗時間的操做。

2)高擴展性,跨平臺,高可靠性:nginx由多個不一樣功能、不一樣層次、不一樣類型且耦合度極低的模塊組成,這些模塊都是嵌入到二進制文件中執行的,不管官方發佈的模塊仍是第三方模塊都是如此。這使得第三方模塊同樣具有極其優秀的性能,充分利用Nginx的高併發特性,所以,許多高流量的網站都傾向於開發符合本身業務特性的定製模塊。

3)低內存消耗,高併發鏈接:通常狀況下,10 000個非活躍的HTTP Keep-Alive鏈接在Nginx中僅消耗2.5MB的內存,單機支持10萬以上的併發鏈接。

4)熱部署,BSD協議:master管理進程與worker工做進程的分離設計,使得Nginx可以提供熱部署功能,便可以在7×24小時不間斷服務的前提下,升級Nginx的可執行文件。固然,它也支持不中止服務就更新配置項、更換日誌文件等功能。BSD許可協議容許用戶無償使用Nginx,容許用戶在本身的項目中直接使用或修改Nginx源碼,而後發佈,這吸引了無數開發者繼續爲Nginx貢獻本身的智慧。

擁有無數個官方功能模塊、第三方功能模塊使得Nginx可以知足絕大部分應用場景,這些功能模塊間能夠疊加以實現更增強大、複雜的功能,有些模塊還支持Nginx與Perl、Lua等腳本語言集成工做,大大提升了開發效率。

7.參考文獻

Nginx是什麼,有什麼優勢?爲何選擇Nginx作web服務器軟件?

Nginx中文文檔

8.更多討論

安裝nginx tar.gz包配置linux系統服務

鳴謝

感謝你們觀看

PPT連接

相關文章
相關標籤/搜索