Nginx是一款高性能的 HTTP 和反向代理服務(wù)器,由俄羅斯人Igor Sysoev(伊戈?duì)枴べ愃饕颍槎砹_斯網(wǎng)站http://Rambler.ru開(kāi)發(fā)的,在http://Rambler.ru網(wǎng)站平穩(wěn)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > Nginx正向代理、反向代理、負(fù)載均衡及性能優(yōu)化

Nginx正向代理、反向代理、負(fù)載均衡及性能優(yōu)化

時(shí)間:2023-07-14 06:18:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-07-14 06:18:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

Nginx正向代理、反向代理、負(fù)載均衡及性能優(yōu)化:一、Nginx是什么

Nginx是一款高性能的 HTTP 和反向代理服務(wù)器,由俄羅斯人Igor Sysoev(伊戈?duì)枴べ愃饕颍槎砹_斯網(wǎng)站http://Rambler.ru開(kāi)發(fā)的,在http://Rambler.ru網(wǎng)站平穩(wěn)的運(yùn)行了四年,而且俄羅斯超過(guò)20%的虛擬主機(jī)平臺(tái)采用Nginx作為反向代理服務(wù)器。

在國(guó)內(nèi),使用nginx網(wǎng)站有:百度、京東、金山愛(ài)詞霸、新浪、校內(nèi)網(wǎng)、淘寶、YUPOO相冊(cè)、豆瓣、迅雷看看、網(wǎng)易、騰訊等。

文章視頻講解:

Nginx應(yīng)用場(chǎng)景分析:靜態(tài)web服務(wù)、反向代理、正向代理、負(fù)載均衡

C/C++Linux服務(wù)器開(kāi)發(fā)高級(jí)架構(gòu)師,免費(fèi)學(xué)習(xí)資料點(diǎn)擊:

二、Nginx的優(yōu)點(diǎn)

三、Nginx的缺點(diǎn)

四、正向代理

正向代理類(lèi)似一個(gè)跳板機(jī),代理訪問(wèn)外部資源。

舉個(gè)例子:

  我是一個(gè)用戶,我訪問(wèn)不了某網(wǎng)站,但是我能訪問(wèn)一個(gè)代理服務(wù)器,這個(gè)代理服務(wù)器呢,他能訪問(wèn)那個(gè)我不能訪問(wèn)的網(wǎng)站,于是我先連上代理服務(wù)器,告訴他我需要那個(gè)無(wú)法訪問(wèn)網(wǎng)站的內(nèi)容,代理服務(wù)器去取回來(lái),然后返回給我。從網(wǎng)站的角度,只在代理服務(wù)器來(lái)取內(nèi)容的時(shí)候有一次記錄,有時(shí)候并不知道是用戶的請(qǐng)求,也隱藏了用戶的資料,這取決于代理告不告訴網(wǎng)站。

  客戶端必須設(shè)置正向代理服務(wù)器,當(dāng)然前提是要知道正向代理服務(wù)器的IP地址,還有代理程序的端口。

總結(jié)來(lái)說(shuō):

  正向代理是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端??蛻舳吮仨氁M(jìn)行一些特別的設(shè)置才能使用正向代理。

正向代理的用途:

五、反向代理

  對(duì)于反向代理來(lái)說(shuō),客戶端是無(wú)感知代理的存在的,反向代理對(duì)外都是透明的,訪問(wèn)者者并不知道自己訪問(wèn)的是一個(gè)代理。因?yàn)榭蛻舳瞬恍枰魏闻渲镁涂梢栽L問(wèn)。

  反向代理(Reverse Proxy)實(shí)際運(yùn)行方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。

反向代理的作用:

二者的區(qū)別:

