如何使用Nginx配置反向代理

一般配置

在一般的情況下,熟悉nginx的朋友都知道,如果需要配置反向代理,直接寫(xiě)一個(gè)location上下文和proxy模塊即可,如果需要自定義前綴,使用一個(gè)rewrite模塊即可。簡(jiǎn)單例子如下:

location?~?/dfs/group([0-9])?{ ?proxy_pass?http://localhost:8080; ?rewrite?^/dfs/(.*)$?/$1?break; ?proxy_set_header?host?$host:$server_port; ?proxy_set_header?x-real-ip?$remote_addr; ?proxy_set_header?x-forwarded-for?$proxy_add_x_forwarded_for; }

到這里,一般的反代配置就算是可以了,那么對(duì)于go-fastdfs而言是否可以了呢?對(duì)于go-fastdfs一般上傳是可以了,但是呢,對(duì)于使用了tus做斷點(diǎn)續(xù)傳還是不夠,為什么呢?因?yàn)閠us服務(wù)端會(huì)返回301重定向,并且需要攜帶一定的請(qǐng)求頭過(guò)去,所以還需要特別的設(shè)置一下。

支持tus的反代配置

如果需要做tus的反代,要支持301重定向location的重寫(xiě)還要支持一定的請(qǐng)求頭轉(zhuǎn)發(fā),那該如何配置呢?請(qǐng)參考下面的配置

location?~?/dfs1/group([0-9])?{ ?access_log?logs/dfs/access.log?main; ?error_log?logs/dfs/error.log?error; ?rewrite?^/dfs1/(.*)$?/$1?break; ?proxy_pass?http://localhost:8051;  ?#?disable?request?and?response?buffering ?proxy_request_buffering?off; ?proxy_buffering?off; ?proxy_http_version?1.1;  ?proxy_set_header?host?$host:$server_port; ?proxy_set_header?x-real-ip?$remote_addr; ?proxy_set_header?x-forwarded-for?$proxy_add_x_forwarded_for; ?#?如果server_name不是公網(wǎng)域名,這個(gè)地方可以設(shè)置成ip ?proxy_set_header?x-forwarded-host?$hostname; ?proxy_set_header?x-forwarded-proto?$scheme; ?proxy_set_header?upgrade?$http_upgrade; ?proxy_set_header?connection?"upgrade"; ?#?因?yàn)槭褂昧饲熬Y加rewrite,所以要修改返回的location加上反向代理的前綴 ?proxy_redirect?~^(.*)/group([0-9])/big/upload/(.*)?/dfs/group$2/big/upload/$3; ?client_max_body_size?0; }

上面要注意一下就是proxy_redirect和client_max_body_size這兩個(gè)配置,第一個(gè)配置是因?yàn)閠us服務(wù)端返回的重定向location是不會(huì)攜帶自定義前綴的,因此需要自己加入自定義的前綴,我這里是/dfs,如果是別的,更換下就好。第二個(gè)就是client_max_body_size了,這個(gè)是設(shè)置為0表示不管上傳多大的文件都不會(huì)報(bào)request too large的問(wèn)題,直接轉(zhuǎn)發(fā)過(guò)去,如果需要設(shè)置,那么請(qǐng)?jiān)O(shè)置大于等于chunksize的數(shù)字。什么是chunksize?就是tus客戶(hù)端分塊上傳的時(shí)候,每一塊的大小,具體請(qǐng)參考。

負(fù)載均衡配置

在配置了集群服務(wù)器的情況下,上傳或者下載如何進(jìn)行負(fù)載均衡呢?使用nginx做了反代,配合upstream模塊就可以實(shí)現(xiàn)了,具體參考如下配置

upstream?dfs_stream?{ ?server?host1:port; ?server?host2:port; ?ip_hash; }

上面的配置和一般的負(fù)載均衡沒(méi)有什么不一樣,唯一要注意的是要配置ip_hash,為什么呢?因?yàn)槭褂脭帱c(diǎn)續(xù)傳的時(shí)候,文件是分塊上傳的,如果不是ip_hash的話(huà),有可能會(huì)前面幾片被上傳到a服務(wù)器,后面幾片被上傳到b服務(wù)器,那么這樣子文件就不是完整的了,因此需要注意這個(gè)問(wèn)題。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員