рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓рд╛ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдо рд╣реИ: -
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред
рдЗрд╕ рдирд┐рдпрдо рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд▓реЛрдЧ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рд╕рдореНрдорд╛рдирд┐рдд рд╣реИрдВред рд╣рдо рдлреЙрд░реНрдо рдбреЗрдЯрд╛, рдХреБрдХреАрдЬрд╝, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпреВрдЖрд░рдЖрдИ рдХреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣
HTTP_HOST
рдФрд░
SERVER_NAME
рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк "HTTP_HOST" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрд┐рддреБрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
$_SERVER['HTTP_HOST']
43 рдРрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ
$_SERVER['HTTP_HOST']
ред рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдорд▓реЗ рдорд┐рд▓реЗ рдЬрдм рдЗрд╕ рдЪрд░ рдореЗрдВ рдЖрдП рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдХреНрд╕рд░ рд╡реЗ рдХреЗрд╡рд▓
$_SERVER['HTTP_HOST']
рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ Nginx + php рдмрдВрдбрд▓ (php-fpm рдпрд╛ fcgi-spawn) рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛, рдЕрдиреНрдп рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд╡рд┐рд╡рд░рдг рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдмрдиреЗ рд╣реБрдП рд╣реИрдВред
рдЕрдкрд╛рдЪреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ:
shiflett.org/blog/2006/mar/server-name-versus-hpp-hostрд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ
рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрд▓рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рд╣реЗрдбрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
GET / HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:site.dev Referer:http://site.dev/index.htm User-Agent:TelnetTest
рдпрджрд┐ рдЖрдк рдЙрдирд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣рдЯрд╛рддреЗ рд╣реИрдВ (
HTTP_HOST
рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ)
Host:site.dev,
рдлрд┐рд░ рд╕рд░реНрд╡рд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛
400 Bad Request
рд╣реЗрдбрд░ рднреЗрдЬрдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛:
GET http://site.dev/ HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:site.dev Referer:http://site.dev/index.htm User-Agent:TelnetTest
рдирддреАрдЬрд╛ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реЗрдбрд░ рднреЗрдЬрддреЗ рд╕рдордп
GET / HTTP/1.1
рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдкрд╣рд▓реА рд╣реЗрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ
GET http://site.dev/ HTTP/1.1
рдФрд░
GET http://site.dev/
рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, Nginx рд╕рд░реНрд╡рд░ рд╕реЗрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛
server_name site.dev;
рд▓реЗрдХрд┐рди
HTTP_HOST
рдФрд░
SERVER_NAME
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЦрд╛рд▓реА
HTTP_HOST
рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛:
Host:
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрджреЗрд╢ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИ
Host:_
рдпрд╛
Host:""
рдЕрдм рдордЬрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдЯреЗрд▓рдиреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
$ telnet site.dev 80 Trying 127.0.0.1... Connected to site.dev. Escape character is '^]'.
рд╣рдо рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ
GET http://site.dev/phpinfo.php HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:~%#$^&*()<>?@\!."'{}[]=+| Referer:http://site.dev/index.htm User-Agent:TelnetTest
рдФрд░ рджреЗрдЦреЛ:
_SERVER["SERVER_NAME"]: ~%#$^&*()<>?@\!."'{}[]=+| _SERVER["HTTP_HOST"]: ~%#$^&*()<>?@\!."'{}[]=+|
рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:
HTTP/1.1 200 OK Server: nginx/1.0.10 Date: Wed, 23 Jan 2013 10:31:14 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive
рдпрджрд┐
Host:
рд╣реЗрдбрд░ рдореЗрдВ
'/'
, рддреЛ рд╕рд░реНрд╡рд░
400 Bad Request
рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдпрд╛рдиреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ
Host:../../
рд╢реАрд░реНрд╖рдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ
Host:http://evil.site
рднреА
рдХрдордЬреЛрд░рд┐рдпреЛрдВ
рдирд┐рдЬреА рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдирд╛
рдПрд╕рдХреНрдпреВрдПрд▓ рдЗрдВрдЬреЗрдХреНрд╢рди
рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЗ
рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛ рддрд░реАрдХрд╛ (рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЧрдпрд╛:
stackoverflow.com/questions/1459739/php-serverhttp-host-vs-serverserver-name-am-i-understanding-the-ma )ред
$allowed_hosts = array('foo.example.com', 'bar.example.com'); if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) { header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request'); exit; }
рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл
HTTP_HOST
рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдзрд┐ рд╣реИред
HTTP_HOST
рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ Nginx config рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
fastcgi_param HTTP_HOST1 $http_host; fastcgi_param HTTP_HOST2 $host; fastcgi_param HTTP_HOST3 $server_name;
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ
server
рдЦрдВрдб рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ:
server { listen 80; server_name site1.dev; ... } server { listen 80; server_name site2.dev site3.dev; ... }
рдРрд╕реЗ рдирд┐рд╡реЗрджрди рдХрд░рддреЗ рд╣реИрдВ
$ telnet site1.dev 80 Trying 127.0.0.1... Connected to site.dev. Escape character is '^]'.
GET http://site3.dev/phpinfo.php HTTP/1.1 Host:~%#$^&*()<>?@\!."'{}[]=+| User-Agent:TelnetTest
рд╣рдореЗрдВ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ
_SERVER["HTTP_HOST1"]: ~%#$^&*()<>?@\!."'{}[]=+| _SERVER["HTTP_HOST2"]: site3.dev _SERVER["HTTP_HOST3"]: site2.dev
рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рд╕рд╣реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрдЧреА:
fastcgi_param HTTP_HOST $host;
рдпрджрд┐ рдЖрдк рдлреЙрд░реНрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ
$ telnet site3.dev 80
GET /phpinfo.php HTTP/1.1 Host:~%#$^&*()<>?@\!."'{}[]=+| User-Agent:TelnetTest
рддрдм рдЕрдиреБрднрд╛рдЧ рдХрд╛рдо рдХрд░реЗрдЧрд╛
server { listen 80 default_server; server_name ""; return 444; }
рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╛рдд рджреЗ рджреЗрдЧрд╛ред