2626#include "ngx_http_lua_semaphore.h"
2727#include "ngx_http_lua_balancer.h"
2828#include "ngx_http_lua_ssl_certby.h"
29+ #include "ngx_http_lua_ssl_session_storeby.h"
30+ #include "ngx_http_lua_ssl_session_fetchby.h"
2931
3032
3133static void * ngx_http_lua_create_main_conf (ngx_conf_t * cf );
@@ -525,6 +527,34 @@ static ngx_command_t ngx_http_lua_cmds[] = {
525527 0 ,
526528 (void * ) ngx_http_lua_ssl_cert_handler_file },
527529
530+ { ngx_string ("ssl_session_store_by_lua_block" ),
531+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_CONF_BLOCK |NGX_CONF_NOARGS ,
532+ ngx_http_lua_ssl_sess_store_by_lua_block ,
533+ NGX_HTTP_SRV_CONF_OFFSET ,
534+ 0 ,
535+ (void * ) ngx_http_lua_ssl_sess_store_handler_inline },
536+
537+ { ngx_string ("ssl_session_store_by_lua_file" ),
538+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_CONF_TAKE1 ,
539+ ngx_http_lua_ssl_sess_store_by_lua ,
540+ NGX_HTTP_SRV_CONF_OFFSET ,
541+ 0 ,
542+ (void * ) ngx_http_lua_ssl_sess_store_handler_file },
543+
544+ { ngx_string ("ssl_session_fetch_by_lua_block" ),
545+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_CONF_BLOCK |NGX_CONF_NOARGS ,
546+ ngx_http_lua_ssl_sess_fetch_by_lua_block ,
547+ NGX_HTTP_SRV_CONF_OFFSET ,
548+ 0 ,
549+ (void * ) ngx_http_lua_ssl_sess_fetch_handler_inline },
550+
551+ { ngx_string ("ssl_session_fetch_by_lua_file" ),
552+ NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_CONF_TAKE1 ,
553+ ngx_http_lua_ssl_sess_fetch_by_lua ,
554+ NGX_HTTP_SRV_CONF_OFFSET ,
555+ 0 ,
556+ (void * ) ngx_http_lua_ssl_sess_fetch_handler_file },
557+
528558 { ngx_string ("lua_ssl_verify_depth" ),
529559 NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_LOC_CONF |NGX_CONF_TAKE1 ,
530560 ngx_conf_set_num_slot ,
@@ -855,9 +885,18 @@ ngx_http_lua_create_srv_conf(ngx_conf_t *cf)
855885 }
856886
857887 /* set by ngx_pcalloc:
858- * lscf->ssl.cert_handler = NULL;
859- * lscf->ssl.cert_src = { 0, NULL };
860- * lscf->ssl.cert_src_key = NULL;
888+ * lscf->srv.ssl_cert_handler = NULL;
889+ * lscf->srv.ssl_cert_src = { 0, NULL };
890+ * lscf->srv.ssl_cert_src_key = NULL;
891+ *
892+ * lscf->srv.ssl_session_store_handler = NULL;
893+ * lscf->srv.ssl_session_store_src = { 0, NULL };
894+ * lscf->srv.ssl_session_store_src_key = NULL;
895+ *
896+ * lscf->srv.ssl_session_fetch_handler = NULL;
897+ * lscf->srv.ssl_session_fetch_src = { 0, NULL };
898+ * lscf->srv.ssl_session_fetch_src_key = NULL;
899+ *
861900 * lscf->balancer.handler = NULL;
862901 * lscf->balancer.src = { 0, NULL };
863902 * lscf->balancer.src_key = NULL;
@@ -878,13 +917,13 @@ ngx_http_lua_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
878917
879918 dd ("merge srv conf" );
880919
881- if (conf -> ssl . cert_src .len == 0 ) {
882- conf -> ssl . cert_src = prev -> ssl . cert_src ;
883- conf -> ssl . cert_src_key = prev -> ssl . cert_src_key ;
884- conf -> ssl . cert_handler = prev -> ssl . cert_handler ;
920+ if (conf -> srv . ssl_cert_src .len == 0 ) {
921+ conf -> srv . ssl_cert_src = prev -> srv . ssl_cert_src ;
922+ conf -> srv . ssl_cert_src_key = prev -> srv . ssl_cert_src_key ;
923+ conf -> srv . ssl_cert_handler = prev -> srv . ssl_cert_handler ;
885924 }
886925
887- if (conf -> ssl . cert_src .len ) {
926+ if (conf -> srv . ssl_cert_src .len ) {
888927 sscf = ngx_http_conf_get_module_srv_conf (cf , ngx_http_ssl_module );
889928 if (sscf == NULL || sscf -> ssl .ctx == NULL ) {
890929 ngx_log_error (NGX_LOG_EMERG , cf -> log , 0 ,
@@ -913,6 +952,56 @@ ngx_http_lua_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
913952
914953# endif
915954
955+ #endif
956+ }
957+
958+ if (conf -> srv .ssl_sess_store_src .len == 0 ) {
959+ conf -> srv .ssl_sess_store_src = prev -> srv .ssl_sess_store_src ;
960+ conf -> srv .ssl_sess_store_src_key = prev -> srv .ssl_sess_store_src_key ;
961+ conf -> srv .ssl_sess_store_handler = prev -> srv .ssl_sess_store_handler ;
962+ }
963+
964+ if (conf -> srv .ssl_sess_store_src .len ) {
965+ sscf = ngx_http_conf_get_module_srv_conf (cf , ngx_http_ssl_module );
966+ if (sscf == NULL || sscf -> ssl .ctx == NULL ) {
967+ ngx_log_error (NGX_LOG_EMERG , cf -> log , 0 ,
968+ "no ssl configured for the server" );
969+
970+ return NGX_CONF_ERROR ;
971+ }
972+
973+ #ifdef LIBRESSL_VERSION_NUMBER
974+ ngx_log_error (NGX_LOG_EMERG , cf -> log , 0 ,
975+ "LibreSSL does not support ssl_session_store_by_lua*" );
976+ return NGX_CONF_ERROR ;
977+ #else
978+ SSL_CTX_sess_set_new_cb (sscf -> ssl .ctx ,
979+ ngx_http_lua_ssl_sess_store_handler );
980+ #endif
981+ }
982+
983+ if (conf -> srv .ssl_sess_fetch_src .len == 0 ) {
984+ conf -> srv .ssl_sess_fetch_src = prev -> srv .ssl_sess_fetch_src ;
985+ conf -> srv .ssl_sess_fetch_src_key = prev -> srv .ssl_sess_fetch_src_key ;
986+ conf -> srv .ssl_sess_fetch_handler = prev -> srv .ssl_sess_fetch_handler ;
987+ }
988+
989+ if (conf -> srv .ssl_sess_fetch_src .len ) {
990+ sscf = ngx_http_conf_get_module_srv_conf (cf , ngx_http_ssl_module );
991+ if (sscf == NULL || sscf -> ssl .ctx == NULL ) {
992+ ngx_log_error (NGX_LOG_EMERG , cf -> log , 0 ,
993+ "no ssl configured for the server" );
994+
995+ return NGX_CONF_ERROR ;
996+ }
997+
998+ #ifdef LIBRESSL_VERSION_NUMBER
999+ ngx_log_error (NGX_LOG_EMERG , cf -> log , 0 ,
1000+ "LibreSSL does not support ssl_session_fetch_by_lua*" );
1001+ return NGX_CONF_ERROR ;
1002+ #else
1003+ SSL_CTX_sess_set_get_cb (sscf -> ssl .ctx ,
1004+ ngx_http_lua_ssl_sess_fetch_handler );
9161005#endif
9171006 }
9181007
0 commit comments