PageSourceSearch

https://openresty.org/en/about.html

html openresty.org collected 2026-10-01 08:57:26 UTC 36,937 bytes, 686 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4	<meta charset="utf-8">
5	<title>OpenResty - About</title>
6	<meta name="description" content="Learn about OpenResty®: the open-source web platform created by Yichun Zhang (agentzh), its history, maintainers, sponsors, and tight integration of its Nginx modules.">
7    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes">
8	<link href='https://openresty.org/css/fonts.css' rel='stylesheet' type='text/css'>
9	<!--
10	If you ever wanted to use LESS instead of CSS...
11	<link rel="stylesheet" type="text/less" href="/css/main.less">
12	
12<script src="/js/less.js"></script>
12
13	-->
14	<link rel="stylesheet" type="text/css" href="/css/main.css">
15	<link rel="stylesheet" type="text/css" href="/css/github.css">
16<script type="application/ld+json">{"applicationCategory":"DeveloperApplication","operatingSystem":"Linux","codeRepository":"https:\/\/github.com\/openresty\/openresty","@context":"https:\/\/schema.org","license":"https:\/\/opensource.org\/licenses\/BSD-2-Clause","@type":["SoftwareApplication","SoftwareSourceCode"],"sameAs":["https:\/\/github.com\/openresty\/","https:\/\/forum.openresty.us\/"],"@id":"https:\/\/openresty.org\/#software","maintainer":{"@type":"Organization","url":"https:\/\/openresty.com","name":"OpenResty Inc.","@id":"https:\/\/openresty.com\/#org"},"description":"OpenResty is an open-source web platform that integrates an enhanced Nginx core with LuaJIT, maintained by OpenResty Inc.","url":"https:\/\/openresty.org\/","name":"OpenResty"}</script>
vendor: 1 bytes, line 16
16
17<script type="application/ld+json">{"@type":"WebPage","name":"About","description":"Learn about OpenResty®: the open-source web platform created by Yichun Zhang (agentzh), its history, maintainers, sponsors, and tight integration of its Nginx modules.","@context":"https:\/\/schema.org","url":"https:\/\/openresty.org\/en\/about.html","inLanguage":"en"}</script>
vendor: 1 bytes, line 17
17
18<script type="application/ld+json">{"@type":"BreadcrumbList","@context":"https:\/\/schema.org","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/openresty.org\/en\/"},{"@type":"ListItem","position":2,"name":"About","item":"https:\/\/openresty.org\/en\/about.html"}]}</script>
18
19<link rel="alternate" hreflang="en" href="https://openresty.org/en/about.html">
20<link rel="alternate" hreflang="zh" href="https://openresty.org/cn/about.html">
21<link rel="alternate" hreflang="x-default" href="https://openresty.org/en/about.html">
22</head>
23<body>
24
25<header role="header">
26        <p class="site-name left">
27            <a href=".">
28                <img src="/images/logo.webp" width="64" alt="OpenResty logo" loading="eager">
29            </a>
30        </p>
31
32        <p class="site-name left">
33                <a href=".">OpenResty<span class="trade">&reg;</span></a>
34                <small>Scalable Web Platform by Extending NGINX with Lua</small>
35        </p><!-- / site-name -->
36        <p class="right link">
37                <a href="https://github.com/openresty/" title="Contribute on GitHub">
38                        <img src="/images/ico-github.webp" alt="GitHub" loading="eager">
39                        <span class="link-title">Contribute on GitHub</span>
40                </a>
41                <a href="https://forum.openresty.us/" title="Official Forum">
42                        <img class="dark-img" src="/images/flarum.webp" alt="OpenResty Forum" loading="eager">
43                        <span class="link-title">Official Forum</span>
44                </a>
45                <a role="button" href="https://openresty.com/en/xray/request-demo/?src=org_top" class="enterprise-button" type="button" title="Try OpenResty XRay">
46                        <img src="/images/rocket.svg" alt="Try OpenResty XRay" loading="eager">
47                        <span class="link-title">Try OpenResty XRay</span>
48                </a>
49        </p><!-- / links -->
50</header>
51
52
53<div class="xray-modal hide">
54  <div class="xray-modal-content">
55    <div class="header">
56      <div class="header-icon">
57        <div class="btn-violet">
58          <img src="/images/search.svg" alt="Search" loading="lazy"/>
59        </div>
60        <div class="product-name">OpenResty XRay</div>
61      </div>
62      <div class="header-title">
63        <p>Advanced observability built for OpenResty and more</p>
64        <p class="small xray-live-demo-link">
65          <span class="icon-pc-display-horizontal"></span>
66          
67          <a href="https://demo.xray.openresty.com/targets/" target="_blank" rel="noopener noreferrer">OpenResty XRay Live Demo →</a>
68        </p>
69      </div>
70      <div class="btn-close">
71        <span>&times;</span>
72      </div>
73    </div>
74    <div class="content">
75      <div class="seperator">
76        <hr/>
77        <div class="seperator-text">limited time offer</div>
78        <hr/>
79      </div>
80      <div class="form-title">
81        <span>Request </span>
82        <span class="text-violet">TRIAL</span>
83        <span> today and receive a diagnostic </span>
84        <span class="text-violet">REPORT</span>
85      </div>
86      <form class="form-xray-request-demo">
87        <div class="form-field-item">
88          <input class="input-name" name="name" type="text" placeholder='Enter your full name'>
89        </div>
90        <div class="form-field-item">
91          <input name="email" type="email" placeholder='Enter your business email'>
92        </div>
93        <button class="form-next-button" type="submit">Submit</button>
94        <div class="btn-learn-more">Learn more</div>
95      </form>
96    </div>
97  </div>
98</div>
99
100
101	<div id="wrapper">
102		<div class="sidebar sleft">
103			<nav id="nav">
104<ul>
105<li><big><strong><a href="https://blog.openresty.com/en/?src=org_side" title="Blog">Blog</a></strong></big></li>
106<li><big><strong><a href="download.html" title="Download">Download</a></strong></big></li>
107<li><a href="installation.html" title="Installation">Installation</a></li>
108<li><a href="https://www.youtube.com/channel/UCXVmwF-UCScv2ftsGoMqxhw/" title="YouTube Channel">YouTube Channel</a></li>
109<li><a href="videos.html" title="Video Tutorials">Video Tutorials</a></li>
110<li><a href="commercial.html" title="Enterprise Solutions">Enterprise Solutions</a></li>
111<li><a href="getting-started.html" title="Getting Started">Getting Started</a></li>
112<li><a href="upgrading.html" title="Upgrading">Upgrading</a></li>
113<li><a href="changes.html" title="Changes">Changes</a></li>
114<li><a href="events.html" title="Events">Events</a></li>
115<li><a href="components.html" title="Components">Components</a></li>
116<li><a href="community.html" title="Community">Community</a></li>
117<li><a href="benchmark.html" title="Benchmark">Benchmark</a></li>
118<li><a href="contact-us.html" title="Contact us">Contact us</a></li>
119<li><a href="debugging.html" title="Debugging">Debugging</a></li>
120<li><a href="donate-online.html" title="Donate Online">Donate Online</a></li>
121<li><a href="donors.html" title="Donors">Donors</a></li>
122<li><a href="ebooks.html" title="eBooks">eBooks</a></li>
123<li><a href="faq.html" title="FAQ">FAQ</a></li>
124<li><a href="getting-involved.html" title="Getting Involved">Getting Involved</a></li>
125<li><a href="presentations.html" title="Presentations">Presentations</a></li>
126<li><a href="profiling.html" title="Profiling">Profiling</a></li>
127<li><a href="quality-assurance.html" title="Quality Assurance">Quality Assurance</a></li>
128<li><a href="resources.html" title="Resources">Resources</a></li>
129<li><a href="samples.html" title="Samples">Samples</a></li>
130<li><a href="https://openresty.org/survey/" title="User Survey">User Survey</a></li>
131<li><a href="about.html" title="About">About</a></li>
132<li><a href="/cn/" title="中文站">中文站</a></li>
133<li><a href="https://openresty.com/" title="OpenResty.com">OpenResty.com</a></li>
134</ul>
135
136
137			</nav>
137<!-- / nav -->
138
139<ul class="buttons">
140    <!-- <li><a href="#" class="btn rss">RSS Feed</a></li> -->
141    <li>
142        <!-- <a href="#" class="btn paypal">Donate with PayPal</a> -->
143        <form name="_xclick" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
144        <input type="hidden" name="cmd" value="_xclick">
145        <input type="hidden" name="business" value="[email protected]">
146        <input type="hidden" name="item_name" value="OpenResty Donation (in USD)">
147        <input type="hidden" name="currency_code" value="USD">
148        <input type="hidden" name="amount" value="">
149        <input type="image" src="/images/donate_paypal.gif" name="submit" alt="Donate with PayPal">
150        </form>
151    </li>
152</ul>
153
154
155		</div><!-- / sidebar left -->
156
157		<section id="main">
158
159<div class="news">
160  <div class="news-item"><a href="ann-1031001001.html"><img class="news-img" src="../images/logo.webp" alt="OpenResty" loading="lazy"/></a>
161    <div class="news-description"><strong class="news-hint">New!&nbsp;</strong><a href="ann-1031001001.html">OpenResty 1.31.1.1</a><span>&nbsp;is now released!</span></div>
162  </div>
163  <div class="news-item"><a href="ann-1029002005.html"><img class="news-img" src="../images/logo.webp" alt="OpenResty" loading="lazy"/></a>
164    <div class="news-description"><strong class="news-hint">New!&nbsp;</strong><a href="ann-1029002005.html">OpenResty 1.29.2.5</a><span>&nbsp;is now released!</span></div>
165  </div>
166  <div class="news-item"><a href="https://blog.openresty.com.cn/en/edge-private-cdn-live-streaming/?src=org_news" target="_blank"><img class="news-img" src="../images/header-images/edge-private-cdn-live-streaming.webp" alt="OpenResty Edge private CDN live streaming" loading="lazy"/></a>
167    <div class="news-description"><strong class="news-hint">New!</strong><span>&nbsp;New blog post&nbsp;</span><a href="https://blog.openresty.com.cn/en/edge-private-cdn-live-streaming/?src=org_news" target="_blank">CDN for Live Streaming: Surviving Peak Events Without Peak-Event Bills</a><span>&nbsp;is published.</span></div>
168  </div>
169  <div class="news-item"><a href="https://blog.openresty.com.cn/en/xray-ann-26.7.15/?src=org_news" target="_blank"><img class="news-img" src="../images/header-images/xray-logo.webp" alt="OpenResty XRay logo" loading="lazy"/></a>
170    <div class="news-description"><strong class="news-hint">New!</strong><span>&nbsp;New blog post&nbsp;</span><a href="https://blog.openresty.com.cn/en/xray-ann-26.7.15/?src=org_news" target="_blank">OpenResty XRay Version 26.7.15. Now Available</a><span>&nbsp;is published.</span></div>
171  </div>
172  <div class="news-item"><a href="https://blog.openresty.com.cn/en/openresty-xray-ai-assistant/?src=org_news" target="_blank"><img class="news-img" src="../images/header-images/openresty-xray-ai-assistant.webp" alt="OpenResty XRay AI assistant" loading="lazy"/></a>
173    <div class="news-description"><strong class="news-hint">New!</strong><span>&nbsp;New blog post&nbsp;</span><a href="https://blog.openresty.com.cn/en/openresty-xray-ai-assistant/?src=org_news" target="_blank">OpenResty XRay AI Assistant: Making Every Piece of Analysis Data Speak</a><span>&nbsp;is published.</span></div>
174  </div>
175  <div class="news-item"><a href="https://blog.openresty.com.cn/en/edge-hls-live-streaming/?src=org_news" target="_blank"><img class="news-img" src="../images/header-images/edge-hls-live-streaming.webp" alt="OpenResty Edge HLS live streaming" loading="lazy"/></a>
176    <div class="news-description"><strong class="news-hint">New!</strong><span>&nbsp;New blog post&nbsp;</span><a href="https://blog.openresty.com.cn/en/edge-hls-live-streaming/?src=org_news" target="_blank">Building a Self-Hosted Live Streaming CDN for HLS with OpenResty Edge</a><span>&nbsp;is published.</span></div>
177  </div>
178  <div class="news-item"><a href="https://blog.openresty.com.cn/en/private-libs/?src=org_news" target="_blank"><img class="news-img" src="../images/header-images/private-libs.webp" alt="OpenResty private libraries" loading="lazy"/></a>
179    <div class="news-description"><strong class="news-hint">New!</strong><span>&nbsp;New blog post&nbsp;</span><a href="https://blog.openresty.com.cn/en/private-libs/?src=org_news" target="_blank">OpenResty Private Libraries: High-Performance Lua &amp; Nginx Modules</a><span>&nbsp;is published.</span></div>
180  </div>
181  <div class="news-item"><a href="https://blog.openresty.com.cn/en/edge-inner-traffic/?src=org_news" target="_blank"><img class="news-img" src="../images/header-images/edge-inner-traffic.webp" alt="OpenResty Edge internal traffic" loading="lazy"/></a>
182    <div class="news-description"><strong class="news-hint">New!</strong><span>&nbsp;New blog post&nbsp;</span><a href="https://blog.openresty.com.cn/en/edge-inner-traffic/?src=org_news" target="_blank">Taming Internal Traffic Chaos with OpenResty Edge</a><span>&nbsp;is published.</span></div>
183  </div>
184</div>
185
186<div class="item">
187        <header>
188                <h2>About</h2>
189                <small>
190                    
191                    liwang2019
192                    ,
193                    20 Aug 2026 (created 21 Jun 2011)</small>
194                <div class="options">
195                        <!--
196                        <a href="#" class="trigger">Show Options</a>
197                        <ul class="first-level">
198                                <li><a href="#">close</a></li>
199                                <li><a href="#">close others</a></li>
200                                <li><a href="#">view</a></li>
201                                <li><a href="#">fields</a></li>
202                                <li><a href="#">syncing</a></li>
203                                <li><a href="#">permalink</a></li>
204                                <li><a href="#">references</a></li>
205                                <li>
206                                        <a href="#">jump</a>
207                                        <ul class="second-level">
208                                                <li><a href="#">Benchmark</a></li>
209                                                <li><a href="#">Presentations</a></li>
210                                                <li><a href="#">eBooks</a></li>
211                                        </ul>
212                                </li>
213                        </ul>
214                        -->
215                </div><!-- / options -->
216        </header>
217        <div class="body">
218<p>This open source web platform is mainly maintained by Yichun Zhang (<a href="https://agentzh.org" title="agentzh">agentzh</a>).
219It was originally sponsored by Yahoo! China and <a href="https://www.taobao.c
219om" title="Taobao.com">Taobao.com</a> before the
220year 2011 and it was mainly supported by <a href="https://www.cloudflare.com" title="Cloudflare Inc.">Cloudflare Inc.</a>
221between 2012 ~ 2016. Right now it is mainly supported by OpenResty Software Foundation
222and <a href="https://openresty.com" title="OpenResty Inc">OpenResty Inc</a>.</p>
223<p>Because most of the <a href="nginx.html" title="Nginx">Nginx</a> modules are developed by the bundle
224maintainers, it can be ensured
225that all these modules are played well together.</p>
226<p>The bundled software components are copyrighted by the respective copyright
227holders.  Basically only components with BSD style licenses are included. If
228you find exceptions, please let me know.</p>
229<p>This web site is a dynamic web application built completely upon the OpenResty<sup>&reg;</sup>
230platform and the PostgreSQL database. The whole application is
231opensourced on <a href="github.html" title="GitHub">GitHub</a>:</p>
232<p><a href="https://github.com/openresty/openresty.org/" title="https://github.com/openresty/openresty.org/">https://github.com/openresty/openresty.org/</a></p>
233<p>Feel free to fork it or just <a href="contact-us.html" title="contact us">contact us</a> to obtain a git commit
234bit if you want to edit and improve this site.</p>
235
236
237        </div><!-- / body -->
238</div><!-- / item -->
239
240
241<div id="articles">
242  <h2 class="area-title">More Interesting Topics</h2>
243  <div id="loading-wrapper">
244    <div class="sk-three-bounce">
245      <div class="sk-child sk-bounce1"></div>
246      <div class="sk-child sk-bounce2"></div>
247      <div class="sk-child sk-bounce3"></div>
248    </div>
249  </div>
250  <div class="swiper-parent" id="swiper-parent">
251    <div class="swiper" id="article-carousel">
252      <div class="swiper-wrapper">
253        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-private-cdn-live-streaming/?src=org" data-modal="data-modal">
254            <div class="blog-img" data-pic="/header-images/edge-private-cdn-live-streaming.webp"><img class="article-img" src="../images/header-images/edge-private-cdn-live-streaming.webp" alt="OpenResty Edge private CDN live streaming" loading="lazy"/></div>
255            <div class="article-text">
256              <p class="blog-title">CDN for Live Streaming: Surviving Peak Events Without Peak-Event Bills</p>
257            </div></a></div>
258        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/xray-ann-26.7.15/?src=org" data-modal="data-modal">
259            <div class="blog-img" data-pic="/header-images/xray-logo.webp"><img class="article-img" src="../images/header-images/xray-logo.webp" alt="OpenResty XRay logo" loading="lazy"/></div>
260            <div class="article-text">
261              <p class="blog-title">OpenResty XRay Version 26.7.15. Now Available</p>
262            </div></a></div>
263        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/openresty-xray-ai-assistant/?src=org" data-modal="data-modal">
264            <div class="blog-img" data-pic="/header-images/openresty-xray-ai-assistant.webp"><img class="article-img" src="../images/header-images/openresty-xray-ai-assistant.webp" alt="OpenResty XRay AI assistant" loading="lazy"/></div>
265            <div class="article-text">
266              <p class="blog-title">OpenResty XRay AI Assistant: Making Every Piece of Analysis Data Speak</p>
267            </div></a></div>
268        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-hls-live-streaming/?src=org" data-modal="data-modal">
269            <div class="blog-img" data-pic="/header-images/edge-hls-live-streaming.webp"><img class="article-img" src="../images/header-images/edge-hls-live-streaming.webp" alt="OpenResty Edge HLS live streaming" loading="lazy"/></div>
270            <div class="article-text">
271              <p class="blog-title">Building a Self-Hosted Live Streaming CDN for HLS with OpenResty Edge</p>
272            </div></a></div>
273        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/private-libs/?src=org" data-modal="data-modal">
274            <div class="blog-img" data-pic="/header-images/private-libs.webp"><img class="article-img" src="../images/header-images/private-libs.webp" alt="OpenResty private libraries" loading="lazy"/></div>
275            <div class="article-text">
276              <p class="blog-title">OpenResty Private Libraries: High-Performance Lua &amp; Nginx Modules</p>
277            </div></a></div>
278        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-inner-traffic/?src=org" data-modal="data-modal">
279            <div class="blog-img" data-pic="/header-images/edge-inner-traffic.webp"><img class="article-img" src="../images/header-images/edge-inner-traffic.webp" alt="OpenResty Edge internal traffic" loading="lazy"/></div>
280            <div class="article-text">
281              <p class="blog-title">Taming Internal Traffic Chaos with OpenResty Edge</p>
282            </div></a></div>
283        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/xray-ann-26.5.11/?src=org" data-modal="data-modal">
284            <div class="blog-img" data-pic="/header-images/xray-logo.webp"><img class="article-img" src="../images/header-images/xray-logo.webp" alt="OpenResty XRay logo" loading="lazy"/></div>
285            <div class="article-text">
286              <p class="blog-title">OpenResty XRay Version 26.5.11. Now Available</p>
287            </div></a></div>
288        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-db-backup/?src=org" data-modal="data-modal">
289            <div class="blog-img" data-pic="/header-images/edge-db-backup.webp"><img class="article-img" src="../images/header-images/edge-db-backup.webp" alt="OpenResty Edge database backup" loading="lazy"/></div>
290            <div class="article-text">
291              <p class="blog-title">OpenResty Edge Data Protection: From Scheduled Backups to Automatic Failover</p>
292            </div></a></div>
293        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-k8s-what/?src=org" data-modal="data-modal">
294            <div class="blog-img" data-pic="/header-images/edge-k8s-what.webp"><img class="article-img" src="../images/header-images/edge-k8s-what.webp" alt="OpenResty Edge Kubernetes overview" loading="lazy"/></div>
295            <div class="article-text">
296              <p class="blog-title">Automating Kubernetes Gateway Node Lifecycle with OpenResty Edge</p>
297            </div></a></div>
298        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/what-edge-yaml/?src=org" data-modal="data-modal">
299            <div class="blog-img" data-pic="/header-images/what-edge-yaml.webp"><img class="article-img" src="../images/header-images/what-edge-yaml.webp" alt="OpenResty Edge YAML overview" loading="lazy"/></div>
300            <div class="article-text">
301              <p class="blog-title">Managing OpenResty Edge Configuration with YAML and Git: A Practical Guide to `edge2yaml`</p>
302            </div></a></div>
303        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/xray-vulnerability-scanning/?src=org" data-modal="data-modal">
304            <div class="blog-img" data-pic="/header-images/xray-vulnerability-scanning.webp"><img class="article-img" src="../images/header-images/xray-vulnerability-scanning.webp" alt="OpenResty XRay vulnerability scanning" loading="lazy"/></div>
305            <div class="article-text">
306              <p class="blog-title">Binary Vulnerability Scanning: Catch Backported Patches, Cut False Positives</p>
307            </div></a></div>
308        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/xray-ann-26.2.1/?src=org" data-modal="data-modal">
309            <div class="blog-img" data-pic="/header-images/xray-logo.webp"><img class="article-img" src="../images/header-images/xray-logo.webp" alt="OpenResty XRay logo" loading="lazy"/></div>
310            <div class="article-text">
311              <p class="blog-title">OpenResty XRay Version 26.2.1. Now Available</p>
312            </div></a></div>
313        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-proxy-protocol/?src=org" data-modal="data-modal">
314            <div class="blog-img" data-pic="/header-images/edge-proxy-protocol.webp"><img class="article-img" src="../images/header-images/edge-proxy-protocol.webp" alt="OpenResty Edge proxy protocol" loading="lazy"/></div>
315            <div class="article-text">
316              <p class="blog-title">End-to-End Client Real IP Passthrough in OpenResty Edge</p>
317            </div></a></div>
318        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/xray-dynamic-advantage/?src=org" data-modal="data-modal">
319            <div class="blog-img" data-pic="/header-images/xray-dynamic-advantage.webp"><img class="article-img" src="../images/header-images/xray-dynamic-advantage.webp" alt="OpenResty XRay dynamic tracing advantage" loading="lazy"/></div>
320            <div class="article-text">
321              <p class="blog-title">How OpenResty XRay Enables Full-Stack Dynamic Tracing in Production</p>
322            </div></a></div>
323        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/what-is-openresty-edge/?src=org" data-modal="data-modal">
324            <div class="blog-img" data-pic="/header-images/what-is-openresty-edge.webp"><img class="article-img" src="../images/header-images/what-is-openresty-edge.webp" alt="What is OpenResty Edge" loading="lazy"/></div>
325            <div class="article-text">
326              <p class="blog-title">OpenResty Edge: Private CDN, Universal Gateway &amp; WAF in One Platform</p>
327            </div></a></div>
328        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/what-is-openresty-xray/?src=org" data-modal="data-modal">
329            <div class="blog-img" data-pic="/header-images/what-is-openresty-xray.webp"><img class="article-img" src="../images/header-images/what-is-openresty-xray.webp" alt="What is OpenResty XRay" loading="lazy"/></div>
330            <div class="article-text">
331              <p class="blog-title">Introduction to OpenResty XRay</p>
332            </div></a></div>
333        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/edge-gslb-what/?src=org" data-modal="data-modal">
334            <div class="blog-img" data-pic="/header-images/edge-gslb-what.webp"><img class="article-img" src="../images/header-images/edge-gslb-what.webp" alt="OpenResty Edge GSLB overview" loading="lazy"/></div>
335            <div class="article-text">
336              <p class="blog-title">GSLB Explained: How Global Server Load Balancing Works — and Where DNS-Only Scheduling Fails</p>
337            </div></a></div>
338        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/nginx-prod-mem-leak/?src=org" data-modal="data-modal">
339            <div class="blog-img" data-pic="/header-images/nginx-prod-mem-leak.webp"><img class="article-img" src="../images/header-images/nginx-prod-mem-leak.webp" alt="Nginx production memory leak" loading="lazy"/></div>
340            <div class="article-text">
341              <p class="blog-title">Hunting Down a Silent Memory Leak in OpenResty Without a Reboot</p>
342            </div></a></div>
343        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/xray-keepalive/?src=org" data-modal="data-modal">
344            <div class="blog-img" data-pic="/header-images/xray-keepalive.webp"><img class="article-img" src="../images/header-images/xray-keepalive.webp" alt="OpenResty XRay keepalive" loading="lazy"/></div>
345            <div class="article-text">
346              <p class="blog-title">Anatomy of a 15x Performance Drop: A 90k to 6k QPS Root Cause Analysis with OpenResty XRay</p>
347            </div></a></div>
348        <div class="swiper-slide"><a class="article-item" href="https://blog.openresty.com.cn/en/why-edge-waf/?src=org" data-modal="data-modal">
349            <div class="blog-img" data-pic="/header-images/why-edge-waf.webp"><img class="article-img" src="../images/header-images/why-edge-waf.webp" alt="Why choose OpenResty Edge WAF" loading="lazy"/></div>
350            <div class="article-text">
351              <p class="blog-title">WAF Benchmark: OpenResty Edge 3.7–10x Faster than ModSecurity (208 Rules)</p>
352            </div></a></div>
353      </div>
354      <div class="swiper-pagination"></div>
355    </div>
356    <div class="swiper-button-next"></div>
357    <div class="swiper-button-prev"></div>
358  </div>
359</div>
360<dialog class="blog-modal" id="blog-modal">
361  <button class="blog-modal-close" type="button" aria-label="Close">&times;</button>
362  <iframe class="blog-iframe" id="blog-iframe" title="OpenResty Blog article"></iframe>
363</dialog>
364<link rel="stylesheet" href="/css/swiper-bundle.min.css"/>
365<script src="/js/swiper-bundle.min.js"></script>
vendor: 1 bytes, line 365
365
366<script>
367  window.onload = function () {
368    setMaxWidth();
369  
370    document.getElementById('swiper-parent').style.display = 'block';
371    document.getElementById('loading-wrapper').style.display = 'none';
372  
373    const swiper = new Swiper('#article-carousel', {
374      navigation: {
375        nextEl: '.swiper-button-next',
376        prevEl: '.swiper-button-prev',
377      },
378      pagination: {
379        el: '.swiper-pagination',
380        clickable: true,
381      },
382      spaceBetween: 32,
383      breakpoints: {
384        320: {
385          slidesPerView: 1,
386          slidesPerGroup: 1,
387        },
388        1000: {
389          slidesPerView: 2,
390          slidesPerGroup: 2,
391        },
392        1300: {
393          slidesPerView: 3,
394          slidesPerGroup: 3,
395        },
396        1600: {
397          slidesPerView: 4,
398          slidesPerGroup: 4,
399        },
400        1800: {
401          slidesPerView: 5,
402          slidesPerGroup: 5,
403        },
404        2000: {
405          slidesPerView: 6,
406          slidesPerGroup: 6,
407        },
408        2200: {
409          slidesPerView: 7,
410          slidesPerGroup: 7,
411        },
412      }
413    });
414  }
415  
416  window.addEventListener('resize', function() {
417    setMaxWidth();
418  });
419  
420  function setMaxWidth() {
421    const width = document.body.clientWidth > 990 ? document.body.clientWidth - 600 : document.body.clientWidth - 40;
422    document.getElementById('articles').style.setProperty('max-width', width + 'px', 'important');
423  }
424  
425</script>
425
426<style>
427  #article-carousel {
428      width: 100%;
429    }
430  
431    #article-carousel .article-item {
432      text-align: center;
433      outline: none;
434      color: #a1a1a1;
435      vertical-align: top;
436    }
437  
438    #article-carousel .article-item .article-img {
439      width: 100%;
440      height: 130px;
441    }
442  
443    #article-carousel .article-item .article_text {
444      margin-top: 8px;
445    }
446  
447    .swiper-pagination-bullet {
448      width: 10px;
449      height: 10px;
450    }
451  
452    .swiper-pagination-bullet-active {
453      background-color: #497149;
454    }
455  
456    .swiper-parent {
457      display: none;
458      position: relative;
459      padding-left: 70px;
460      padding-right: 70px;
461      margin: 0 auto;
462    }
463  
464    .swiper-button-next:after,
465    .swiper-button-prev:after {
466      font-size: 32px;
467    }
468  
469    .swiper-button-next:focus,
470    .swiper-button-prev:focus {
471      outline: none;
472    }
473  
474    .swiper-wrapper {
475      min-height: 290px;
476    }
477  
478    .blog-title {
479      min-height: 50px;
480    }
481  
482    @media (min-width: 575px) {
483      .swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet {
484        margin: 0 10px;
485      }
486    }
487  
488    @media (max-width: 575px) {
489      .swiper-wrapper {
490        min-height: 240px;
491      }
492    }
493  
494    #article-carousel .article-item {
495      height: 290px;
496    }
497  
498    .img-container {
499      padding: 0 5px;
500      border: 1px solid #578C57;
501    }
502  
503    #articles {
504      margin: 0 auto;
505    }
506  
507    #articles h2 {
508      color: black;
509      text-align: center;
510      margin-bottom: 36px;
511      font-weight: bold;
512      font-size: 120%;
513    }
514  
515    .article-text {
516      color: #4d8d89;
517      margin-top: 8px;
518    }
519  
520    .blog-img {
521      object-fit: cover;
522    }
523  
524    .blog-img[data-pic*=hiring] {
525      border: 1px solid #497149;
526    }
527  
528    .blog-img[data-pic*=logo],
529    .blog-img[data-pic*=report] {
530      object-fit: contain;
531      padding: 0 10px;
532      border: 1px solid #497149;
533    }
534  
535    .article-img[src*=logo],
536    .article-img[src*=report] {
537      object-fit: contain;
538    }
539  
540    #loading-wrapper {
541      display: flex;
542      flex-direction: column;
543      justify-content: center;
544      align-items: center;
545      min-height: 260px;
546    }
547  
548    .sk-three-bounce {
549      margin: 40px auto;
550      width: 80px;
551      text-align: center;
552      transform: scale(.75);
553    }
554  
555    .sk-three-bounce .sk-child {
556      width: 20px;
557      height: 20px;
558      background-color: #333;
559      border-radius: 100%;
560      display: inline-block;
561      animation: sk-three-bounce 1.4s ease-in-out 0s infinite both;
562    }
563  
564    .sk-three-bounce .sk-bounce1 {
565      animation-delay: -0.32s;
566    }
567  
568    .sk-three-bounce .sk-bounce2 {
569      animation-delay: -0.16s;
570    }
571  
572    .swiper-button-prev,
573    .swiper-button-next {
574      color: #497149;
575    }
576  
577    .article-text:hover {
578      color: #003300;
579    }
580  
581    .swiper-button-next, .swiper-button-prev {
582      top: 30%;
583    }
584  
585    @keyframes sk-three-bounce {
586      0%, 80%, 100% {
587        transform: scale(0);
588      }
589      40% {
590        transform: scale(1)
591      }
592    }
593</style>
594		</section><!-- / main -->
595
596<div class="sidebar sright">
597        <div class="options">
598                <!--
599                <ul class="first">
600                        <li><a href="#" class="close-all">close all</a></li>
601                        <li><a href="#" class="permaview">permaview</a></li>
602                        <li><a href="#" class="more-options">options</a></li>
603                </ul> --><!-- / first -->
604        </div><!-- options -->
605
606        <div class="tabs">
607                <ul class="navigation">
608                        <!--
609                        <li><a href="#" class="current">Timeline</a></li>
610                        <li><a href="#">All</a></li>
611                        <li><a href="#">Tags</a></li>
612                        <li><a href="#">More</a></li>
613                        -->
614                        <li><span>Timeline</span></li>
615                </ul><!-- / navigation -->
616                <div class="panes">
617                        <div class="pane" id="timeline">
618                                <ul>
619                                    <li>
620                                            <h3>20 Aug 2026</h3>
621                                            <ul>
622                                                <li><a href="changelog-1025003.html">ChangeLog for 1.25.3.x</a></li>
623                                                <li><a href="changelog-1002007.html">ChangeLog 1.2.7</a></li>
624                                                <li><a href="changelog-1000010.html">ChangeLog 1.0.10</a></li>
625                                                <li><a href="ann-1015008003.html">OpenResty 1.15.8.3 Released</a></li>
626                                                <li><a href="ann-test-nginx-028.html">Test::Nginx 0.28 Released</a></li>
627                                                <li><a href="changelog-1019003.html">ChangeLog for 1.19.3.x</a></li>
628                                                <li><a href="changelog-1005011.html">ChangeLog 1.5.11</a></li>
629                                                <li><a href="ann-test-nginx-029.html">Test::Nginx 0.29 Released</a></li>
630                                                <li><a href="ann-test-nginx-030.html">Test::Nginx 0.30 Released</a></li>
631                                                <li><a href="ann-1029002003.html">OpenResty 1.29.2.3 Released</a></li>
632                                                <li><a href="changelog-1015008.html">ChangeLog for 1.15.8.x</a></li>
633                                                <li><a href="lua-cjson-library.html">Lua Cjson Library</a></li>
634                                                <li><a href="changelog-1031001.html">ChangeLog for 1.31.1.x</a></li>
635                                                <li><a href="ann-1021004002.html">OpenResty 1.21.4.2 Released</a></li>
636                                                <li><a href="about.html">About</a></li>
637                                                <li><a href="ann-1021004004.html">OpenResty 1.21.4.4 Released</a></li>
638                                                <li><a href="ann-1019009002.html">OpenResty 1.19.9.2 Released</a></li>
639                                            </ul>
640                                    </li>
641                                </ul>
642                        </div><!-- / pane -->
643                </div><!-- / panes -->
644        </div><!-- / tabs -->
645</div><!-- / sidebar right -->
646
647	</div><!-- / wrapper -->
648
649<div class="content-footer">
650<hr class="footer-sep"/>
651<div class="footer">
652  <p>OpenResty<sup>&reg;</sup> is a registered trademark owned by <a href="https://openresty.com/">OpenResty Inc</a>.</p>
653  <p>Copyright © 2017, 2018, 2019, 2020, 2021, 2022 by Yichun Zhang (agentzh)</p>
654  <p>100% Powered by OpenResty and PostgreSQL
655     (<a href="https://github.com/openresty/openresty.org/">
656     view the source code of this site</a>)</p>
657  <br/>
658  
659</div>
660</div>
661
662<script src="/js/jquery.min.js"></script>
vendor: 1 bytes, line 662
662
663<script src="/js/highlight.min.js"></script>
vendor: 1 bytes, line 663
663
664<script src="/js/highlight-nginx.min.js"></script>
vendor: 1 bytes, line 664
664
665<script src="/js/highlight-vim.min.js"></script>
vendor: 1 bytes, line 665
665
666<script src="/js/main.js"></script>
666
667<!-- Google analytics -->
668<script type="text/javascript">
669
670  var _gaq = _gaq || [];
671  _gaq.push(['_setAccount', 'UA-24724965-1']);
672  //_gaq.push(['_setDomainName', 'openresty.org']);
673  _gaq.push(['_trackPageview']);
674
675  var ga_f = function() {
676    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
677    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
678    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
679  };
680  setTimeout(ga_f, 0);
681
682</script>
682
683
684
685</body>
686</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.