{ "version": "https://jsonfeed.org/version/1", "title": "OpenResty", "description": "A fast and scalable web application platform by extending NGINX with Lua", "home_page_url": "go/openresty", "feed_url": "feed/openresty.json", "icon": "https://cdn.v2ex.com/navatar/1595/af64/681_large.png?m=1562114168", "favicon": "https://cdn.v2ex.com/navatar/1595/af64/681_normal.png?m=1562114168", "items": [ { "author": { "url": "member/sujin190", "name": "sujin190", "avatar": "https://cdn.v2ex.com/avatar/e66f/964a/36127_large.png?m=1732868751" }, "url": "t/825037", "title": "\u5206\u4eab\u4e00\u4e2a\u5728 openresty \u642d\u5efa long polling \u63a8\u9001\u670d\u52a1\u7684\u914d\u7f6e\u6587\u4ef6", "id": "t/825037", "date_published": "2021-12-29T03:06:05+00:00", "content_html": "

https://gist.github.com/snower/8ad4c30b56e2ae4eede0b37b20fb1bd3

\n

\u8be6\u7ec6\u4e5f\u53ef\u770b https://segmentfault.com/a/1190000041190907

\n" }, { "author": { "url": "member/9yu", "name": "9yu", "avatar": "https://cdn.v2ex.com/avatar/793e/947e/54671_large.png?m=1776222719" }, "url": "t/803712", "title": "\u4e91\u539f\u751f\u7f51\u5173 Kong \u6e90\u7801\u5206\u6790", "id": "t/803712", "date_published": "2021-09-23T10:07:53+00:00", "content_html": "

\u6700\u5f00\u59cb\u52a0\u5165\u516c\u53f8 Infrastructure \u56e2\u961f\u65f6\uff0c\u8ff7\u832b\u7684\u6211\u63a5\u5230\u7684\u7684\u4e00\u4e2a\u4efb\u52a1\u5c31\u662f\u5b66\u4e60 Lua \u548c OpenResty\uff0c\u5f53\u65f6\u6536\u5230\u4e86\u4e24\u672c\u4e66\u7c4d\u7684 PDF \u6587\u4ef6\uff0c\u8981\u6c42\u5c3d\u5feb\u7406\u89e3\u5b66\u4e60\uff0c\u80fd\u591f\u638c\u63e1 Kong\uff0c\u5e76\u4e14\u5177\u6709\u7814\u53d1\u80fd\u529b\u3002

\n

\u5f53\u65f6\u6211\u8fd8\u6ca1\u6709\u600e\u4e48\u63a5\u89e6\u5f00\u6e90\u793e\u533a\uff0c\u80fd\u529b\u53ea\u505c\u7559\u5728 Git Clone\uff0c\u5927\u6982\u82b1\u4e86 2 \u5468\u65f6\u95f4\uff0c\u6211\u5b66\u4e60 Lua \u57fa\u672c\u8bed\u6cd5\u540e\uff0c\u5f00\u59cb\u9605\u8bfb Kong \u9879\u76ee\u7684\u6e90\u7801\uff0c\u5e76\u627e\u5230\u51e0\u4e2a\u5207\u5165\u70b9\u68b3\u7406\u4e86\u6e90\u7801\u5206\u6790\u6587\u6863\uff0c\u4e5f\u5e94\u8be5\u6b63\u662f\u8fd9\u4e2a\u6210\u679c\u8ba9\u7ec4\u957f\u8ba4\u540c\u4e86\u6211\uff0c\u8fd9\u4e4b\u540e\u6211\u8d1f\u8d23\u516c\u53f8 API Gateway \u7684\u5f00\u53d1\uff0c\u4ee5\u53ca\u76f8\u5173\u7684\u843d\u5730\u5de5\u4f5c\u3002

\n

\u90a3\u4e48\u672c\u6587\u9488\u5bf9 Kong \u7684\u542f\u52a8\u6d41\u7a0b\u3001\u63d2\u4ef6\u673a\u5236\u3001\u7f13\u5b58\u673a\u5236\u548c\u8bf7\u6c42\u7684\u751f\u547d\u5468\u671f\u505a\u4e86\u8be6\u7ec6\u7684\u9610\u8ff0\uff0c\u4e0d\u8fc7\u4ecd\u6709\u6b20\u7f3a\u7684\u662f\u4ee3\u7406\u8f6c\u53d1\u529f\u80fd\uff0c\u4f8b\u5982\u8d1f\u8f7d\u5747\u8861\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u670d\u52a1\u53d1\u73b0\u7b49\u3002

\n

\u4e2a\u4eba\u535a\u5ba2\uff1aMayo's Blog | Kong \u6e90\u7801\u5206\u6790

\n" }, { "author": { "url": "member/fxjson", "name": "fxjson", "avatar": "https://cdn.v2ex.com/gravatar/3699e3a269b5b051942d2e082a8b2ab2?s=73&d=retro" }, "url": "t/739254", "date_modified": "2020-12-26T12:11:43+00:00", "content_html": "

\u5076\u7136\u63a5\u89e6\u4e86 openresty\uff0c\u4e00\u4e2a\u5c06 lua \u5d4c\u5165 nginx \u7684\u4ea7\u54c1\uff0c\u53ef\u4ee5\u5f00\u53d1 api \u7f51\u5173\u4ee5\u53ca web \u5f00\u53d1\uff0c\u8fd9\u662f lua \u53c8\u4e00\u4e2a\u53ef\u4ee5\u5e94\u7528\u7684\u65b9\u5411\uff0c\u611f\u89c9\u4e0d\u9519\u5462\uff0c\u6709\u7528\u6765\u5f00\u53d1 web \u6216\u8005\u505a api \u7684 v \u53cb\u5417\uff1f

\n", "date_published": "2020-12-26T11:51:01+00:00", "title": "v2 \u6709\u6ca1\u6709\u7528 openresty \u5f00\u53d1\u7684\uff1f", "id": "t/739254" }, { "author": { "url": "member/Lpl", "name": "Lpl", "avatar": "https://cdn.v2ex.com/avatar/f6c5/0031/127835_large.png?m=1693553643" }, "url": "t/720295", "title": "OpenResty \u4f7f\u7528 ngx_balancer.set_current_peer() \u65b9\u6cd5\u4e0d\u80fd\u8bbe\u7f6e\u57df\u540d\uff0c\u90a3\u5bf9\u4e8e\u8f6c\u53d1\u5230\u67d0\u4e2a\u57df\u540d\u7684\u60c5\u51b5\u8981\u600e\u4e48\u505a\uff1f", "id": "t/720295", "date_published": "2020-10-30T10:21:41+00:00", "content_html": "

\u6587\u6863\u5730\u5740\uff1a https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/balancer.md#set_current_peer

\n
syntax: ok, err = balancer.set_current_peer(host, port)\n\ncontext: balancer_by_lua*\n\nSets the peer address (host and port) for the current backend query (which may be a retry).\n\nDomain names in host do not make sense. You need to use OpenResty libraries like lua-resty-dns to obtain IP address(es) from all the domain names before entering the balancer_by_lua* handler (for example, you can perform DNS lookups in an earlier phase like access_by_lua* and pass the results to the balancer_by_lua* handler via ngx.ctx.\n
\n

\u6309\u7167\u6b63\u5e38 nginx \u7684\u903b\u8f91\uff0cupstream \u4e2d\u662f\u53ef\u4ee5\u5199\u57df\u540d\u7684\u3002\u6b64\u5904 OpenResty \u6587\u6863\u8bf4\u4e0d\u80fd\u5199\u57df\u540d\uff0c\u4f46\u662f\u53ef\u4ee5\u7528 DNS \u628a\u57df\u540d\u7684 IP \u89e3\u6790\u51fa\u6765\u3002

\n

\u89e3\u6790 IP \u7684\u65b9\u5f0f\u5728\u660e\u663e\u4e0d\u7b26\u5408\u9700\u6c42\uff0c\u5047\u5982\u6211\u6709\u4e2a test.com \u7684\u57df\u540d\uff0c\u6307\u5411\u4e86\u67d0\u4e2a IP \u3002\u8fd9\u4e2a IP \u662f\u4e2a nginx\uff0c\u6839\u636e server_name \u6765\u533a\u5206\u8bf7\u6c42\u3002\u5982\u679c\u662f\u901a\u8fc7 IP \u8f6c\u53d1\u8fc7\u6765\u7684\u8bf7\u6c42\uff0c\u8bf7\u6c42\u5934\u91cc\u8fb9\u662f\u6ca1\u6709 Host \u7684\uff0c\u6240\u4ee5\u8bf7\u6c42\u5e76\u4e0d\u80fd\u6b63\u5e38\u8f6c\u53d1\u3002

\n

\u76ee\u524d\u4e0d\u8003\u8651\u4f7f\u7528 recreate_request \u65b9\u6cd5\u6765\u505a\uff0c\u6709\u6ca1\u6709\u4ec0\u4e48\u529e\u6cd5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff1f

\n" }, { "author": { "url": "member/mywaiting", "name": "mywaiting", "avatar": "https://cdn.v2ex.com/avatar/4f87/658e/1340_large.png?m=1733248338" }, "url": "t/438389", "date_modified": "2018-03-15T09:13:43+00:00", "content_html": "\u56e0\u4e3a\u5de5\u4f5c\u9700\u8981\uff0c\u4e3a\u540e\u7aef\u7684 API \u5199\u4e86\u4e2a\u7b80\u5355\u7684 Nginx lua \u53ef\u63a7\u7684\u4ee3\u7406\uff0c\u5c31\u51e0\u767e\u884c\u7684 Lua\uff0c\u8fb9\u6d4b\u8bd5\u8fb9\u5b66\u4e60\uff0c\u628a\u8fd9\u70b9 Openresty \u7684\u4ee3\u7801\u7ed9\u5199\u5b8c\u4e86~ \u867d\u7136\u540e\u6765\u53d1\u73b0\u6709 Kong \u8fd9\u6837\u4f18\u79c0\u7684\u9879\u76ee\uff0c\u4e0d\u8fc7\u4ee3\u7801\u4e5f\u4e0d\u591a\uff0c\u5c31\u5f53\u9020\u4e2a\u8f6e\u5b50\u4e86~\r
\r
\u4e0d\u77e5\u9053\u662f\u4e0d\u662f\u770b\u5230 Openresty \u7684\u6027\u80fd\u597d\u5565\uff0c\u8fd8\u662f\u5b8c\u7f8e\u7656\u53d1\u4f5c\u4e86\uff0c\u89c9\u5f97\u670d\u52a1\u5668\u4e0a\u4e0e\u5176\u8dd1\u4e2a Python \u7684 Tornado \u505a\u540e\u7aef\uff0c\u4e0d\u5982\u5c1d\u8bd5\u4e00\u4e0b\u7528 Openresty \u6765\u5199\u5199\u540e\u7aef\u7684\u903b\u8f91\r
\r
\u4e8e\u662f\u52a8\u624b\uff0c\u4e00\u8fb9\u5b66\u4e60 lua \u4e00\u8fb9\u5199\uff0c\u8d8a\u5199\u8d8a\u611f\u89c9\u75db\u82e6\uff0c\u867d\u7136\u8fd9\u75db\u82e6\u5f88\u5927\u7a0b\u5ea6\u662f\u56e0\u4e3a\u5bf9 lua \u4e0d\u591f\u719f\u6089\u5f15\u8d77\u7684\r
\r
1\u3001table \u4f5c\u4e3a lua \u4e3b\u8981\u7684\u6570\u636e\u7ed3\u6784\uff0c\u7adf\u7136\u6ca1\u6709 table.append(table) \u8fd9\u6837\u7684\u5b9e\u73b0\uff0c\u5f88\u65e0\u5948\r
2\u3001\u904d\u5730\u7684 local\u3001local \u4e0d\u77e5\u9053\u5927\u5bb6\u770b\u7740\u6709\u4ec0\u4e48\u611f\u60f3\r
3\u3001\u5373\u4f7f\u662f Openresty \u53d1\u5c55\u4e86\u51e0\u5e74\u7684\u4eca\u5929\uff0c\u611f\u89c9\u5468\u8fb9\u6210\u719f\u7684\u5e93\u4ecd\u7136\u4e0d\u591f\uff0c\u6211\u80fd\u5410\u69fd\u4e00\u4e0b\u7ffb\u904d\u6574\u4e2a Github \u90fd\u6ca1\u6709\u627e\u5230\u4e2a\u73b0\u6210\u597d\u7528\u70b9\u7684 form validation \u7684\u5e93\uff0c\u53ea\u80fd\u81ea\u5df1\u624b\u5199\u6b63\u5219\u53bb form validate\uff0c\u8fd9\u8fd8\u662f\u6211\u7528\u4e86 lor \u6846\u67b6\u7684\u60c5\u51b5\u4e0b\u7684\u73b0\u5b9e\r
\r
\u7a0d\u5fae\u5410\u69fd\u4e00\u4e0b\uff0c\u4e5f\u4e0d\u7b97\u5410\u69fd\u5427\uff0c\u5c31\u662f\u5c0f\u5b66\u751f\u8bd5\u7528\u4e86 lua \u548c Openresty \u4ee5\u540e\u7684\u4e00\u70b9\u4f53\u4f1a\r
\r
Openresty \u7684\u8bbe\u8ba1\u771f\u5fc3\u9002\u5408 Nginx web/api \u8fd9\u6837\u7684\u573a\u666f\r
\r
Lua \u7684\u8bbe\u8ba1\u771f\u5fc3\u7b80\u6d01\uff0c\u4e0d\u8fc7\u4e5f\u5b9e\u5728\u592a\u7b80\u6d01\u4e86~ \u6211\u8fd8\u662f\u56de\u5230 Python \u7684\u6000\u62b1\u91cc\u5403\u7740\u5404\u79cd\u8bed\u6cd5\u7cd6\u505a\u68a6\u597d\u4e86~", "date_published": "2018-03-15T09:07:23+00:00", "title": "\u7528 Nginx Openresty \u5199\u4e2a\u7f51\u7ad9\uff0c\u5199\u5f97\u5f88\u75db\u82e6", "id": "t/438389" }, { "author": { "url": "member/Cu635", "name": "Cu635", "avatar": "https://cdn.v2ex.com/avatar/479c/3b11/41753_large.png?m=1756537907" }, "url": "t/276460", "title": "\u8fd9\u4e2a\u8282\u70b9\u8fd9\u4e48\u51b7\u6e05\uff1f", "id": "t/276460", "date_published": "2016-05-05T03:41:12+00:00", "content_html": "" }, { "author": { "url": "member/BearyChat", "name": "BearyChat", "avatar": "https://cdn.v2ex.com/avatar/eaa0/b5ac/100788_large.png?m=1486181329" }, "url": "t/235153", "date_modified": "2015-11-10T17:18:27+00:00", "content_html": "

\u662f\u8fd9\u6837\uff0c\u6700\u8fd1\u6211\u4eec\u5408\u4f5c\u4e86\u9996\u5c4a OpenResty \u6280\u672f\u5927\u4f1a\u3002

\n\n

\u5148\u7b80\u8981\u4ecb\u7ecd\u4e00\u4e0b\uff1a

\n\n

OpenResty Con 2015 \u5c06\u5728 11 \u6708 14 \u65e5\uff08\u672c\u5468\u516d\uff09\u5728 \u5317\u4eac \u4e3e\u884c\u3002\u672c\u6b21 OpenResty \u5927\u4f1a\u805a\u7126\u4e8e\u5b9e\u9645\u9879\u76ee\u4e2d\u9047\u5230\u7684\u95ee\u9898\u548c\u89e3\u51b3\u65b9\u6cd5\uff0c\u5e76\u5e0c\u671b\u80fd\u4e0e\u5927\u5bb6\u4e00\u8d77\u63a2\u8ba8 OpenResty \u9879\u76ee\u672a\u6765\u7684\u53d1\u5c55\u3002

\n\n

OpenResty \u662f\u4e00\u4e2a\u77e5\u540d\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u5b83\u5c06\u811a\u672c\u8bed\u8a00 Lua \u5d4c\u5165\u5230 NGINX \u4e2d\uff0c\u5e76\u63d0\u4f9b\u57fa\u4e8e Lua \u7684 API \u63a5\u53e3\uff0c\u5927\u5927\u964d\u4f4e\u4e86\u57fa\u4e8e NGINX \u7684 Web Server \u7684\u5f00\u53d1\u96be\u5ea6\u548c\u5f00\u53d1\u5468\u671f\u3002

\n\n

OpenResty Con 2015 \u9080\u8bf7\u4e86\u4f17\u591a\u77e5\u540d\u4e92\u8054\u7f51\u516c\u53f8\u7684\u5f00\u53d1\u8005\u548c OpenResty \u5f00\u6e90\u9879\u76ee\u521b\u5efa\u8005\u5230\u573a\u548c\u5927\u5bb6\u4e00\u8d77\u4ea4\u6d41\u5206\u4eab\u3002\u5e0c\u671b OpenResty Con 2015 \u7684\u4e3e\u529e\uff0c\u80fd\u4e3a\u56fd\u5185 OpenResty \u5f00\u53d1\u8005\u642d\u5efa\u4e00\u4e2a\u66f4\u597d\u7684\u4ea4\u6d41\u548c\u6c9f\u901a\u5e73\u53f0\uff0c\u66f4\u52a0\u4fc3\u8fdb OpenResty \u826f\u597d\u7684\u6280\u672f\u6c1b\u56f4\u3002

\n\n

\u8bae\u9898\u548c\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\u90fd\u53ef\u4ee5\u67e5\u8be2 \u5b98\u65b9\u7f51\u7ad9

\n\n

\u4f5c\u4e3a OpenResty Con 2015 \u7684\u5408\u4f5c\u4f19\u4f34\uff0c BearyChat \u4e5f\u60f3\u501f\u6b64\u673a\u4f1a\u9080\u8bf7\u66f4\u591a\u611f\u5174\u8da3\u7684\u670b\u53cb\u4e00\u8d77\u5230\u573a\u4ea4\u6d41\uff0c\u6240\u4ee5\u6211\u4eec\u505a\u4e86\u4e00\u4e2a\u5c0f\u578b\u7684\u8d60\u7968\u6d3b\u52a8\uff1a

\n\n

1 \uff09\u53ef\u4ee5\u5173\u6ce8\u6211\u4eec\u7684\u5b98\u65b9\u5fae\u4fe1 bearyinnovative \u5e76\u70b9\u51fb\u76f8\u5173\u6d3b\u52a8\u53c2\u52a0\uff1b
\n2 \uff09\u4e5f\u53ef\u4ee5\u8ddf\u5e16\u56de\u590d\uff0c\u5982\u679c\u80fd\u5728\u8ddf\u5e16\u91cc\u544a\u8bc9\u6211\u4eec\u4f60\u7684 BearyChat \u56e2\u961f\u540d\u79f0\u90a3\u5c31\u66f4\u597d\u4e86\u3002

\n\n

\u5468\u4e09\u665a\u6211\u4eec\u5c06\u901a\u8fc7 BearyChat \u62bd\u5956\u673a\u5668\u4eba\u968f\u673a\u62bd\u51fa\u83b7\u5956\u540d\u5355\u5e76\u968f\u540e\u516c\u5e03\uff0c\u6b22\u8fce\u5404\u4f4d\u53c2\u52a0\uff1a\uff09

\n\n

\u6700\u540e\u518d\u5b89\u5229\u4e00\u4e0b BearyChat \uff0c\u6211\u4eec\u662f\u4e00\u6b3e\u4ee5\u56e2\u961f\u4e3a\u4e2d\u5fc3\u7684\u6c9f\u901a\u5de5\u5177\uff0c\u63d0\u4f9b\u7b80\u5355\u9ad8\u6548\u7684\u6c9f\u901a\u670d\u52a1\uff0c\u5e76\u901a\u8fc7\u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u7b49\u5b9e\u73b0\u4fe1\u606f\u6c47\u96c6\u7b49\u66f4\u591a\u529f\u80fd\u3002

\n\n

\u8be6\u7ec6\u4ecb\u7ecd\uff1a http://bearyinnovative.com/
\n\u6ce8\u518c\u5730\u5740\uff1a https://bearychat.com

\n\n

\u4e5f\u6b22\u8fce\u5173\u6ce8\u6211\u4eec\u7684\u5b98\u65b9\u5fae\u535a @BearyChat

\n", "date_published": "2015-11-10T11:08:48+00:00", "title": "[\u8d60\u7968\u6d3b\u52a8 / \u5317\u4eac] BearyChat \u9080\u8bf7\u4f60\u4e00\u8d77\u53c2\u52a0 OpenResty Con 2015", "id": "t/235153" }, { "author": { "url": "member/Livid", "name": "Livid", "avatar": "https://cdn.v2ex.com/avatar/c4ca/4238/1_large.png?m=1776858751" }, "url": "t/154634", "title": "OpenResty \u76ee\u524d\u6709\u6ca1\u6709\u5728\u7a33\u5b9a\u7ef4\u62a4\u4e2d\u7684 PPA\uff1f", "id": "t/154634", "date_published": "2014-12-17T08:11:50+00:00", "content_html": "Google \u7b2c\u4e00\u4f4d\u7684\u8fd9\u4e2a\u5df2\u7ecf\u4e00\u5e74\u591a\u6ca1\u6709\u66f4\u65b0\u4e86\uff1a

https://launchpad.net/~miurahr/+archive/ubuntu/openresty-devel" }, { "author": { "url": "member/Livid", "name": "Livid", "avatar": "https://cdn.v2ex.com/avatar/c4ca/4238/1_large.png?m=1776858751" }, "url": "t/134078", "date_modified": "2014-09-17T14:59:32+00:00", "content_html": "http://php.net/manual/en/function.openssl-sign.php", "date_published": "2014-09-17T14:59:25+00:00", "title": "OpenResty \u4e2d\u6709 openssl_sign() \u7684\u5b9e\u73b0\u4e48\uff1f", "id": "t/134078" }, { "author": { "url": "member/Livid", "name": "Livid", "avatar": "https://cdn.v2ex.com/avatar/c4ca/4238/1_large.png?m=1776858751" }, "url": "t/122210", "title": "\u4e00\u4e2a\u53ef\u4ee5\u8c03\u8bd5 OpenResty \u7684 Lua \u4ee3\u7801\u7684 IDE", "id": "t/122210", "date_published": "2014-07-11T12:46:42+00:00", "content_html": "http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio" } ] } ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86