[nginx] support http2 per server

洪志道 hongzhidao at gmail.com
Thu Jun 8 06:59:19 UTC 2017


Sorry for the typo.

diff -r 5e05118678af src/http/modules/ngx_http_ssl_module.c
--- a/src/http/modules/ngx_http_ssl_module.c Mon May 29 23:33:38 2017 +0300
+++ b/src/http/modules/ngx_http_ssl_module.c Wed Jun 07 12:17:34 2017 -0400
@@ -234,6 +234,13 @@
       offsetof(ngx_http_ssl_srv_conf_t, stapling_verify),
       NULL },

+    { ngx_string("ssl_h2"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_SRV_CONF_OFFSET,
+      offsetof(ngx_http_ssl_srv_conf_t, h2),
+      NULL },
+
       ngx_null_command
 };

@@ -343,16 +350,17 @@
     unsigned char *outlen, const unsigned char *in, unsigned int inlen,
     void *arg)
 {
-    unsigned int            srvlen;
-    unsigned char          *srv;
+    unsigned int               srvlen;
+    unsigned char             *srv;
 #if (NGX_DEBUG)
-    unsigned int            i;
+    unsigned int               i;
 #endif
 #if (NGX_HTTP_V2)
-    ngx_http_connection_t  *hc;
+    ngx_http_connection_t     *hc;
+    ngx_http_ssl_srv_conf_t   *sscf;
 #endif
 #if (NGX_HTTP_V2 || NGX_DEBUG)
-    ngx_connection_t       *c;
+    ngx_connection_t          *c;

     c = ngx_ssl_get_connection(ssl_conn);
 #endif
@@ -367,8 +375,9 @@

 #if (NGX_HTTP_V2)
     hc = c->data;
+    sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module);

-    if (hc->addr_conf->http2) {
+    if (hc->addr_conf->http2 && sscf->h2) {
         srv =
            (unsigned char *) NGX_HTTP_V2_ALPN_ADVERTISE
NGX_HTTP_NPN_ADVERTISE;
         srvlen = sizeof(NGX_HTTP_V2_ALPN_ADVERTISE NGX_HTTP_NPN_ADVERTISE)
- 1;
@@ -411,11 +420,13 @@

 #if (NGX_HTTP_V2)
     {
-    ngx_http_connection_t  *hc;
+    ngx_http_connection_t     *hc;
+    ngx_http_ssl_srv_conf_t   *sscf;

     hc = c->data;
+    sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module);

-    if (hc->addr_conf->http2) {
+    if (hc->addr_conf->http2 && sscf->h2) {
         *out =
             (unsigned char *) NGX_HTTP_V2_NPN_ADVERTISE
NGX_HTTP_NPN_ADVERTISE;
         *outlen = sizeof(NGX_HTTP_V2_NPN_ADVERTISE NGX_HTTP_NPN_ADVERTISE)
- 1;
@@ -555,6 +566,7 @@
     sscf->session_ticket_keys = NGX_CONF_UNSET_PTR;
     sscf->stapling = NGX_CONF_UNSET;
     sscf->stapling_verify = NGX_CONF_UNSET;
+    sscf->h2 = NGX_CONF_UNSET;

     return sscf;
 }
@@ -620,6 +632,8 @@
     ngx_conf_merge_str_value(conf->stapling_responder,
                          prev->stapling_responder, "");

+    ngx_conf_merge_value(conf->h2, prev->h2, 0);
+
     conf->ssl.log = cf->log;

     if (conf->enable) {
diff -r 5e05118678af src/http/modules/ngx_http_ssl_module.h
--- a/src/http/modules/ngx_http_ssl_module.h Mon May 29 23:33:38 2017 +0300
+++ b/src/http/modules/ngx_http_ssl_module.h Wed Jun 07 12:17:34 2017 -0400
@@ -57,6 +57,8 @@

     u_char                         *file;
     ngx_uint_t                      line;
+
+    ngx_flag_t                      h2;
 } ngx_http_ssl_srv_conf_t;


On Thu, Jun 8, 2017 at 12:07 PM, 洪志道 <hongzhidao at gmail.com> wrote:

> Hi!
> Now, http2 is enabled globally for 'listen' directive with ip:port.
> It seems it's possible to enable by server with sni, alpn, npn.
> Take a look, please.
>
> diff -r 5e05118678af src/http/modules/ngx_http_ssl_module.c
> --- a/src/http/modules/ngx_http_ssl_module.c Mon May 29 23:33:38 2017
> +0300
> +++ b/src/http/modules/ngx_http_ssl_module.c Wed Jun 07 12:17:34 2017
> -0400
> @@ -234,6 +234,13 @@
>        offsetof(ngx_http_ssl_srv_conf_t, stapling_verify),
>        NULL },
>
> +    { ngx_string("ssl_h2"),
> +      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,
> +      ngx_http_ssl_enable,
> +      NGX_HTTP_SRV_CONF_OFFSET,
> +      offsetof(ngx_http_ssl_srv_conf_t, h2),
> +      NULL },
> +
>        ngx_null_command
>  };
>
> @@ -343,16 +350,17 @@
>      unsigned char *outlen, const unsigned char *in, unsigned int inlen,
>      void *arg)
>  {
> -    unsigned int            srvlen;
> -    unsigned char          *srv;
> +    unsigned int               srvlen;
> +    unsigned char             *srv;
>  #if (NGX_DEBUG)
> -    unsigned int            i;
> +    unsigned int               i;
>  #endif
>  #if (NGX_HTTP_V2)
> -    ngx_http_connection_t  *hc;
> +    ngx_http_connection_t     *hc;
> +    ngx_http_ssl_srv_conf_t   *sscf;
>  #endif
>  #if (NGX_HTTP_V2 || NGX_DEBUG)
> -    ngx_connection_t       *c;
> +    ngx_connection_t          *c;
>
>      c = ngx_ssl_get_connection(ssl_conn);
>  #endif
> @@ -367,8 +375,9 @@
>
>  #if (NGX_HTTP_V2)
>      hc = c->data;
> +    sscf = ngx_http_get_module_srv_conf(hc->conf_ctx,
> ngx_http_ssl_module);
>
> -    if (hc->addr_conf->http2) {
> +    if (hc->addr_conf->http2 && sscf->h2) {
>          srv =
>             (unsigned char *) NGX_HTTP_V2_ALPN_ADVERTISE
> NGX_HTTP_NPN_ADVERTISE;
>          srvlen = sizeof(NGX_HTTP_V2_ALPN_ADVERTISE
> NGX_HTTP_NPN_ADVERTISE) - 1;
> @@ -411,11 +420,13 @@
>
>  #if (NGX_HTTP_V2)
>      {
> -    ngx_http_connection_t  *hc;
> +    ngx_http_connection_t     *hc;
> +    ngx_http_ssl_srv_conf_t   *sscf;
>
>      hc = c->data;
> +    sscf = ngx_http_get_module_srv_conf(hc->conf_ctx,
> ngx_http_ssl_module);
>
> -    if (hc->addr_conf->http2) {
> +    if (hc->addr_conf->http2 && sscf->h2) {
>          *out =
>              (unsigned char *) NGX_HTTP_V2_NPN_ADVERTISE
> NGX_HTTP_NPN_ADVERTISE;
>          *outlen = sizeof(NGX_HTTP_V2_NPN_ADVERTISE
> NGX_HTTP_NPN_ADVERTISE) - 1;
> @@ -555,6 +566,7 @@
>      sscf->session_ticket_keys = NGX_CONF_UNSET_PTR;
>      sscf->stapling = NGX_CONF_UNSET;
>      sscf->stapling_verify = NGX_CONF_UNSET;
> +    sscf->h2 = NGX_CONF_UNSET;
>
>      return sscf;
>  }
> @@ -620,6 +632,8 @@
>      ngx_conf_merge_str_value(conf->stapling_responder,
>                           prev->stapling_responder, "");
>
> +    ngx_conf_merge_value(conf->h2, prev->h2, 0);
> +
>      conf->ssl.log = cf->log;
>
>      if (conf->enable) {
> diff -r 5e05118678af src/http/modules/ngx_http_ssl_module.h
> --- a/src/http/modules/ngx_http_ssl_module.h Mon May 29 23:33:38 2017
> +0300
> +++ b/src/http/modules/ngx_http_ssl_module.h Wed Jun 07 12:17:34 2017
> -0400
> @@ -57,6 +57,8 @@
>
>      u_char                         *file;
>      ngx_uint_t                      line;
> +
> +    ngx_flag_t                      h2;
>  } ngx_http_ssl_srv_conf_t;
>
> Thanks.
> B.R.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20170608/12604dc7/attachment.html>


More information about the nginx-devel mailing list