73
73
ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
78
77
ngx_uint_t mi, m, s, l, p, a, i, n;
79
78
ngx_uint_t find_config_index, use_rewrite, use_access;
404
406
cmcf->phase_engine.server_rewrite_index = (ngx_uint_t) -1;
407
cmcf->phase_engine.location_rewrite_index = (ngx_uint_t) -1;
405
408
find_config_index = 0;
406
409
use_rewrite = cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers.nelts ? 1 : 0;
407
410
use_access = cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers.nelts ? 1 : 0;
449
case NGX_HTTP_REWRITE_PHASE:
450
if (cmcf->phase_engine.location_rewrite_index == (ngx_uint_t) -1) {
451
cmcf->phase_engine.location_rewrite_index = n;
453
checker = ngx_http_core_generic_phase;
446
457
case NGX_HTTP_POST_REWRITE_PHASE:
447
458
if (use_rewrite) {
448
459
ph->checker = ngx_http_core_post_rewrite_phase;
543
554
if (in_addr[a].default_server) {
544
555
ngx_log_error(NGX_LOG_ERR, cf->log, 0,
545
"the duplicate default server in %V:%d",
546
&lscf[l].file_name, lscf[l].line);
556
"the duplicate default server in %s:%ui",
557
&lscf[l].file_name, lscf[l].line);
548
559
return NGX_CONF_ERROR;
647
658
return NGX_CONF_ERROR;
650
665
name = in_addr[a].names.elts;
651
for (s = 0; s < in_addr[a].names.nelts; s++) {
653
ch = name[s].name.data[0];
655
if (ch == '*' || ch == '.') {
659
rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf,
662
if (rc == NGX_ERROR) {
663
return NGX_CONF_ERROR;
666
if (rc == NGX_BUSY) {
667
ngx_log_error(NGX_LOG_WARN, cf->log, 0,
668
"conflicting server name \"%V\" on %s, ignored",
669
&name[s].name, in_addr[a].listen_conf->addr);
673
for (s = 0; s < in_addr[a].names.nelts; s++) {
675
ch = name[s].name.data[0];
677
if (ch != '*' && ch != '.') {
667
for (s = 0; s < in_addr[a].names.nelts; s++) {
681
676
rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf,
682
677
NGX_HASH_WILDCARD_KEY);
685
680
return NGX_CONF_ERROR;
683
if (rc == NGX_DECLINED) {
684
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
685
"invalid server name or wildcard \"%V\" on %s",
686
&name[s].name, in_addr[a].listen_conf->addr);
687
return NGX_CONF_ERROR;
688
690
if (rc == NGX_BUSY) {
689
691
ngx_log_error(NGX_LOG_WARN, cf->log, 0,
690
692
"conflicting server name \"%V\" on %s, ignored",
712
if (ha.dns_wildcards.nelts) {
714
ngx_qsort(ha.dns_wildcards.elts,
715
(size_t) ha.dns_wildcards.nelts,
716
sizeof(ngx_hash_key_t),
717
ngx_http_cmp_dns_wildcards);
720
hash.temp_pool = ha.temp_pool;
722
if (ngx_hash_wildcard_init(&hash, ha.dns_wildcards.elts,
723
ha.dns_wildcards.nelts)
726
ngx_destroy_pool(ha.temp_pool);
727
return NGX_CONF_ERROR;
730
in_addr[a].dns_wildcards = (ngx_hash_wildcard_t *) hash.hash;
714
if (ha.dns_wc_head.nelts) {
716
ngx_qsort(ha.dns_wc_head.elts,
717
(size_t) ha.dns_wc_head.nelts,
718
sizeof(ngx_hash_key_t),
719
ngx_http_cmp_dns_wildcards);
722
hash.temp_pool = ha.temp_pool;
724
if (ngx_hash_wildcard_init(&hash, ha.dns_wc_head.elts,
725
ha.dns_wc_head.nelts)
728
ngx_destroy_pool(ha.temp_pool);
729
return NGX_CONF_ERROR;
732
in_addr[a].wc_head = (ngx_hash_wildcard_t *) hash.hash;
735
if (ha.dns_wc_tail.nelts) {
737
ngx_qsort(ha.dns_wc_tail.elts,
738
(size_t) ha.dns_wc_tail.nelts,
739
sizeof(ngx_hash_key_t),
740
ngx_http_cmp_dns_wildcards);
743
hash.temp_pool = ha.temp_pool;
745
if (ngx_hash_wildcard_init(&hash, ha.dns_wc_tail.elts,
746
ha.dns_wc_tail.nelts)
749
ngx_destroy_pool(ha.temp_pool);
750
return NGX_CONF_ERROR;
753
in_addr[a].wc_tail = (ngx_hash_wildcard_t *) hash.hash;
733
756
ngx_destroy_pool(ha.temp_pool);
764
in_addr[a].nregex = regex;
765
in_addr[a].regex = ngx_palloc(cf->pool,
766
regex * sizeof(ngx_http_server_name_t));
768
if (in_addr[a].regex == NULL) {
769
return NGX_CONF_ERROR;
772
for (i = 0, s = 0; s < in_addr[a].names.nelts; s++) {
774
in_addr[a].regex[i++] = name[s];
736
780
in_addr = in_port[p].addrs.elts;
848
892
hip->addrs[i].core_srv_conf = in_addr[i].core_srv_conf;
850
894
if (in_addr[i].hash.buckets == NULL
851
&& (in_addr[i].dns_wildcards == NULL
852
|| in_addr[i].dns_wildcards->hash.buckets == NULL))
895
&& (in_addr[i].wc_head == NULL
896
|| in_addr[i].wc_head->hash.buckets == NULL)
897
&& (in_addr[i].wc_head == NULL
898
|| in_addr[i].wc_head->hash.buckets == NULL))
861
907
hip->addrs[i].virtual_names = vn;
863
vn->hash = in_addr[i].hash;
864
vn->dns_wildcards = in_addr[i].dns_wildcards;
909
vn->names.hash = in_addr[i].hash;
910
vn->names.wc_head = in_addr[i].wc_head;
911
vn->names.wc_tail = in_addr[i].wc_tail;
913
vn->nregex = in_addr[i].nregex;
914
vn->regex = in_addr[i].regex;
921
972
if (in_port->addrs.elts == NULL) {
922
973
if (ngx_array_init(&in_port->addrs, cf->temp_pool, 4,
923
sizeof(ngx_http_conf_in_addr_t)) != NGX_OK)
974
sizeof(ngx_http_conf_in_addr_t))
925
977
return NGX_ERROR;
934
986
in_addr->addr = lscf->addr;
935
987
in_addr->hash.buckets = NULL;
936
988
in_addr->hash.size = 0;
937
in_addr->dns_wildcards = NULL;
989
in_addr->wc_head = NULL;
990
in_addr->wc_tail = NULL;
938
991
in_addr->names.elts = NULL;
994
in_addr->regex = NULL;
939
996
in_addr->core_srv_conf = cscf;
940
997
in_addr->default_server = lscf->conf.default_server;
941
998
in_addr->bind = lscf->conf.bind;
969
1026
if (in_addr->names.elts == NULL) {
970
1027
if (ngx_array_init(&in_addr->names, cf->temp_pool, 4,
971
sizeof(ngx_http_server_name_t)) != NGX_OK)
1028
sizeof(ngx_http_server_name_t))
973
1031
return NGX_ERROR;
977
1035
server_names = cscf->server_names.elts;
978
1037
for (i = 0; i < cscf->server_names.nelts; i++) {
980
1039
for (n = 0; n < server_names[i].name.len; n++) {
985
1044
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, cf->log, 0,
986
1045
"name: %V", &server_names[i].name);
989
1047
name = ngx_array_push(&in_addr->names);
990
1048
if (name == NULL) {
991
1049
return NGX_ERROR;