中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Nginx中實現反向代理并支持長連接

發布時間:2021-03-10 16:51:58 來源:億速云 閱讀:230 作者:Leah 欄目:服務器

怎么在Nginx中實現反向代理并支持長連接?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

前言

Nginx upstream與后端的連接默認為短連接,通過HTTP/1.0向后端發起連接,并把請求的"Connection" header設為"close"。Nginx與前端的連接默認為長連接,一個用戶跟Nginx建立連接之后,通過這個長連接發送多個請求。如果Nginx只是作為reverse proxy的話,可能一個用戶連接就需要多個向后端的短連接。如果后端的服務器(源站或是緩存服務器)處理并發連接能力不強的話,就可能導致瓶頸的出現。

Nginx目前的upstream連接建立和獲取的機制如下圖。Nginx會在一開始創建connection pool(進程間不共享,可以避免鎖),提供給所有向前/后的連接。

怎么在Nginx中實現反向代理并支持長連接

如果要實現upstream長連接,則每個進程需要另外一個connection pool,里面都是長連接。一旦與后端服務器建立連接,則在當前請求連接結束之后不會立即關閉連接,而是把用完的連接保存在一個keepalive connection pool里面,以后每次需要建立向后連接的時候,只需要從這個連接池里面找,如果找到合適的連接的話,就可以直接來用這個連接,不需要重新創建socket或者發起connect()。這樣既省下建立連接時三次握手的時間消耗,又可以避免TCP連接的slow start。如果在keepalive連接池找不到合適的連接,那就按照原來的步驟重新建立連接。假設連接查找時間可以忽略不計,那么這種方法肯定是有益而無害的(當然,需要少量額外的內存)。

怎么在Nginx中實現反向代理并支持長連接

具體如何來設計這個keepalive connection pool,不同人有不同的選擇。比如Nginx目前的第三方模塊upstream keepalive(作者Maxim Dounin)使用了一個queue來做。因為upstream的服務器很可能是多個,所以可能當保持的連接數多的時候,查找的時間可能會較長。可以給每個upstream服務器都分配一個pool(queue),縮短查找時間。但是總體來說內存操作很快,影響不會很大。upstream keepalive模塊目前只支持memcached,但是可以重用其代碼來達到對http upstream的長連接。由于Nginx作者之前沒有考慮upstream的長連接,所以在設計上要把http upstream keepalive模塊化可能比較難,只能通過手動修改代碼來做到。

一個完整的讓upstream支持長連接的配置示例如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

#user nobody;

worker_processes 1;

 

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

 

#pid logs/nginx.pid;

 

 

events {

 worker_connections 1024;

}

 

 

http {

 include mime.types;

 default_type application/octet-stream;

 

 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

 #   '$status $body_bytes_sent "$http_referer" '

 #   '"$http_user_agent" "$http_x_forwarded_for"';

 

 #access_log logs/access.log main;

 

 client_max_body_size 20M;

 client_header_buffer_size 32k;

 large_client_header_buffers 4 32k;

 

 sendfile on;

 #tcp_nopush on;

 

 #keepalive_timeout 0;

 keepalive_timeout 65;

 

 #gzip on;

 

 proxy_buffer_size 64k;

 proxy_buffers 32 32k;

 proxy_busy_buffers_size 128k;

 

 upstream aauCfg_backend {

 server 127.0.0.1:97;

 keepalive 16;

 }

 

 upstream HFC_backend {

 server 127.0.0.1:8090;

 keepalive 16;

 }

 

 upstream manager_backend {

 server 127.0.0.1:8095;

 keepalive 16;

 }

 

 server {

 listen 80;

 server_name localhost;

 

 #charset koi8-r;

 

 #access_log logs/host.access.log main;

 

 root html/tools;

 index index.html index.htm index.php;

  

 proxy_http_version 1.1;

 proxy_set_header Connection "";

 proxy_set_header Host $host;

 proxy_set_header X-Real_IP $remote_addr;

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  

 location / {

  if (!-e $request_filename) {

  #rewrite ^/(.*)$ /index.php/$1 last;

  #break;

  rewrite ^/(.*)$ /index.php/$1;

  }

 }

  

 location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {

  expires max;

  log_not_found off;

 }

  

 location ^~ /aauCfg/ {

  #proxy_pass http://$remote_addr:97$request_uri;

  proxy_pass http://aauCfg_backend;

 }

  

 location ^~ /HFC/ {

  #proxy_pass http://$remote_addr:8090$request_uri;

  proxy_pass http://HFC_backend;

 }

  

 location ^~ /manager/ {

  #proxy_pass http://$remote_addr:8095$request_uri;

  proxy_pass http://manager_backend;

 }

  

 #error_page 404  /404.html;

 

 # redirect server error pages to the static page /50x.html

 #

 error_page 500 502 503 504 /50x.html;

 location = /50x.html {

  root html;

 }

 

 # proxy the PHP scripts to Apache listening on 127.0.0.1:80

 #

 #location ~ \.php$ {

 # proxy_pass http://127.0.0.1;

 #}

 

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

 #

 #location ~ \.php$ {

 # fastcgi_pass 127.0.0.1:9000;

 # fastcgi_index index.php;

 # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 # include fastcgi_params;

 #}

  

 location ~ .php

 {

  fastcgi_pass 127.0.0.1:9000;

  fastcgi_index index.php;

  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  include fastcgi.conf;

  include fastcgi_params;

 

  #定義變量 $path_info ,用于存放pathinfo信息

  set $path_info "";

  #定義變量 $real_script_name,用于存放真實地址

  set $real_script_name $fastcgi_script_name;

  #如果地址與引號內的正則表達式匹配

  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {

   #將文件地址賦值給變量 $real_script_name

   set $real_script_name $1;

   #將文件地址后的參數賦值給變量 $path_info

   set $path_info $2;

  }

  #配置fastcgi的一些參數

  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

  fastcgi_param SCRIPT_NAME $real_script_name;

  fastcgi_param PATH_INFO $path_info;

 }

 

 # deny access to .htaccess files, if Apache's document root

 # concurs with nginx's one

 #

 #location ~ /\.ht {

 # deny all;

 #}

 }

 

 

 # another virtual host using mix of IP-, name-, and port-based configuration

 #

 #server {

 # listen 8000;

 # listen somename:8080;

 # server_name somename alias another.alias;

 

 # location / {

 # root html;

 # index index.html index.htm;

 # }

 #}

 

 

 # HTTPS server

 #

 #server {

 # listen 443 ssl;

 # server_name localhost;

 

 # ssl_certificate cert.pem;

 # ssl_certificate_key cert.key;

 

 # ssl_session_cache shared:SSL:1m;

 # ssl_session_timeout 5m;

 

 # ssl_ciphers HIGH:!aNULL:!MD5;

 # ssl_prefer_server_ciphers on;

 

 # location / {

 # root html;

 # index index.html index.htm;

 # }

 #}

 

}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼玛县| 葫芦岛市| 拉萨市| 海南省| 永德县| 绵阳市| 丹凤县| 郑州市| 安西县| 西充县| 新宾| 宁明县| 天津市| 合山市| 武清区| 湖南省| 泾川县| 石楼县| 郴州市| 九龙县| 丰原市| 涿州市| 老河口市| 十堰市| 兰考县| 莒南县| 濮阳市| 商城县| 南昌市| 讷河市| 沈阳市| 西盟| 嘉峪关市| 黄陵县| 德化县| 柘城县| 庄浪县| 无为县| 河津市| 大方县| 南城县|