http - nginx server name regex when "Host" header has a trailing dot -


i've considered potential trailing hostname dot handling in 2 contexts in nginx, , curious whether usage in either 1 necessary entirely correct configuration:

  • server_name ~^(\w+)\.(example\.com)\.?$;

  • if ($host ~ ^(\w*)\.(example\.com)\.?$) {

no, not necessary in either context — nginx automatically takes care of trailing dot, both in context of $host variable, server_name directive, leaving $http_host variable dot (if present in request).

i believe implemented in http/ngx_http_request.c#ngx_http_validate_host:

1925    if (dot_pos == host_len - 1) { 1926        host_len--; 1927    } 

it can verified following minimal config:

server {     listen  [::]:7325;     server_name ~^(\w*)\.?(example\.com\.?)$;     return  200 c:$2\th:$host\thh:$http_host\tsn:$server_name\n; } 

running following tests against nginx/1.2.1:

%printf 'get / http/1.0\nhost: head.example.com.\n\n' | nc localhost 7325 | fgrep example c:example.com   h:head.example.com  hh:head.example.com.    sn:~^(\w*)\.?(example\.com\.?)$ % %printf 'get http://line.example.com./ http/1.0\n\n' | nc localhost 7325 | fgrep example c:example.com   h:line.example.com  hh: sn:~^(\w*)\.?(example\.com\.?)$ % %printf 'get http://line.example.com./ http/1.0\nhost: head.example.com.\n\n' | nc localhost 7325 | fgrep example c:example.com   h:line.example.com  hh:head.example.com.    sn:~^(\w*)\.?(example\.com\.?)$ % 

note neither regexp capture within server_name directive, nor $host variable, ever has trailing dot. such, pointless account in above contexts.


Comments

Popular posts from this blog

php - Vagrant up error - Uncaught Reflection Exception: Class DOMDocument does not exist -

vue.js - Create hooks for automated testing -

Add new key value to json node in java -