apache, vhosts, dns, поддомены на локальном хосте

12
J
На сайте с 02.02.2009
Offline
53
#11

Стало интересно - и поставил сначала PowerDNS - лень стало разбираться в Access, потом Simple DNS - не подцепился как доп.днс

BIND не сгенерил конфиг, а на винде не знаю куда пихать

В общем - имхо - не парьтесь, сделайте батник который будет в зависимости от содержания папки редактировать hosts - как в денвере.

UPD: PowerDNS имеет тулзу которая позволяет парсить BIND-зоны - так что можно с ним поиграться.

DG
На сайте с 07.01.2007
Offline
53
#12
T.R.O.N:
Поэтому и не понятно, что никогда ранее не ковырялись в том, чем занялись сейчас....
DNS сервера, для win98/XP - это, по сути, эмуляторы протокола. Вы замучаетесь ходить по граблям, не понимая что, где и почему не стреляет...
А серверных осей сама реализация TCP/IP выполнена иначе чем у клиентских

Я ж поднимаю не полноценный сервер в сеть, а так - для своего пользования. Поэтому не хочу сносить давно установленную систему только из-за 1 сайта.

DimoninG добавил 23.10.2009 в 15:32

jumash:
Стало интересно - и поставил сначала PowerDNS - лень стало разбираться в Access, потом Simple DNS - не подцепился как доп.днс

BIND не сгенерил конфиг, а на винде не знаю куда пихать

В общем - имхо - не парьтесь, сделайте батник который будет в зависимости от содержания папки редактировать hosts - как в денвере.

UPD: PowerDNS имеет тулзу которая позволяет парсить BIND-зоны - так что можно с ним поиграться.

BIND и не генерирует конфиг. Конфиг прописывается вручную. Поставил бинд, настроил более-менее. Сейчас мучаюсь с днс-зонами и всякой этой штукой.

