最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Nginx服務(wù)器如何實(shí)現(xiàn)動(dòng)靜分離和反向代理

 更新時(shí)間:2024年05月14日 10:22:17   作者:辰遠(yuǎn)YIL  
這篇文章主要介紹了使用Nginx服務(wù)器如何實(shí)現(xiàn)動(dòng)靜分離和反向代理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

我們使用的Tomcat是一個(gè)Java的JSP/Servlet動(dòng)態(tài)服務(wù)器,但并不是一個(gè)優(yōu)秀靜態(tài)資源服務(wù)器,使用Tomcat作為Java Web服務(wù)器沒(méi)有問(wèn)題,但用它來(lái)提供圖片、CSS、和HTML靜態(tài)資源的話訪問(wèn)效率并不高(rps不高)。

在真實(shí)的Web應(yīng)用中,JSP/Servlet的請(qǐng)求量相比靜態(tài)資源(如圖片、CSS、JS等等)的請(qǐng)求量要少得多,如果用Tomcat同時(shí)兼做動(dòng)態(tài)、靜態(tài)服務(wù)器,Tomcat的短板就會(huì)凸顯。

為此,我們常常需要把靜態(tài)資源分離出來(lái)交給更高效的HTTP服務(wù)器去管理,這種作法稱為“動(dòng)靜分離”。

1 Nginx服務(wù)器

1.1 Nginx簡(jiǎn)介

(1)什么是Nginx

Nginx (engine x)是一個(gè)高性能的HTTP靜態(tài)服務(wù)器和反向代理服務(wù)器,其特點(diǎn)是占用內(nèi)存少,并發(fā)能力強(qiáng)。

Nginx服務(wù)器的官網(wǎng)下載地址為:nginx: download。

(2)Nginx的三種作用

靜態(tài)資源服務(wù)器、反向代理和負(fù)載均衡服務(wù)器。

“反向代理”是代理服務(wù)器的一種。服務(wù)器根據(jù)客戶端的請(qǐng)求,從其關(guān)系的一組或多組后端服務(wù)器(如Web服務(wù)器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會(huì)得知反向代理的IP地址,而不知道在代理服務(wù)器后面的服務(wù)器簇的存在。

與反向代理相反的是“前向代理”,前向代理作為客戶端的代理,將從互聯(lián)網(wǎng)上獲取的資源返回給一個(gè)或多個(gè)的客戶端,服務(wù)端(如Web服務(wù)器)只知道代理的IP地址而不知道客戶端的IP地址。

“負(fù)載均衡(Load Balance)”意思就是把任務(wù)分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,從而共同完成工作任務(wù)。在實(shí)際環(huán)境中運(yùn)行的Web服務(wù)器(如Tomcat),面對(duì)著大量的并發(fā)請(qǐng)求,如果可以把請(qǐng)求統(tǒng)一接收并均衡平攤到多臺(tái)服務(wù)器上,就可以讓?xiě)?yīng)用程序承載更多的負(fù)荷。

1.2 Nginx安裝和運(yùn)行

Nginx的安裝包是一個(gè)zip文件,只需解壓即可使用。

通過(guò)Nginx目錄下的nginx.exe命令就可以運(yùn)行Nginx服務(wù)器,格式如下:

nginx -選項(xiàng) 參數(shù)

常用指令如下:

命令

描述

start nginx

啟動(dòng)nginx服務(wù)器

nginx -t

測(cè)試配置文件是否有語(yǔ)法錯(cuò)誤

nginx -s stop

立即停止nginx服務(wù)器

nginx -s quit

優(yōu)雅的退出nginx服務(wù)器

nginx -s reload

重啟nginx服務(wù)器

Nginx在生產(chǎn)中的主要功能是 “靜態(tài)資源服務(wù)器” 和 “反向代理服務(wù)器”。Nginx服務(wù)器功能是通過(guò)配置文件“~/conf/nginx.conf”來(lái)定制的。

在控制臺(tái)中運(yùn)行nginx.exe,就可以在瀏覽器輸入localhost訪問(wèn)nginx。

2 使用Nginx實(shí)現(xiàn)靜態(tài)資源服務(wù)器

