{"id":491,"date":"2017-11-29T16:22:43","date_gmt":"2017-11-29T08:22:43","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=491"},"modified":"2017-11-29T16:22:43","modified_gmt":"2017-11-29T08:22:43","slug":"%e7%ba%bf%e4%b8%8anginx%e7%9a%84%e4%b8%80%e6%ac%a1no-live-upstreams-while-connecting-to-upstream-%e5%88%86%e6%9e%90","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=491","title":{"rendered":"\u7ebf\u4e0anginx\u7684\u4e00\u6b21\u201cno live upstreams while connecting to upstream \u201d\u5206\u6790"},"content":{"rendered":"<div class=\"artical-content-bak main-content editor-side-new\">\n<div class=\"con editor-preview-side\">\n<p>\u5148\u63cf\u8ff0\u4e00\u4e0b\u73af\u5883\uff0c\u524d\u6bb5\u7684\u8d1f\u8f7d\u5747\u8861\u8f6c\u53d1\u7ed9nginx\uff0cnginx\u518d\u8f6c\u53d1\u7ed9\u540e\u7aef\u7684\u5e94\u7528\u670d\u52a1\u5668\u3002<\/p>\n<p>nginx\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b\uff1a<\/p>\n<p class=\"p1\"><span class=\"s1\">upstream ads {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 server ap1:8888 max_fails=1 fail_timeout=60s;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 server ap2:8888 max_fails=1 fail_timeout=60s;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">}<\/span><\/p>\n<p>\u51fa\u73b0\u7684\u73b0\u8c61\u662f\uff1a<\/p>\n<p class=\"p1\"><span class=\"s1\">\u65e5\u5fd7\u91cc\u9762\u6bcf\u9694\u4e00\u4e24\u5206\u949f\u5c31\u4f1a\u8bb0\u5f55\u4e00\u6761\u7c7b\u4f3c *379803415 no live upstreams while connecting to upstream\u00a0 \u7684\u65e5\u5fd7\uff0c<\/span><\/p>\n<p class=\"p1\">\u6b64\u5916\uff0c\u8fd8\u6709\u5927\u91cf\u7684\u201cupstream prematurely closed connection while reading response header from upstream\u201d\u7684\u65e5\u5fd7\u3002<\/p>\n<p>\u6211\u4eec\u5148\u770b\u201cno live upstreams\u201d\u7684\u95ee\u9898\u3002<\/p>\n<p>\u770b\u5b57\u9762\u610f\u601d\u662fnginx\u53d1\u73b0\u6ca1\u6709\u5b58\u6d3b\u7684\u540e\u7aef\u4e86\uff0c\u4f46\u662f\u5f88\u5947\u602a\u7684\u4e8b\u60c5\u662f\uff0c\u8fd9\u6bb5\u65f6\u95f4\u4e00\u76f4\u8bbf\u95ee\u90fd\u6b63\u5e38\uff0c\u5e76\u4e14\u7528wireshark\u770b\u5230\u7684\u4e5f\u662f\u6709\u8fdb\u6765\u7684\uff0c\u4e5f\u6709\u8fd4\u56de\u7684\u3002<\/p>\n<p>\u73b0\u5728\u53ea\u80fd\u4ecenginx\u6e90\u7801\u7684\u89d2\u5ea6\u6765\u770b\u4e86\u3002<\/p>\n<p class=\"p1\"><span class=\"s1\">\u56e0\u4e3a\u662fupstream\u6709\u5173\u7684\u62a5\u9519\uff0c\u6240\u4ee5\u5728ngx_http_upstream.c\u4e2d\u67e5\u627e\u201cno live upstreams\u201d\u7684\u5173\u952e\u5b57\uff0c\u53ef\u4ee5\u627e\u5230\u5982\u4e0b\u4ee3\u7801\uff08\u5176\u5b9e\uff0c\u4f60\u4f1a\u53d1\u73b0\uff0c\u5982\u679c\u5728nginx\u5168\u5c40\u4ee3\u7801\u4e2d\u627e\u7684\u8bdd\uff0c\u4e5f\u53ea\u6709\u8fd9\u4e2a\u6587\u4ef6\u91cc\u9762\u6709\u8fd9\u4e2a\u5173\u952e\u5b57\uff09\uff1a\u00a0<\/span><\/p>\n<p><a href=\"http:\/\/s3.51cto.com\/wyfs02\/M02\/72\/6A\/wKiom1XjE1HQ12ybAAQxHYe97qs267.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"\u5c4f\u5e55\u5feb\u7167 2015-08-17 \u4e0a\u53481.35.01.png\" src=\"http:\/\/s3.51cto.com\/wyfs02\/M02\/72\/6A\/wKiom1XjE1HQ12ybAAQxHYe97qs267.jpg\" alt=\"wKiom1XjE1HQ12ybAAQxHYe97qs267.jpg\" \/><\/a><\/p>\n<p class=\"p1\"><span class=\"s1\">\u5728\u8fd9\u91cc\u53ef\u4ee5\u770b\u51fa\uff0c\u5f53rc\u7b49\u4e8eNGX_BUSY\u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u8bb0\u5f55\u201cno live upstreams\u201d\u7684\u9519\u8bef\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u5f80\u4e0a\u770b1328\u884c\uff0c\u53ef\u4ee5\u53d1\u73b0rc\u7684\u503c\u53c8\u662fngx_event_connect_peer\u8fd9\u4e2a\u51fd\u6570\u8fd4\u56de\u7684\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">ngx_event_connect_peer\u662f\u5728event\/ngx_event_connect.c\u4e2d\u5b9e\u73b0\u7684\u3002\u8fd9\u4e2a\u51fd\u6570\u4e2d\uff0c\u53ea\u6709\u8fd9\u4e2a\u5730\u65b9\u4f1a\u8fd4\u56deNGX_BUSY\uff0c\u5176\u4ed6\u5730\u65b9\u90fd\u662fNGX_OK\u6216\u8005NGX_ERROR\u6216\u8005NGX_AGAIN\u4e4b\u7c7b\u7684\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0rc = pc-&gt;get(pc, pc-&gt;data);<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 if (rc != NGX_OK) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 return rc;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u8fd9\u91cc\u7684pc\u662f\u6307\u5411ngx_peer_connection_t\u7ed3\u6784\u4f53\u7684\u6307\u9488\uff0c get\u662f\u4e2angx_event_get_peer_pt\u7684\u51fd\u6570\u6307\u9488\uff0c\u5177\u4f53\u6307\u5411\u54ea\u91cc\uff0c\u4e00\u65f6\u65e0\u4ece\u5f97\u77e5\u3002\u63a5\u7740\u7ffb\u770bngx_http_upstream.c<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u5728ngx_http_upstream_init_main_conf\u4e2d\u770b\u5230\u4e86\uff0c\u5982\u4e0b\u4ee3\u7801\uff1a<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 uscfp = umcf-&gt;upstreams.elts;<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 for (i = 0; i &lt; umcf-&gt;upstreams.nelts; i++) {<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 \u00a0 \u00a0 init = uscfp[i]-&gt;peer.init_upstream ? uscfp[i]-&gt;peer.init_upstream:<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ngx_http_upstream_init_round_robin;<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 \u00a0 \u00a0 if (init(cf, uscfp[i]) != NGX_OK) {<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return NGX_CONF_ERROR;<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p3\"><span class=\"s2\">\u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\uff0c\u9ed8\u8ba4\u7684\u914d\u7f6e\u4e3a\u8f6e\u8be2\uff08\u4e8b\u5b9e\u4e0a\u8d1f\u8f7d\u5747\u8861\u7684\u5404\u4e2a\u6a21\u5757\u7ec4\u6210\u4e86\u4e00\u4e2a\u94fe\u8868\uff0c\u6bcf\u6b21\u4ece\u94fe\u8868\u5230\u5934\u5f00\u59cb\u5f80\u540e\u5904\u7406\uff0c\u4ece\u4e0a\u9762\u5230\u914d\u7f6e\u6587\u4ef6\u53ef\u4ee5\u770b\u51fa\uff0cnginx\u4e0d\u4f1a\u5728\u8f6e\u8be2\u524d\u8c03\u7528\u5176\u4ed6\u7684\u6a21\u5757\uff09\uff0c\u5e76\u4e14\u7528ngx_http_upstream_init_round_robin\u521d\u59cb\u5316\u6bcf\u4e2aupstream\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u518d\u770bngx_http_upstream_init_round_robin\u51fd\u6570\uff0c\u91cc\u9762\u6709\u5982\u4e0b\u884c\uff1a<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">r-&gt;upstream-&gt;peer.get = ngx_http_upstream_get_round_robin_peer;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8fd9\u91cc\u628aget\u6307\u9488\u6307\u5411\u4e86ngx_http_upstream_get_round_robin_peer<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u5728ngx_http_upstream_get_round_robin_peer\u4e2d\uff0c\u53ef\u4ee5\u770b\u5230\uff1a<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 if (peers-&gt;single) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 peer = &amp;peers-&gt;peer[0];<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 if (peer-&gt;down) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 goto failed;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 } else {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \/* there are several peers *\/<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 peer = ngx_http_upstream_get_peer(rrp);<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 if (peer == NULL) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 goto failed;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u518d\u770b\u770bfailed\u7684\u90e8\u5206\uff1a<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">failed:<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 if (peers-&gt;next) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \/* ngx_unlock_mutex(peers-&gt;mutex); *\/<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc-&gt;log, 0, &#8220;backup servers&#8221;);<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 rrp-&gt;peers = peers-&gt;next;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 n = (rrp-&gt;peers-&gt;number + (8 * sizeof(uintptr_t) &#8211; 1))<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/ (8 * sizeof(uintptr_t));<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 for (i = 0; i &lt; n; i++) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 rrp-&gt;tried[i] = 0;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 rc = ngx_http_upstream_get_round_robin_peer(pc, rrp);<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 if (rc != NGX_BUSY) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return rc;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 \/* ngx_lock_mutex(peers-&gt;mutex); *\/<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \/* all peers failed, mark them as live for quick recovery *\/<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 for (i = 0; i &lt; peers-&gt;number; i++) {<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \u00a0 \u00a0 peers-&gt;peer[i].fails = 0;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 }<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 \/* ngx_unlock_mutex(peers-&gt;mutex); *\/<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 pc-&gt;name = peers-&gt;name;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u00a0 \u00a0 return NGX_BUSY;<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8fd9\u91cc\u5c31\u771f\u76f8\u5927\u767d\u4e86\uff0c\u5982\u679c\u8fde\u63a5\u5931\u8d25\u4e86\uff0c\u5c31\u53bb\u5c1d\u8bd5\u8fde\u4e0b\u4e00\u4e2a\uff0c\u5982\u679c\u6240\u6709\u7684\u90fd\u5931\u8d25\u4e86\uff0c\u5c31\u4f1a\u8fdb\u884cquick recovery\u00a0 \u628a\u6bcf\u4e2apeer\u7684\u5931\u8d25\u6b21\u6570\u90fd\u91cd\u7f6e\u4e3a0\uff0c\u7136\u540e\u518d\u8fd4\u56de\u4e00\u4e2aNGX_BUSY\uff0c\u7136\u540enginx\u5c31\u4f1a\u6253\u5370\u4e00\u6761no live upstreams ,\u6700\u540e\u53c8\u56de\u5230\u539f\u59cb\u72b6\u6001\uff0c\u63a5\u7740\u8fdb\u884c\u8f6c\u53d1\u4e86\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8fd9\u5c31\u89e3\u91ca\u4e86no live upstreams\u4e4b\u540e\u8fd8\u80fd\u6b63\u5e38\u8bbf\u95ee\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u91cd\u65b0\u770b\u914d\u7f6e\u6587\u4ef6\uff0c\u5982\u679c\u5176\u4e2d\u4e00\u53f0\u6709\u4e00\u6b21\u5931\u8d25\uff0cnginx\u5c31\u4f1a\u8ba4\u4e3a\u5b83\u5df2\u7ecf\u6b7b\u6389\uff0c\u7136\u540e\u5c31\u4f1a\u628a\u4ee5\u540e\u7684\u6d41\u91cf\u5168\u90fd\u6253\u5230\u53e6\u4e00\u53f0\u4e0a\u9762\uff0c\u5f53\u53e6\u5916\u4e00\u53f0\u4e5f\u6709\u4e00\u6b21\u5931\u8d25\u7684\u65f6\u5019\uff0c\u5c31\u8ba4\u4e3a\u4e24\u4e2a\u90fd\u6b7b\u6389\u4e86\uff0c\u7136\u540equick recovery\uff0c\u7136\u540e\u6253\u5370\u4e00\u6761\u65e5\u5fd7\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8fd9\u6837\u5e26\u6765\u7684\u53e6\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5982\u679c\u51e0\u53f0\u540c\u65f6\u8ba4\u5b9a\u4e00\u53f0\u540e\u7aef\u5df2\u7ecf\u6b7b\u6389\u7684\u65f6\u5019\uff0c\u4f1a\u9020\u6210\u6d41\u91cf\u7684\u4e0d\u5747\u8861\uff0c\u770bzabbix\u76d1\u63a7\u7684\u622a\u56fe\u4e5f\u80fd\u770b\u51fa\u6765\uff1a<\/span><\/p>\n<p><a href=\"http:\/\/s3.51cto.com\/wyfs02\/M01\/72\/6A\/wKiom1XjFjmT6U62AAQz7MPocGQ650.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"\u5c4f\u5e55\u5feb\u7167 2015-08-15 \u4e0a\u534810.33.13.png\" src=\"http:\/\/s3.51cto.com\/wyfs02\/M01\/72\/6A\/wKiom1XjFjmT6U62AAQz7MPocGQ650.jpg\" alt=\"wKiom1XjFjmT6U62AAQz7MPocGQ650.jpg\" \/><\/a><\/p>\n<p><a href=\"http:\/\/s3.51cto.com\/wyfs02\/M02\/72\/67\/wKioL1XjGFnjK_H_AAMiVUUNS8o299.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"\u5c4f\u5e55\u5feb\u7167 2015-08-15 \u4e0a\u534810.33.31.png\" src=\"http:\/\/s3.51cto.com\/wyfs02\/M02\/72\/67\/wKioL1XjGFnjK_H_AAMiVUUNS8o299.jpg\" alt=\"wKioL1XjGFnjK_H_AAMiVUUNS8o299.jpg\" \/><\/a><\/p>\n<p class=\"p1\"><span class=\"s1\">\u521d\u6b65\u7684\u89e3\u51b3\u65b9\u6cd5\uff1a<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u628amax_fails\u4ece1\u6539\u62105\uff0c\u6548\u679c\u5f88\u660e\u663e\uff0c\u201cno live upstreams\u201d\u51fa\u73b0\u7684\u6982\u7387\u53d8\u5c11\u4e86\u5f88\u591a\uff0c\u4f46\u5374\u6ca1\u6709\u5b8c\u5168\u6d88\u5931\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u53e6\u5916\uff0c\u65e5\u5fd7\u91cc\u9762\u8fd8\u4f1a\u6709\u5927\u91cf\u7684\u201cupstream prematurely closed connection while reading response header from upstream\u201d\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8fd9\u6b21\u4ece\u6e90\u7801\u4e0a\u770b\uff0c\u5728\u6267\u884cngx_http_upstream_process_header\u8fd9\u4e2a\u51fd\u6570\u7684\u65f6\u5019\uff0c\u4f1a\u62a5\u8fd9\u4e2a\u9519\uff0c\u4f46\u5177\u4f53\u662f\u7f51\u7edc\u539f\u56e0\u8fd8\u662f\u5176\u4ed6\u539f\u56e0\u4e0d\u662f\u5f88\u660e\u663e\uff0c\u4e0b\u9762\u5c31tcpdump\u6293\u4e00\u4e0b\u5305\u3002<\/span><\/p>\n<p><a href=\"http:\/\/s3.51cto.com\/wyfs02\/M00\/72\/67\/wKioL1XjHBWzhnw9AALGNeKxURA038.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"BF24351F-33A1-4117-8DEA-9878FDBF2013.png\" src=\"http:\/\/s3.51cto.com\/wyfs02\/M00\/72\/67\/wKioL1XjHBWzhnw9AALGNeKxURA038.jpg\" alt=\"wKioL1XjHBWzhnw9AALGNeKxURA038.jpg\" \/><\/a><\/p>\n<p>\u5176\u4e2d54\u662fnginx\u524d\u7aef\u7684\u8d1f\u8f7d\u5747\u8861\u7684\u5730\u5740\uff0c171\u662fnginx\u5730\u5740\uff0c32\u662fap1\u7684\u5730\u5740\uff0c\u53e6\u5916ap2\u7684\u5730\u5740\u662f201<\/p>\n<p class=\"p1\"><span class=\"s1\">\u5982\u622a\u56fe\u6240\u793a\uff1a<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u8bf7\u6c42\u7531\u8d1f\u8f7d\u5747\u8861\u53d1\u5230nginx\u4e0a\uff0cnginx\u5148\u662f\u56de\u5e94ack\u7ed9\u8d1f\u8f7d\u5747\u8861\uff0c\u7136\u540e\u8ddfap1\u8fdb\u884c\u4e09\u6b21\u63e1\u624b\uff0c\u968f\u540e\u53d1\u9001\u4e86\u4e00\u4e2a\u957f\u5ea6\u4e3a614\u7684\u6570\u636e\u5305\u7ed9ap1.\u7136\u800c\u5374\u6536\u5230\u4e86\u4e00\u4e2aack\u548cfin\uff0back\uff0c\u4eceAck\uff1d615\u53ef\u4ee5\u770b\u51fa\uff0c\u8fd9\u4e24\u4e2a\u5305\u90fd\u662f\u9488\u5bf9\u957f\u5ea6\u4e3a614\u7684\u6570\u636e\u5305\u7684\u56de\u5e94\uff0c\u540e\u7aefapp\u76f4\u63a5\u5c31\u628a\u8fde\u63a5\u7ed9\u5173\u95ed\u6389\u4e86\uff01<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u518d\u7136\u540e\uff0cnginx\u56de\u5e94\u7ed9\u540e\u7aef\u7684app\u4e00\u4e2aack\u548cfin\uff0back\uff0c\u4eceAck=2\u53ef\u4ee5\u770b\u51fa\u8fd9\u662f\u5bf9fin\uff0back\u7684\u56de\u5e94\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u518d\u7136\u540e\uff0cnginx\u5c31\u5411ap2<\/span>\u53d1\u51fa\u4e86\u4e00\u4e2asyn\u5305\uff0c\u5e76\u4e14\u4e5f\u6536\u5230\u4e86\u7b2c\u4e00\u53f0\u8fd4\u56de\u7684ack\u3002<\/p>\n<p class=\"p1\"><span class=\"s1\">\u7b2c\u4e8c\u5f20\u56fe\uff1a<\/span><\/p>\n<p><a href=\"http:\/\/s3.51cto.com\/wyfs02\/M02\/72\/67\/wKioL1XjHe-x42gjAAIkp1PCews141.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"F3722AFB-C06B-4F22-A7EF-51D34F63F299.png\" src=\"http:\/\/s3.51cto.com\/wyfs02\/M02\/72\/67\/wKioL1XjHe-x42gjAAIkp1PCews141.jpg\" alt=\"wKioL1XjHe-x42gjAAIkp1PCews141.jpg\" \/><\/a><\/p>\n<p class=\"p1\"><span class=\"s1\">\u5982\u56fe\uff0c\u53ef\u4ee5\u770b\u51fa\uff0cnginx\u8ddfap2\u4e09\u6b21\u63e1\u624b\u540e\uff0c\u4e5f\u53d1\u9001\u4e86\u4e00\u4e2a\u8bf7\u6c42\u7684\u6570\u636e\u5305\uff0c\u540c\u6837\u88ab\u76f4\u63a5\u5173\u95ed\u8fde\u63a5\u4e86\u3002<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">\u968f\u540e\uff0cnginx\u5c31\u628a502\u8fd4\u56de\u7ed9\u4e86\u8d1f\u8f7d\u5747\u8861\u3002<\/span><\/p>\n<p>\u8fd9\u91cc\u7684\u6293\u5305\u53c8\u4e00\u6b21\u4ece\u4fa7\u9762\u652f\u6301\u4e86\u4e0a\u9762\u4ee3\u7801\u7684\u5206\u6790\u3002<\/p>\n<p>\u7136\u540e\u628a\u95ee\u9898\u53cd\u9988\u7ed9\u505a\u540e\u7aef\u5e94\u7528\u7684\u540c\u4e8b\u4e86\u3002<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5148\u63cf\u8ff0\u4e00\u4e0b\u73af\u5883\uff0c\u524d\u6bb5\u7684\u8d1f\u8f7d\u5747\u8861\u8f6c\u53d1\u7ed9nginx\uff0cnginx\u518d\u8f6c\u53d1\u7ed9\u540e\u7aef\u7684\u5e94\u7528\u670d\u52a1\u5668\u3002 nginx\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b\uff1a upstream ads { \u00a0 \u00a0 \u00a0 \u00a0 server ap1:8888 max_fails=1 fail_timeout=60s; \u00a0 \u00a0 \u00a0 \u00a0 server ap2:8888 max_fails=1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-491","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=491"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/491\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}