мой блог - заработок в сети (http://izombie.ru)
KU
На сайте с 17.07.2008
Offline
251
#13

Пропишите все поддомены в hosts да и все.

Хостинг ( https://good-host.net ) / Linux VPS ( https://good-host.net/vps ) / Windows VPS ( https://good-host.net/windows-vps ) / Выделенные серверы ( https://good-host.net/dedicated ) 14 лет онлайн!
T.R.O.N
На сайте с 18.05.2004
Offline
314
#14

DimoninG,

Цена вопроса, или 100$ на комп или VMWare халявный

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
rtyug
На сайте с 13.05.2009
Offline
263
#15

лучше сервер, ставишь PowerDNS который работает с MySQL, настраиваешь apache и чтобы он, тоже, хранил vhost в MySQL и все

или текстовые файлы обрабаытваешь (удалять/добавлять)

добавить А запись в Bind9 можно так:


sudo -u named perl -le 'open(F,...): print "host.name\t\t\tA\t192.168.1.1"; close F;' /path/to/zone.file && rndc reload

обновить serial еще надо желательно на единицу

ЗЫ bind9 может работать с MySQL

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
N
На сайте с 16.02.2009
Offline
19
#16

Я когда-то давно написал себе следующий код для решения подобной проблемы:

<html>

<head>
<title>Добавление нового пользователя в систему</title>
</head>
<body>
<?php
if (!$_REQUEST) {
echo '<table width="100%" height="100%" border="0"><tr vAlign="middle"><td align="center">'
. '<table width="300" border="1" cellpadding="3" cellspacing="1"><tr>'
. '<form method="post">'
. '<td align="center" colspan="2"><b>Создать нового пользователя</b></td></tr>'
. '<tr><td align="right">Имя пользователя: </td><td><input type="text" name="login"></td></tr>'
. '<tr><td align="right">Домен: http://www.</td><td><input type="text" name="domain" value=""></td></tr>'
. '<tr><td align="right">Пароль: </td><td><input type="password" name="password"></td></tr>'
. '<tr><td colspan="2" align="center"><input type="submit" name="submit" value="Создать!"></td></tr>'
. '</form></table>';
} elseif (!empty ($_POST['login']) && !empty ($_POST['password']) && !empty ($_POST['domain'])) {
$config_file = "config.MySQL";
$windows_file = "c:/windows/system32/drivers/etc/hosts";
$apache_file = 'w:/Binary/Apache/conf/httpd.conf';
$apache_string = "<VirtualHost 127.0.0.%d>\n"
. " ServerName www.{$_POST['domain']}\n"
. " ServerAdmin admin@{$_POST['domain']}\n"
. " DocumentRoot \"w:/users/{$_POST['login']}\"\n"
. " <Directory \"w:/users/{$_POST['login']}\">\n"
. " Options Includes FollowSymLinks MultiViews\n"
. " AllowOverride All\n"
. " Order allow,deny\n"
. " Allow from all\n"
. " </Directory>\n"
. " ErrorLog \"w:/users/{$_POST['login']}/logs/error.log\"\n"
. " CustomLog \"w:/users/{$_POST['login']}/logs/custom.log\" common\n"
. "</VirtualHost>\n\n";
require ("my/functions.php");
try {
$db = db_connect ();
$sql = "grant all on {$_POST['login']}.* to {$_POST['login']} identified by '{$_POST['password']}'";
$query = $db->query ($sql);
if (!$query)
throw new Exception_DB ($sql);
echo "Пользователь <b>{$_POST['login']}</b> успешно создан на сервере MySQL.<br>\n";
$sql = "create database {$_POST['login']}";
$query = $db->query ($sql);
if (!$query)
throw new Exception_DB ($sql);
echo "База данных <b>{$_POST['login']}</b> успешно создана на сервере MySQL.<br>\n";
if (@ !$hosts = fopen ($windows_file, "a+"))
throw new Exception_DB ("Невозможно открыть файл <b>{$windows_file}</b> для записи.");
$count = 0;
$strings = Array ();
while (!feof ($hosts)) {
array_push ($strings, fgets ($hosts));
$count++;
}
$string = '127.0.0.' . $count . "\twww." . $_POST['domain'] . "\n";
fwrite ($hosts, $string);
fclose ($hosts);
echo "Данные файла хостов успешно обновлены.<br>\n";
if (`md w:\\users\\{$_POST['login']}\\logs`)
throw new Exception_DB ("Невозможно создать каталог для пользователя <b>{$_POST['login']}</b>.");
if (@ !$apache = fopen ($apache_file, "a"))
throw new Exception_DB ("Невозможно открыть файл <b>{$apache_file}</b> для записи.");
fwrite ($apache, sprintf ($apache_string, $count));
fclose ($apache);
echo "Данные конфигурационнного файла Apache успешно обновлены.<br>\n";
exec ("w:\\Binary\\Apache\\Apache.exe -k restart");
@ $fp = fopen ("w:\\users\\{$_POST['login']}\\{$config_file}", "w");
if ($fp) {
fwrite ($fp, "Host: localhost\nUser: {$_POST['login']}\nPassword: {$_POST['password']}\nDatabase: {$_POST['login']}\n");
fclose ($fp);
}
@ $fp = fopen ("w:\\users\\{$_POST['login']}\\index.php", "w");
if ($fp) {
fwrite ($fp, '<' . '?php echo "hello world! :)"; ?' . '>');
fclose ($fp);
}
}
catch (Exception_DB $string){
echo $string;
}
echo "Пользователь <b>{$_POST['login']}</b> успешно создан в системе.<br>\n";
echo "Конфигурационные данные для базы данных MySQL хранятся в файле <b>{$config_file}</b>.<br>\n";
echo "Новый хост доступен по адресу: <a href=\"http://www.{$_POST['domain']}\" target=\"_blank\">http://www.{$_POST['domain']}</a>.<br>\n";
} else
echo '<h1 align="center">Вы заполнили не все поля формы</h1>';
?>
</body>
</html>

Вкратце. Заполняем форму, указав домен, логин и пароль для нового сайта, после чего скрипт:

1. Создаёт в папке юзеров папку с названием логина.

2. Создаёт в MySQL БД с названием логина и цепляет на неё юзера с указанными логином/паролем.

3. Дописывает в конфиг апача нужные настройки VirtualHost.

4. Дописывает в файл hosts соответствующую строку связи домена с айпишником.

5. Создаёт в папке сайта файл index.php с выводом строки "hello world" + создаёт файлик config.MySQL, куда прописывает данные доступа к БД, чтобы не забыть.

6. Перезапускает апач.

Я так понимаю, в PHP разбираетесь, по этому Вам будет не сложно взять из этого кода нужный кусок и поставить куда Вам надо, сменив при этом, есессно, все необходимые пути в скрипте.

ЗЫ В файле my/functions.php всего-лишь функции для выполнения запросов к БД.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий