у меня есть 2 sites-enabled
, с участием server_name
следующим образом:
server_name www.mysite.com mysite.com
и
server_name dev.mysite.com
Проблема: Когда я захожу на веб-сайт через его IP-адрес, просматривая журналы доступа / ошибок, оказывается, что nginx обслуживает root
из dev.mysite.com
.
Как nginx решает, что обслуживать? Можем ли мы заставить его служить root
из www.mysite.com
когда сайт посещается с его IP-адреса?
conf
server {
listen 80;
server_name www.mysite.com mysite.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/mysite/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args ;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_read_timeout 300;
}
}
Вкратце: вы не сказали Nginx, какой server {...}
на выбор - значит, выбрал первое.
Nginx передает запросы на сервер по умолчанию. Для этого он соответствует Host
заголовок против server_name
. Если используется IP-адрес, Host
заголовок будет содержать IP-адрес (что означает, что его можно использовать для сопоставления с server_name
).
В случае, если нет server_name
соответствует заголовку Host, nginx выберет сервер следующим образом:
listen 80 default_server
Цитата из Nginx вики:
Если в директиве есть
default_server
параметр, затем включающийserver {...}
блок будет сервером по умолчанию дляaddress:port
пара. Это полезно для виртуального хостинга на основе имен, где вы хотите указать блок сервера по умолчанию для имен хостов, которые не соответствуют никаким директивам server_name. Если нет директив с параметром default_server, то сервер по умолчанию будет первым блоком сервера, в которомaddress:port
пара появляется. Вdefault_server
Параметр появился в версии 0.8.21, таким образом устарел параметр по умолчанию.
Рекомендуемая литература:
root также может быть определен в области http перед сервером. Вы можете установить здесь свой корень по умолчанию.
html {
root /default/root
server {
root /site/root
}
}