# What does the http3 config option do?

**URL:** <https://community.nginx.org/t/what-does-the-http3-config-option-do/8156>\
**Category:** General Discussion\
**Tags:** quic, http3, reverse-proxy, config\
**Created:** [November 11, 2025, 9:42am UTC](https://community.nginx.org/t/what-does-the-http3-config-option-do/8156 "2025-11-11T09:42:41Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Synchro](https://drob5swvtjqxg.cloudfront.net/user_avatar/community.nginx.org/synchro/32/3189_2.png) [@Synchro](https://community.nginx.org/u/Synchro)\
**Post date:** [November 11, 2025, 9:42am UTC](https://community.nginx.org/t/what-does-the-http3-config-option-do/8156/1 "2025-11-11T09:42:41Z")

</div>

The [nginx docs on the http3 config directive](https://nginx.org/en/docs/http/ngx_http_v3_module.html#http3) say that it enables HTTP/3 protocol negotiation, and that it defaults to on. However, there is also the `quic` option on the `listen` directive. This implies it’s possible to configure nginx to serve QUIC without HTTP/3. Is this so that nginx can serve/proxy non-HTTP/3 but still QUIC-based services? If not, what is it for?

---

<div class="post-metadata">

**Author:** ![liam](https://drob5swvtjqxg.cloudfront.net/user_avatar/community.nginx.org/liam/32/99_2.png) [@liam](https://community.nginx.org/u/liam)\
**Post date:** [November 11, 2025, 1:05pm UTC](https://community.nginx.org/t/what-does-the-http3-config-option-do/8156/2 "2025-11-11T13:05:29Z")

</div>

Because QUIC is a UDP-based protocol, we need to use the `listen` directive to accept UDP connections for HTTP/3. The [example configuration in the docs](https://nginx.org/en/docs/http/ngx_http_v3_module.html#example) shows this.

Also note that the `quic` parameter to the `listen` directive is only available in the `http{}` context (not `stream{}`) so that is the only QUIC-based application protocol currently supported.

---

<div class="post-metadata">

**Author:** ![Synchro](https://drob5swvtjqxg.cloudfront.net/user_avatar/community.nginx.org/synchro/32/3189_2.png) [@Synchro](https://community.nginx.org/u/Synchro)\
**Post date:** [November 11, 2025, 1:23pm UTC](https://community.nginx.org/t/what-does-the-http3-config-option-do/8156/3 "2025-11-11T13:23:34Z")

</div>

Yes I know that QUIC uses UDP, and that’s why the listener config is required. My point is that the only protocol supported over QUIC is HTTP/3, and HTTP/3 can’t be used without QUIC, so what is the point of the `http3` directive? If I listen for `quic`, and set `http3 off`, will it do anything useful at all?

---

<div class="post-metadata">

**Author:** ![liam](https://drob5swvtjqxg.cloudfront.net/user_avatar/community.nginx.org/liam/32/99_2.png) [@liam](https://community.nginx.org/u/liam)\
**Post date:** [November 11, 2025, 2:07pm UTC](https://community.nginx.org/t/what-does-the-http3-config-option-do/8156/4 "2025-11-11T14:07:25Z")

</div>

> what is the point of the `http3` directive?

Gotcha! Good question.

When QUIC+HTTP/3 was released there was some refactoring and alignment of protocol negotiation directives for future consistency. `http2` was moved from being a parameter of the `listen` directive to being a directive in its own right. Because we want protocol negotiation to be part of the http or server contexts (not implied from the listen port). This will be more useful when future QUIC application protocols emerge. For now, not so much.

It might also be useful when the same listen port is shared by multiple `server{}` blocks but only some of them should use `http3 on`. ← I didn’t verify that

---

<div class="post-metadata">

**Author:** ![system](https://drob5swvtjqxg.cloudfront.net/user_avatar/community.nginx.org/system/32/19_2.png) [@system](https://community.nginx.org/u/system)\
**Post date:** [November 13, 2025, 2:07pm UTC](https://community.nginx.org/t/what-does-the-http3-config-option-do/8156/5 "2025-11-13T14:07:44Z")

</div>

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.
