Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 020 338 раз!

Форум

Добро пожаловать, Гость!

Своя конфигурация для каждого хоста

Советы и рекомендации, полезные инструкции, обмен опытом
Grafs
Сообщения: 7
C нами: 4 года 10 мес

Непрочитанное сообщение Grafs » 01 фев 2012, 22:46

Здравствуйте
Очень хотелось бы иметь возможность создания своей полной конфигурации для любого созданного хоста.
Процесс вижу таким образом:
1. Создаем папку хоста, все как обычно
2. Нужно чтобы у данного хоста были свои настройки nginx, php. Кидаем в корень хоста php.ini и nginx.conf и т.д. Было бы хорошо максимально настривать для каждого хоста свои конфиги.
3. Ваш сервер проверяет если эти файлы имеются, то подключаются именно они, если нет то конфиг по умолчанию.
В большинстве случаев достаточно конечно конфига по умолчанию, но для некоторых сайтов необходим и свой конфиг. Очень нужно.
И если при этом создадите файл-конфиг прописывания своих путей для каждого хоста будет вообще здорово.

Аватара пользователя
Максим
Сообщения: 4875
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 01 фев 2012, 22:51

В Nginx + PHP 5.3 FastCGI такое может и прокатит, php этой версии умеет php.ini для каждой папки. Но не более. Посмотрим что можно сделать.

Grafs
Сообщения: 7
C нами: 4 года 10 мес

Непрочитанное сообщение Grafs » 02 фев 2012, 00:29

Да, хотябы реализовать что можно. Ок, жду с нетерпением

Haikson
Сообщения: 5
C нами: 4 года

Непрочитанное сообщение Haikson » 23 фев 2013, 15:28

Действительно, вопрос актуальный. Тестирую разработку на 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 хоста        #
#---------------------------------------------#


При каждом обновлении, наверное, придется вписывать костыль.

DOHC
Сообщения: 5
C нами: 3 года 9 мес

Непрочитанное сообщение DOHC » 25 фев 2013, 10:08

Когда мне потребовалось иметь разные настройки php для каждого хоста, а именно разные значения mbstring.func_overload, добавил в файл конфигурации для нужных хостов следующие строки:
<Directory "%sprogdir%/domains/aaa.test/*">
   AllowOverride All
    php_admin_value mbstring.func_overload 2
</Directory>

Haikson
Сообщения: 5
C нами: 4 года

Непрочитанное сообщение Haikson » 25 фев 2013, 11:52

DOHC писал(а):Когда мне потребовалось иметь разные настройки php для каждого хоста, а именно разные значения mbstring.func_overload, добавил в файл конфигурации для нужных хостов следующие строки:
<Directory "%sprogdir%/domains/aaa.test/*">
   AllowOverride All
    php_admin_value mbstring.func_overload 2
</Directory>

Это для Apache. Там всё просто: .htaccess со своими замутами и всё.
Вопрос стоит для nginx.

Аватара пользователя
Максим
Сообщения: 4875
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 27 фев 2013, 14:31

Меня вообще раньше посещали сумасшедшие мысли сделать такую архитектуру, чтобы запускать под каждый сайт свой апач, пхп и мускул со своими настройками. :) Сделать это можно, но вот памяти будет кушать ооочень много, на обычном компьютере даже не запустится ничего, потому от затеи отказался. А так было бы круто конечно.

DOHC
Сообщения: 5
C нами: 3 года 9 мес

Непрочитанное сообщение DOHC » 27 фев 2013, 15:06

Максим писал(а):под каждый сайт свой апач, пхп и мускул

- это еще с портами будут дополнительные проблемы.

sway
Сообщения: 12
C нами: 3 года 4 мес

Непрочитанное сообщение sway » 18 июл 2013, 13:03

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


Вернуться в «Полезные советы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей