Защита Apache2 от аттак
apt-get install libapache2-mod-evasive
Apache2 — перезапуск без разрывов солединений
/etc/init.d/apache2 graceful
Скрываем начинку веб-сервера от глаз
ServerSignature Off ServerTokens Prod
expose_php = Off display_errors = Off
Генератор файлов конфигураций для Apache2, Nginx
run.sh — Скрипт для запуска создания файлов и перезапуска Nginx, Apache2:
#!/bin/sh cd /home/admin/www/_default/ php /home/admin/www/_default/conf.php /etc/init.d/nginx restart /etc/init.d/apache2 restart echo "The end"
domains.txt — список доменов:
домен1.ru домен2.ru домен3.ru
conf.php — Генератор конфигов на PHP:
$domains = explode("\n", file_get_contents("domains.txt")); $tmpl_apache=' ServerAdmin webmaster@localhost ServerName _host_ ServerAlias www._host_ AssignUserId admin www-data DocumentRoot /home/admin/www/_host_/ Options Indexes FollowSymLinks All MultiViews AllowOverride All ErrorLog /home/admin/logs/_host_-error_log '; $tmpl_nginx = ' server { listen 80; server_name ##domain## ##domain_aliases##; location /block.png { gzip off; default_type image/png; root /home/##user##/www/##domain##; } location ~* ^.+\.(swf|xml|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|ods|arj|htc|avi|mpg|mp3|mid)$ { valid_referers none blocked server_names ~\.google\. images.yandex.ru; if ($invalid_referer) { return 404; #rewrite /(.*)\.(gif|jpg|jpeg|png)$ / break; #rewrite ^(.*)$ /block.png break; } root /home/##user##/www/##domain##; } location ~ \.flv$ { root /home/##user##/www/##domain##; flv; } location / { proxy_pass http://127.0.0.1:81; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Accel-Internal /internal_xxx; proxy_set_header Host $http_host; proxy_redirect http://##domain##:81/ /; } location ~ /\.htp { deny all; } location ~ /\.hta { deny all; } location ~ /\.svn { deny all; } location /stub_status { stub_status on; access_log off;} } '; foreach($domains as $d) { if(strlen($d)>3) { $d = strtolower(trim($d)); $path = "/home/admin/www/".$d."/"; if(!file_exists($path))mkdir($path, 0755); $domain_aliases = "www.".$d; $user="admin"; //##domain## ##domain_aliases## $s = str_replace("_host_",$d,$tmpl_apache); $n = str_replace("##user##",$user,$tmpl_nginx); $n = str_replace("##domain##",$d,$n); $n = str_replace("##domain_aliases##",$domain_aliases,$n); //echo $s; $app_conf.=$s; $nginx_conf.=$n; } } echo file_put_contents("../apache_sites.conf", $app_conf); echo file_put_contents("../nginx_sites.conf", $nginx_conf); echo "ok";
apache2 — Запуск виртуальных хостов от разных учетных записей
Ситуация: У вас сервер. Вы предоставляете хостинг для своих друзей. У них отдельные SSH/FTP аккаунты. Необходимо разграничить доступ на уровне apache. По сути, нужно, что бы Apache запускался для каждого пользователя под своим логином.
Есть решения основанные на CGI, но я предпочитаю использовать модуль apache2-mpm-itk.
Установка apache2-mpm-itk может удалить apache2 и apache2-mpm-prefork
Устанавливаем:
$ sudo apt-get install apache2-mpm-itk
Далее, прописываем к каждому виртуальному хосту следующее:
<IfModule mpm_itk_module> AssignUserId USER GROUP </IfModule>
Если для виртуального хоста не будет указана эта директива, то сайт будет работает от стандартного пользователя, который установлен к файле настроек apache2 (Обычно www-data или apache2 или httpd).
Далее, необходимо установить права владения файлов у виртуальных хостов:
$sudo chownMYUSER:MYGROUP /var/www/my-virtualhost/ -R
Активировать этот модуль через a2enmod НЕ нужно.
Перезапускаем Apache2:
$ sudo /etc/init.d/apache2 reload