假設(shè)我們把網(wǎng)站的靜態(tài)資源放置在磁盤(pán)文件夾下(例如“D:\SpringMVC_Nginx\web-static\static”),通過(guò)修改nginx的配置文件就可以用Nginx把它們以HTTP的方式公布出來(lái)。

(1)配置靜態(tài)資源服務(wù)器

修改Nginx安裝目錄下的“\conf\nginx.conf”文件。修改其中的“server”配置信息如下。

server {
		#添加靜態(tài)資源映射路徑 /static/
        location /static/ {
			root D:\SpringMVC_Nginx\web-static;	#設(shè)置根目錄對(duì)應(yīng)的文件夾
			autoindex on;       					#會(huì)自動(dòng)顯示資源目錄
            index noindex.htm; 					
        }
    }

(2)重啟Nginx

通過(guò)安裝目錄下的nginx.exe程序,可以控制服務(wù)器的啟動(dòng)關(guān)閉。

使用控制臺(tái)命令行進(jìn)入nginx安裝目錄,執(zhí)行以下指令重啟nginx:

nginx.exe -s reload

(3)訪問(wèn)靜態(tài)資源

啟動(dòng)后就能通過(guò)HTTP請(qǐng)求訪問(wèn)靜態(tài)資源了。

3 使用Nginx實(shí)現(xiàn)對(duì)Tomcat的反向代理

通過(guò)上述配置,瀏覽器可以通過(guò)Nginx服務(wù)器提供的“http://localhost/static/......”訪問(wèn)靜態(tài)資源。

同樣原理,我們希望Tomcat中的項(xiàng)目也可以由Nginx代理出去,Tomcat服務(wù)器由Nginx包裝后,對(duì)外只需要暴露Nginx服務(wù)即可,這種代理方式稱之為“反向代理”。

