-
Notifications
You must be signed in to change notification settings - Fork 7.7k
HTTP/2 to upstream #771
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTTP/2 to upstream #771
Conversation
5dedbca to
cc47b74
Compare
|
Hi @arut, |
66338f9 to
63a769c
Compare
|
We must avoid sending the |
8e79530 to
a1c2cd9
Compare
ac000
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @hongzhidao just some minor things I noticed...
HTTP/2: ngx_http_v2_proxy_module.
The module allows to use HTTP/2 protocol for proxying.
HTTP/2 proxying is enabled by specifying "proxy_http_version 2.0".
...
Blank line between the subject and body...
...
diff --git a/src/http/v2/ngx_http_v2_proxy_module.c b/src/http/v2/ngx_http_v2_proxy_module.c
new file mode 100644
index 0000000000..a69ffcc406
--- /dev/null
+++ b/src/http/v2/ngx_http_v2_proxy_module.c
...
+ngx_int_t
+ngx_http_v2_proxy_handler(ngx_http_request_t *r)
+{
...
+#if (NGX_HTTP_SSL)
+ u->ssl = plcf->ssl;
+
+ if (u->ssl) {
+ ngx_str_set(&u->schema, "https://");
+
+ } else {
+ ngx_str_set(&u->schema, "https://");
+ }
+#else
+ ngx_str_set(&u->schema, "https://");
+#endif
Maybe I'm not understanding what the checks for 'ssl' here are for but in
the non-ssl cases shouldn't the schema be 'http://' ? (Otherwise all the
checks seem redundant as we set 'https://' regardless...)
...
+static ngx_int_t
+ngx_http_v2_proxy_body_output_filter(void *data, ngx_chain_t *in)
+{
...
+ /*
+ * We have already got the response and were sending some additional
s/were/we're/
+ * control frames. Even if there is still something unsent, stop
+ * here anyway.
+ */
...
ngx_http_v2_proxy_parse_frame(ngx_http_request_t *r,
+ ngx_http_v2_proxy_ctx_t *ctx, ngx_buf_t *b)
+{
...
+ /* suppress warning */
+ case ngx_http_v2_proxy_st_payload:
+ case ngx_http_v2_proxy_st_padding:
+ break;
You could just use 'default:' here. Of course you won't get warned if you add
more enum values and don't handle them, but maybe you aren't planning on
adding any more or it's not a concern...
+ }
...
+static ngx_int_t
+ngx_http_v2_proxy_parse_header(ngx_http_request_t *r,
+ ngx_http_v2_proxy_ctx_t *ctx, ngx_buf_t *b)
+{
...
+ if (state < sw_fragment) {
+
+ if (b->last - b->pos < (ssize_t) ctx->rest) {
Or even (ptrdiff_t) to be more explicit about _why_ we're casting...
+ last = b->last;
...
+ if (state == sw_padding) {
+
+ if (b->last - b->pos < (ssize_t) ctx->rest) {
... and here ... and likely a few other places...
+ ctx->rest -= b->last - b->pos;
...
|
Hi @ac000,
I feel it should be touched again, I'm looking into @arut implementation about the proxy http3.
|
|
c32eeeb to
731645c
Compare
Hi @arut, take a look plz, did you mean something like this? |
731645c to
6498c2c
Compare
Good to learn, I added it into the proxy refactoring patch. |
bb8bd55 to
d45a64d
Compare
|
@hongzhidao HTTP/2 is not legacy, the flag should be 1 for HTTP/1.x. |
a3f046f to
365730b
Compare
365730b to
abf7593
Compare
This commit is prepared for HTTP/2 and HTTP/3 support. The ALPN protocol is now set per-connection in ngx_http_upstream_ssl_init_connection(), allowing proper protocol negotiation for each individual upstream connection regardless of SSL context sharing.
74f9632 to
92ec8a0
Compare
036a5c2 to
e658bca
Compare
e658bca to
cc95bdc
Compare
The module allows to use HTTP/2 protocol for proxying.
HTTP/2 proxying is enabled by specifying "proxy_http_version 2".
Example:
server {
listen 8000;
location / {
proxy_http_version 2;
proxy_pass https://127.0.0.1:8443;
}
}
server {
listen 8443 ssl;
http2 on;
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
location / {
return 200 foo;
}
}
cc95bdc to
a60e1c8
Compare
pluknet
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good for me.
Supported:
tests: based on grpc.t