Страница 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). Это можно легко модифицировать и для других фреймворков