Страница 1 из 1
Своя конфигурация для каждого хоста
Добавлено: 01 фев 2012, 22:46
Grafs
Здравствуйте
Очень хотелось бы иметь возможность создания своей полной конфигурации для любого созданного хоста.
Процесс вижу таким образом:
1. Создаем папку хоста, все как обычно
2. Нужно чтобы у данного хоста были свои настройки nginx, php. Кидаем в корень хоста php.ini и nginx.conf и т.д. Было бы хорошо максимально настривать для каждого хоста свои конфиги.
3. Ваш сервер проверяет если эти файлы имеются, то подключаются именно они, если нет то конфиг по умолчанию.
В большинстве случаев достаточно конечно конфига по умолчанию, но для некоторых сайтов необходим и свой конфиг. Очень нужно.
И если при этом создадите файл-конфиг прописывания своих путей для каждого хоста будет вообще здорово.
Re: Своя конфигурация для каждого хоста
Добавлено: 01 фев 2012, 22:51
Максим
В Nginx + PHP 5.3 FastCGI такое может и прокатит, php этой версии умеет php.ini для каждой папки. Но не более. Посмотрим что можно сделать.
Re: Своя конфигурация для каждого хоста
Добавлено: 02 фев 2012, 00:29
Grafs
Да, хотябы реализовать что можно. Ок, жду с нетерпением
Собственные конфиги хостов в nginx
Добавлено: 23 фев 2013, 15:28
Haikson
Действительно, вопрос актуальный. Тестирую разработку на Django. Соответственно конфигурация не стандартная. Предлагаю перед тем, как генерить userdata\temp\config\nginx.conf искать nginx.conf в директории хоста. Если существует, то вместо:
server {
listen.....
.....
}
вставлять
include "%path_to_host%nginx.conf";
И реализовать должно быть не сложно, и вся ответственность по настройке сервера перекладывается на пользователя.
Надеюсь мое предложение в случае реализации будет полезно не только мне.
Добавлено спустя 5 часов 35 минут 18 секунд:
По сути реализовать удалось:
Файл:
userdata/config/Nginx-1.2.7_vhost.conf
В самом начале вставляем:
include "%hostdir%/nginx.conf";
В итоге Nginx игнорирует повторный хосты.
Вот код файла:
include "%hostdir%/nginx.conf";
#---------------------------------------------#
# Внимание! #
# При редактировании конфигурации хоста #
# нельзя удалять или заменять системные #
# переменные %...%, вы можете вносить только #
# новые записи дополняющие конфигурацию. #
#---------------------------------------------#
#---------------------------------------------#
# Начало блока конфигурации HTTP хоста #
#---------------------------------------------#
server {
listen %ip%:%httpport%;
server_name %host% %aliases%;
if ($request_method !~* ^(GET|HEAD|POST)$ ){return 403;}
location ~ /\. {deny all;}
location / {
root "%hostdir%";
index index.php index.html index.htm;
}
location ~ \.php$ {
root "%hostdir%";
try_files $uri =404;
# if (!-e $document_root$document_uri){return 404;}
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param TMP "%sprogdir%/userdata/temp";
fastcgi_param TMPDIR "%sprogdir%/userdata/temp";
fastcgi_param TEMP "%sprogdir%/userdata/temp";
fastcgi_connect_timeout 1s;
fastcgi_next_upstream timeout;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
fastcgi_buffers 4 64k;
fastcgi_ignore_client_abort off;
#fastcgi_intercept_errors on;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $host;
}
# Не удаляйте следующую строку конфигурации!
include "%sprogdir%/userdata/temp/config/%httpdriver%_url.conf";
}
#---------------------------------------------#
# Конец блока конфигурации HTTP хоста #
#---------------------------------------------#
#---------------------------------------------#
# Начало блока конфигурации HTTPS хоста #
#---------------------------------------------#
server {
listen %ip%:%httpsport%;
server_name %host% %aliases%;
if ($request_method !~* ^(GET|HEAD|POST)$ ){return 403;}
location ~ /\. {deny all;}
ssl on;
location / {
root "%hostdir%";
index index.php index.html index.htm;
}
location ~ \.php$ {
root "%hostdir%";
try_files $uri =404;
# if (!-e $document_root$document_uri){return 404;}
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param TMP "%sprogdir%/userdata/temp";
fastcgi_param TMPDIR "%sprogdir%/userdata/temp";
fastcgi_param TEMP "%sprogdir%/userdata/temp";
fastcgi_connect_timeout 1s;
fastcgi_next_upstream timeout;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
fastcgi_buffers 4 64k;
fastcgi_ignore_client_abort off;
#fastcgi_intercept_errors on;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $host;
}
# Не удаляйте следующую строку конфигурации!
include "%sprogdir%/userdata/temp/config/%httpdriver%_url.conf";
}
#---------------------------------------------#
# Конец блока конфигурации HTTPS хоста #
#---------------------------------------------#
При каждом обновлении, наверное, придется вписывать костыль.
Добавлено: 25 фев 2013, 10:08
DOHC
Когда мне потребовалось иметь разные настройки php для каждого хоста, а именно разные значения mbstring.func_overload, добавил в файл конфигурации для нужных хостов следующие строки:
<Directory "%sprogdir%/domains/aaa.test/*">
AllowOverride All
php_admin_value mbstring.func_overload 2
</Directory>
Добавлено: 25 фев 2013, 11:52
Haikson
DOHC писал(а):Когда мне потребовалось иметь разные настройки php для каждого хоста, а именно разные значения mbstring.func_overload, добавил в файл конфигурации для нужных хостов следующие строки:
<Directory "%sprogdir%/domains/aaa.test/*">
AllowOverride All
php_admin_value mbstring.func_overload 2
</Directory>
Это для Apache. Там всё просто: .htaccess со своими замутами и всё.
Вопрос стоит для nginx.
Добавлено: 27 фев 2013, 14:31
Максим
Меня вообще раньше посещали сумасшедшие мысли сделать такую архитектуру, чтобы запускать под каждый сайт свой апач, пхп и мускул со своими настройками.
Сделать это можно, но вот памяти будет кушать ооочень много, на обычном компьютере даже не запустится ничего, потому от затеи отказался. А так было бы круто конечно.
Добавлено: 27 фев 2013, 15:06
DOHC
Максим писал(а):под каждый сайт свой апач, пхп и мускул
- это еще с портами будут дополнительные проблемы.
Добавлено: 18 июл 2013, 13:03
sway
Для nginx однозначно нужна возможность задать свою конфигурацию для хоста. Я вот сейчас пытался поднять конфиги для CakePHP, но оставить возможность другим сайтам тоже жить. Покачто из этого ничего не выходит =(
Еще немного мешает
include "%sprogdir%/userdata/temp/config/%httpdriver%_url.conf";
Из-за этого нельзя использовать
if (!-f $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
Я еще немного пободаюсь, если найду способ - отпишусь
Добавлено спустя 37 минут 59 секунд:
Нашел!
Нужно модифицировать "location /" вот так:
Update от 2013.08.10:
Избавился от файла all_to_index, хотя возможны фейлы: если файл не найден, он всегда будет перенаправляться на index.php, даже если этого не требуется
location / {
root "%hostdir%";
index index.php index.html index.htm;
try_files $uri $uri/ @all_to_index;
}
location @all_to_index {
rewrite ^(.+)$ /index.php?q=$1 last;
}
[s]затем в папку рядом с index.php положить пустой файл "all_to_index" (без расширения)[/s]
Схема такая: если запрошенный файл или папка существует, то работать как обычно. Если же файл или папка не найдены - перенаправить их на "/index.php" (для CakePHP- "/index.php?q=$1", где $1 - зпрошенный uri). Это можно легко модифицировать и для других фреймворков