(1)啟動(dòng)Tomcat中的項(xiàng)目(例如:http://localhost:8080/demo/)

(2)在nginx配置文件nginx.conf中的Server配置節(jié)中添加如下的配置:

server {
        # ……省略原有配置……
		#反向代理Tomcat服務(wù)器
		location /demo/ {
            proxy_pass         http://localhost:8080/demo/;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
		# ……省略原有配置……
	}

(3)重啟nginx

nginx -s reload

這時(shí),我們可以通過(guò)nginx服務(wù)器 http://localhost/demo/index 訪問(wèn)原來(lái)Tomcat中http://localhost:8080/demo/index的頁(yè)面。

這樣就實(shí)現(xiàn)了反向代理。

4 把文件上傳到靜態(tài)資源服務(wù)器

這時(shí),在Tomcat項(xiàng)目中,我們只要通過(guò)http://localhost/static/路徑就可以訪問(wèn)靜態(tài)資源,如果要上傳文件的話,我們就應(yīng)該存放在nginx對(duì)應(yīng)的靜態(tài)資源目錄(如:上述的D:\SpringMVC_Nginx\web-static)。

因?yàn)檫@個(gè)虛擬路徑(例如:http://localhost/static/)和物理路徑都不和tomcat直接相關(guān),因此對(duì)編程帶來(lái)一些麻煩,為此我們可以采取配置的方式來(lái)統(tǒng)一處理路徑問(wèn)題。

(1)配置靜態(tài)資源路徑

為了方便編程中使用,我們可以把靜態(tài)資源URL(static url)和實(shí)際存放資源的物理路徑配置在項(xiàng)目中。例如,放置在web.xml中。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	…其他配置…
	<context-param>
		<param-name>staticUrl</param-name>
		<param-value>http://localhost/static</param-value>
	</context-param>
		<context-param>
		<param-name>staticPath</param-name>
		<param-value>D:\SpringMVC_Nginx\web-static\static</param-value>
	</context-param>
</web-app>

(2)在頁(yè)面中使用

通過(guò)EL表達(dá)式“${staticUrl}”,我們可以在jsp頁(yè)面中使用靜態(tài)資源路徑。

例如:

<img src="${initParam.staticUrl}/images/1.gif" alt="" />

(3)在代碼中使用

 在項(xiàng)目代碼中,我們也可以通過(guò)ServletContext對(duì)象讀取路徑參數(shù)。

例如:

request.getServletContext().getInitParameter("staticPath")

最后,注意上傳文件的保存地址,不再是Tomcat服務(wù)器的部署地址,而是Nginx服務(wù)器的靜態(tài)資源放置地址。

以下是SpringMVC保存上傳文件的示例代碼。

@RequestMapping("/save")
	public String save(Photo photo, MultipartFile image, HttpServletRequest req) throws IllegalStateException, IOException {
		if(!image.isEmpty()) {
			String ext = image.getOriginalFilename()
.substring(image.getOriginalFilename().lastIndexOf("."));
			String filename = System.currentTimeMillis()+ext;
			photo.setFilename(filename);
			photoMapper.add(photo);
			String path = req.getServletContext().getInitParameter("staticPath")
+"/images/"+filename;
			image.transferTo(new File(path));
			return "redirect:index";
		}else {
			return "error";
		}
	}

還需要注意的是,在真實(shí)的環(huán)境中,動(dòng)態(tài)資源服務(wù)器(Tomcat)和靜態(tài)資源服務(wù)器(Nginx)往往不會(huì)放在同一臺(tái)機(jī)器上,這時(shí)保存文件的地址就不是本機(jī)路徑了,有可能需要在Nginx所在服務(wù)器中創(chuàng)建FTP服務(wù),然后在Java Web程序中通過(guò)FTP的方式把用戶上傳的文件再次用FTP方式上傳到Nginx服務(wù)器上。

實(shí)際應(yīng)用中也很可能直接購(gòu)買各種云服務(wù)器上的靜態(tài)資源提供者服務(wù)。

5 負(fù)載均衡簡(jiǎn)介

前面提到,Nginx還可以反向代理多臺(tái)后端的Web服務(wù)器,實(shí)現(xiàn)反向代理功能。下面用Nginx反向代理兩臺(tái)Tomcat服務(wù)器來(lái)簡(jiǎn)單演示負(fù)載均衡的實(shí)現(xiàn)。

為了能快速啟動(dòng)多個(gè)Tomcat實(shí)例,我們使用Spring Boot工具快速構(gòu)建包含Tomcat的Jar項(xiàng)目。啟動(dòng)兩個(gè)功能相同的Tomcat實(shí)例,請(qǐng)求地址分別為:

http://localhost:8080/index

http://localhost:8090/index

配置Nginx的nginx.conf文件,增加upstream配置節(jié),并設(shè)置反向代理。請(qǐng)參見(jiàn)下方配置中紅字部分。

upstream 中配置的weight是負(fù)載均衡中各后端服務(wù)器的權(quán)重。下面配置的權(quán)重都是10,意味著兩臺(tái)服務(wù)器負(fù)載量均等。

……
	upstream tomcat_server{
		server 127.0.0.1:8080 weight=10;
		server 127.0.0.1:8090 weight=10;
	}
    server {
        listen       80;
        server_name  localhost;
 
		#反向代理Tomcat服務(wù)器
		location /demo/ {
            proxy_pass         http://tomcat_server/demo/;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
	……

重新加載nginx,我們監(jiān)控兩個(gè)后端服務(wù)器接收到的請(qǐng)求情況,發(fā)現(xiàn)兩臺(tái)服務(wù)器被輪流訪問(wèn)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • NGINX基于cookie針對(duì)同一域名進(jìn)行分流轉(zhuǎn)發(fā)

    NGINX基于cookie針對(duì)同一域名進(jìn)行分流轉(zhuǎn)發(fā)

    本文介紹了利用NGINX基于cookie進(jìn)行多環(huán)境分流的方法,通過(guò)在Docker中部署兩個(gè)后端NGINX容器,并在前端NGINX配置中設(shè)置map規(guī)則,根據(jù)cookie值將請(qǐng)求分發(fā)到不同后端,感興趣的可以了解一下
    2025-07-07
  • nginx centos 服務(wù)開(kāi)機(jī)啟動(dòng)設(shè)置實(shí)例詳解

    nginx centos 服務(wù)開(kāi)機(jī)啟動(dòng)設(shè)置實(shí)例詳解

    這篇文章主要介紹了nginx centos 服務(wù)開(kāi)機(jī)啟動(dòng)設(shè)置實(shí)例詳解的相關(guān)資料,這里對(duì)服務(wù)開(kāi)機(jī)啟動(dòng)做了詳細(xì)的步驟介紹,需要的朋友可以參考下
    2016-11-11
  • 在Nginx中增加對(duì)OAuth協(xié)議的支持的教程

    在Nginx中增加對(duì)OAuth協(xié)議的支持的教程

    這篇文章主要介紹了在Nginx中增加對(duì)OAuth協(xié)議的支持的教程,OAuth協(xié)議如今廣泛用于社交網(wǎng)絡(luò)的API中,需要的朋友可以參考下
    2015-06-06
  • nginx使用IPV6的相關(guān)配置項(xiàng)介紹

    nginx使用IPV6的相關(guān)配置項(xiàng)介紹

    這篇文章主要介紹了nginx使用IPV6的相關(guān)配置項(xiàng)介紹,首先查看編譯參數(shù)是否編譯了IPV6模塊,然后介紹了監(jiān)聽(tīng)I(yíng)PV6的配置語(yǔ)法,需要的朋友可以參考下
    2014-07-07
  • 使用Nginx做WebSockets代理教程

    使用Nginx做WebSockets代理教程

    這篇文章主要介紹了使用Nginx做WebSockets代理教程,本文給出了代理配置,和一個(gè)完整的node.js實(shí)現(xiàn)的WebSockets實(shí)例,需要的朋友可以參考下
    2015-01-01
  • 配置nginx隱藏版本號(hào)的多種方法

    配置nginx隱藏版本號(hào)的多種方法

    在生產(chǎn)環(huán)境中,需要隱藏nginx等服務(wù)的版本信息,以免造成安全風(fēng)險(xiǎn),下面小編給大家?guī)?lái)了兩種方法,幫助大家學(xué)習(xí)配置nginx隱藏版本號(hào)的相關(guān)知識(shí),需要的朋友可以參考下
    2022-01-01
  • nginx proxy_cache批量清除緩存的腳本介紹

    nginx proxy_cache批量清除緩存的腳本介紹

    今天小編就為大家分享一篇關(guān)于nginx proxy_cache批量清除緩存的腳本介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Nginx限制IP并發(fā)數(shù)與下載速度的方法

    Nginx限制IP并發(fā)數(shù)與下載速度的方法

    這篇文章主要介紹了Nginx中限制IP并發(fā)數(shù)與下載速度的方法,用到了limit_zone、limit_rate和limit_conn模塊,有需要的朋友參考下
    2014-01-01
  • Nginx為靜態(tài)資源配置緩存時(shí)間的操作步驟

    Nginx為靜態(tài)資源配置緩存時(shí)間的操作步驟

    最近在優(yōu)化網(wǎng)站性能時(shí),發(fā)現(xiàn)很多靜態(tài)資源(比如圖片、CSS?文件等)每次都會(huì)從服務(wù)器重新加載,這不僅浪費(fèi)了帶寬,還增加了 服務(wù)器的負(fù)載,為了解決這個(gè)問(wèn)題,我研究了一下如何在?Nginx?中為靜態(tài)資源配置緩存時(shí)間,下面是我的配置過(guò)程,需要的朋友可以參考下
    2025-02-02
  • nginx?location指令(匹配順序匹配沖突)實(shí)戰(zhàn)示例詳解

    nginx?location指令(匹配順序匹配沖突)實(shí)戰(zhàn)示例詳解

    這篇文章主要介紹了nginx?location指令(實(shí)戰(zhàn)示例匹配順序匹配沖突)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論

秭归县| 桂阳县| 太原市| 平泉县| 嘉祥县| 房山区| 兴宁市| 栖霞市| 澄江县| 晋中市| 锦州市| 渝中区| 桦川县| 革吉县| 边坝县| 呼和浩特市| 双鸭山市| 大埔区| 绥芬河市| 友谊县| 乐山市| 元氏县| 体育| 友谊县| 延长县| 玛纳斯县| 左云县| 华池县| 石景山区| 定安县| 博罗县| 磐石市| 图木舒克市| 高唐县| 黑山县| 岳西县| 吉木乃县| 原阳县| 正定县| 保定市| 公安县|