Повторное использование инструкций конфигурации для доменов в nginx.conf
Скажем, у меня есть конфигурация nginx, настроенная для такого домена:
server {
root /path/to/one;
server_name one.example.org;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Теперь, если я хочу добавить другой домен с другим контентом, есть ли способ повторно использовать эквивалентные утверждения из предыдущего домена или мне нужно дублировать все для каждого нового домена, который я хочу поддерживать?
server {
root /path/to/two; # different
server_name two.example.org; # different
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Я попытался переместить директиву location
вне закрытия server
, но, очевидно, что-то не так, потому что я получил ошибку "директива местоположения здесь не разрешена" при перезапуске nginx.
Ответы
Ответ 1
ты можешь сделать:
server_name one.example.org two.example.org;
если оба абсолютно идентичны, кроме имени домена
если у вас есть похожие блоки местоположения, вы можете переместить эти местоположения в отдельный файл, а затем выполнить
include /etc/nginx/your-filename;
легко использовать его в каждом блоке сервера
Ответ 2
Это хороший пример использования модуля nginx Map. http://wiki.nginx.org/HttpMapModule
Вот что я пытался. Он работает в моем devbox. Примечание
-
Директива map
- может быть помещена только в http-блок.
- Снижение производительности при объявлении директивы карты незначительно (см. ссылку выше)
-
у вас может быть свобода иметь другую корневую папку, номер порта и т.д.
map $subdomain $root_folder {
one /path/to/one;
two /path/to/two;
}
map $subdomain $port_number {
one 9000;
two 9100;
}
server {
listen 80;
server_name ~^(?P<subdomain>.+?)\.mydomain\.com$;
root $root_folder;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:$port_number;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}