C/C++Linux服務(wù)器開(kāi)發(fā)高級(jí)架構(gòu)師學(xué)習(xí)文檔電子書(shū)籍 點(diǎn)擊 linux服務(wù)器學(xué)習(xí)資料 獲取,內(nèi)容知識(shí)點(diǎn)包括Linux,Nginx,ZeroMQ,MySQL,Redis,線程池,MongoDB,ZK,Linux內(nèi)核,CDN,P2P,epoll,Docker,TCP/IP,協(xié)程,DPDK等等。學(xué)習(xí)視頻點(diǎn)擊:

六、負(fù)載均衡及反向代理配置

負(fù)載均衡

反向代理

七、性能優(yōu)化

一般來(lái)說(shuō)nginx配置文件中對(duì)優(yōu)化比較有作用的為以下幾項(xiàng):

1、worker_processes 8

nginx進(jìn)程數(shù),建議按照cpu數(shù)目來(lái)指定,一般為它的倍數(shù)

2、worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

為每個(gè)進(jìn)程分配cpu,上例中將8個(gè)進(jìn)程分配到8個(gè)cpu,當(dāng)然可以寫(xiě)多個(gè),或者將一個(gè)進(jìn)程分配到多個(gè)cpu

3、worker_rlimit_nofile 102400

這個(gè)指令是指當(dāng)一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻,所以最好與ulimit -n的值保持一致

4、use epoll

使用epoll的I/O模型,用這個(gè)模型來(lái)高效處理異步事件

5、worker_connections 102400

每個(gè)進(jìn)程允許的最多連接數(shù),理論上每臺(tái)nginx服務(wù)器的最杭州接數(shù)為:worker_processes*worker_connections

6、keepalive_timeout 60

http連接超時(shí)時(shí)間,默認(rèn)是60s,功能是使客戶端到服務(wù)器端的連接在設(shè)定的時(shí)間內(nèi)持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),該功能避免了建立或者重新建立連接。切記這個(gè)參數(shù)也不能設(shè)置過(guò)大!否則會(huì)導(dǎo)致許多無(wú)效的http連接占據(jù)著nginx的連接數(shù),終nginx崩潰!

7、client_header_buffer_size 4k

客戶端請(qǐng)求頭部的緩沖區(qū)大小,這個(gè)可以根據(jù)你的系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求的頭部大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k,所以這里設(shè)置為分頁(yè)大小。分頁(yè)大小可以用命令getconf PAGESIZE取得

8、open_file_cache max=102400 inactive=20s

這個(gè)將為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的,max指定緩存數(shù)量,建議和打開(kāi)文件數(shù)一致,inactive是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存

9、open_file_cache_valid 30s

這個(gè)是指多長(zhǎng)時(shí)間檢查一次緩存的有效信息

10、open_file_cache_min_uses 1

open_file_cache指令中的inactive參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù),如果超過(guò)這個(gè)數(shù)字,文件描述符一直是在緩存中打開(kāi)的,如上例,如果有一個(gè)文件在inactive時(shí)間內(nèi)一次沒(méi)被使用,它將被移除

11、server_tokens off

隱藏響應(yīng)頭中的有關(guān)操作系統(tǒng)和web server(Nginx)版本號(hào)的信息,這樣對(duì)于安全性是有好處的

下面是一個(gè)簡(jiǎn)單的nginx配置文件:

user www www;worker_processes 8;worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;error_log /www/log/nginx_error.log crit;pid /usr/local/nginx/nginx.pid;worker_rlimit_nofile 204800;events{ use epoll; worker_connections 204800;}http{ include mime.types; default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 2k; large_client_header_buffers 4 4k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 16k; fastcgi_buffers 16 16k; fastcgi_busy_buffers_size 16k; fastcgi_temp_file_write_size 16k; fastcgi_cache TEST; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; open_file_cache max=204800 inactive=20s; open_file_cache_min_uses 1; open_file_cache_valid 30s; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 8080; server_name backup.aiju.com; index index.php index.htm; root /www/html/; location /status { stub_status on; } location ~ .*/.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /www/log/access.log access; }}關(guān)于內(nèi)核參數(shù)的優(yōu)化(在/etc/sysctl.conf文件內(nèi)):

1、net.ipv4.tcp_max_tw_buckets = 6000

timewait的數(shù)量,默認(rèn)是180000。(Deven:因此如果想把timewait降下了就要把tcp_max_tw_buckets值減小)

2、net.ipv4.ip_local_port_range = 1024 65000

允許系統(tǒng)打開(kāi)的端口范圍

3、net.ipv4.tcp_tw_recycle = 0

啟用TIME-WAIT狀態(tài)sockets快速回收功能;用于快速減少在TIME-WAIT狀態(tài)TCP連接數(shù)。1表示啟用;0表示關(guān)閉。但是要特別留意的是:這個(gè)選項(xiàng)一般不推薦啟用,因?yàn)樵贜AT(Network Address Translation)網(wǎng)絡(luò)下,會(huì)導(dǎo)致大量的TCP連接建立錯(cuò)誤,從而引起網(wǎng)站訪問(wèn)故障

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

實(shí)際上,net.ipv4.tcp_tw_recycle功能的開(kāi)啟,要需要net.ipv4.tcp_timestamps(一般系統(tǒng)默認(rèn)是開(kāi)啟這個(gè)功能的)這個(gè)開(kāi)關(guān)開(kāi)啟后才有效果;
當(dāng)tcp_tw_recycle 開(kāi)啟時(shí)(tcp_timestamps 同時(shí)開(kāi)啟,快速回收 socket 的效果達(dá)到),對(duì)于位于NAT設(shè)備后面的 Client來(lái)說(shuō),是一場(chǎng)災(zāi)難!
會(huì)導(dǎo)致到NAT設(shè)備后面的Client連接Server不穩(wěn)定(有的 Client 能連接 server,有的 Client 不能連接 server)。
也就是說(shuō),tcp_tw_recycle這個(gè)功能,是為內(nèi)部網(wǎng)絡(luò)(網(wǎng)絡(luò)環(huán)境自己可控 ” ——不存在NAT 的情況)設(shè)計(jì)的,對(duì)于公網(wǎng)環(huán)境下,不宜使用。
通常來(lái)說(shuō),回收TIME_WAIT狀態(tài)的socket是因?yàn)椤盁o(wú)法主動(dòng)連接遠(yuǎn)端”,因?yàn)闊o(wú)可用的端口,而不應(yīng)該是要回收內(nèi)存(沒(méi)有必要)。
即:需求是Client的需求,Server會(huì)有“端口不夠用”的問(wèn)題嗎?
除非是前端機(jī),需要大量的連接后端服務(wù),也就是充當(dāng)著Client的角色。

正確的解決這個(gè)總是辦法應(yīng)該是:
net.ipv4.ip_local_port_range = 9000 6553 #默認(rèn)值范圍較小
net.ipv4.tcp_max_tw_buckets = 10000 #默認(rèn)值較小,還可適當(dāng)調(diào)小
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

4、net.ipv4.tcp_tw_reuse = 1

開(kāi)啟重用功能,允許將TIME-WAIT狀態(tài)的sockets重新用于新的TCP連接。這個(gè)功能啟用是安全的,一般不要去改動(dòng)!

5、net.ipv4.tcp_syncookies = 1

開(kāi)啟SYN Cookies,當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理

6、net.core.somaxconn = 262144

Web應(yīng)用中l(wèi)isten函數(shù)的backlog默認(rèn)會(huì)給我們內(nèi)核參數(shù)的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認(rèn)為511,所以有必要調(diào)整這個(gè)值

7、net.core.netdev_max_backlog = 262144

每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目

8、net.ipv4.tcp_max_orphans = 262144

系統(tǒng)中最多有多少個(gè)TCP套接字不被關(guān)聯(lián)到任何一個(gè)用戶文件句柄上。如果超過(guò)這個(gè)數(shù)字,孤兒連接將即刻被復(fù)位并打印出警告信息。這個(gè)限制僅僅是為了防止簡(jiǎn)單的DoS攻擊,不能過(guò)分依靠它或者人為地減小這個(gè)值,更應(yīng)該增加這個(gè)值(如果增加了內(nèi)存之后)

9、net.ipv4.tcp_max_syn_backlog = 262144

錄的那些尚未收到客戶端確認(rèn)信息的連接請(qǐng)求的最大值。對(duì)于有128M內(nèi)存的系統(tǒng)而言,缺省值是1024,小內(nèi)存的系統(tǒng)則是128

10、net.ipv4.tcp_timestamps = 1

時(shí)間戳可以避免序列號(hào)的卷繞。一個(gè)1Gbps的鏈路肯定會(huì)遇到以前用過(guò)的序列號(hào)。時(shí)間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉。

11、net.ipv4.tcp_synack_retries = 1

為了打開(kāi)對(duì)端的連接,內(nèi)核需要發(fā)送一個(gè)SYN并附帶一個(gè)回應(yīng)前面一個(gè)SYN的ACK。也就是所謂三次握手中的第二次握手。這個(gè)設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量

12、net.ipv4.tcp_syn_retries = 1

在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量

13、net.ipv4.tcp_fin_timeout = 30

如果套接字由本端要求關(guān)閉,這個(gè)參數(shù) 決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。對(duì)端可以出錯(cuò)并永遠(yuǎn)不關(guān)閉連接,甚至意外當(dāng)機(jī)。缺省值是60秒。2.2 內(nèi)核的通常值是180秒,你可以按這個(gè)設(shè)置,但要記住的是,即使你的機(jī)器是一個(gè)輕載的WEB服務(wù)器,也有因?yàn)榇罅康乃捞捉幼侄鴥?nèi)存溢出的風(fēng)險(xiǎn),F(xiàn)IN- WAIT-2的危險(xiǎn)性比FIN-WAIT-1要小,因?yàn)樗疃嘀荒艹缘?.5K內(nèi)存,但是它們的生存期長(zhǎng)些

14、net.ipv4.tcp_keepalive_time = 30

當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí)

下面貼出一個(gè)常用的內(nèi)核參數(shù)的標(biāo)準(zhǔn)配置:

1 net.ipv4.ip_forward = 0 2 net.ipv4.conf.default.rp_filter = 1 3 net.ipv4.conf.default.accept_source_route = 0 4 kernel.sysrq = 0 5 kernel.core_uses_pid = 1 6 net.ipv4.tcp_syncookies = 1 7 kernel.msgmnb = 65536 8 kernel.msgmax = 65536 9 kernel.shmmax = 6871947673610 kernel.shmall = 429496729611 net.ipv4.tcp_max_tw_buckets = 600012 net.ipv4.tcp_sack = 113 net.ipv4.tcp_window_scaling = 114 net.ipv4.tcp_rmem = 4096 87380 419430415 net.ipv4.tcp_wmem = 4096 16384 419430416 net.core.wmem_default = 838860817 net.core.rmem_default = 838860818 net.core.rmem_max = 1677721619 net.core.wmem_max = 1677721620 net.core.netdev_max_backlog = 26214421 net.core.somaxconn = 26214422 net.ipv4.tcp_max_orphans = 327680023 net.ipv4.tcp_max_syn_backlog = 26214424 net.ipv4.tcp_timestamps = 025 net.ipv4.tcp_synack_retries = 126 net.ipv4.tcp_syn_retries = 127 net.ipv4.tcp_tw_recycle = 128 net.ipv4.tcp_tw_reuse = 129 net.ipv4.tcp_mem = 94500000 915000000 92700000030 net.ipv4.tcp_fin_timeout = 131 net.ipv4.tcp_keepalive_time = 3032 net.ipv4.ip_local_port_range = 1024 6500033 net.ipv4.ip_conntrack_max = 6553500

關(guān)鍵詞:代理,性能,負(fù)載,均衡

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