Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:apache:apache_tnt
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
linux:apache:apache_tnt [2021/06/16 01:34] – dx | linux:apache:apache_tnt [2022/04/19 18:36] (текущий) – dx | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Трюки с Apache ====== | ||
+ | ===== HowTo - Как сделать xyz? ===== | ||
+ | |||
+ | ==== Редирект 301 http в https ==== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | ServerName foobar.com | ||
+ | ServerAlias www.foobar.com | ||
+ | #Redirect permanent / https:// | ||
+ | Redirect 301 / https:// | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | ServerName foobar.com | ||
+ | ServerAlias www.foobar.com | ||
+ | Protocols h2 http/1.1 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | если дополнительно надо убрать www, то добавляем vhost 443 | ||
+ | |||
+ | < | ||
+ | <If " | ||
+ | Redirect permanent / https:// | ||
+ | </If> | ||
+ | </ | ||
+ | |||
+ | также через htaccess | ||
+ | |||
+ | < | ||
+ | RewriteEngine on | ||
+ | RewriteCond %{HTTPS} off | ||
+ | RewriteRule ^(.*) https:// | ||
+ | </ | ||
+ | |||
+ | либо с указанием домена явно | ||
+ | |||
+ | < | ||
+ | RewriteEngine On | ||
+ | RewriteCond %{HTTPS} off | ||
+ | RewriteRule ^(.*)$ https:// | ||
+ | </ | ||
+ | |||
+ | и убираем www | ||
+ | |||
+ | < | ||
+ | RewriteCond %{HTTPS} off [OR] | ||
+ | RewriteCond %{HTTP_HOST} ^www\.foobar\.com [NC] | ||
+ | RewriteRule ^(.*)$ https:// | ||
+ | </ | ||
+ | |||
+ | ==== AH00558: apache2: Could not reliably determine the server' | ||
+ | |||
+ | AH00558: apache2: Could not reliably determine the server' | ||
+ | |||
+ | Добавить в ''/ | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== AH00548: NameVirtualHost has no effect ==== | ||
+ | |||
+ | AH00548: NameVirtualHost has no effect and will be removed in the next release / | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | < | ||
+ | |||
+ | This directive currently has no effect.</ | ||
+ | |||
+ | ==== Залогиниться в закрытую часть htpasswd ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | Без https так лучше не делать. | ||
+ | |||
+ | ==== Отличие между AddHandler и SetHandler ==== | ||
+ | |||
+ | Источник: | ||
+ | |||
+ | Веб-сервер apache достаточно прост в настройке. Но тут как и везде есть свои ньюансы. Вы можете заставить его интерпретировать php-файлы c помощью директивы SetHandler либо c помощью AddHandler. На первый взгляд кажется нет никакой разницы, | ||
+ | |||
+ | А все дело в том что apache допускает у файла несколько расширений. И если вы задаете директиву AddHandler — то вы просто указываете что выполнение как php — это только один из возможных способов обработки файла. В то время как SetHanler указывает однозначное соответствие. Что это означает на практике? | ||
+ | |||
+ | ==== Проверка нагрузки на веб-сервер ==== | ||
+ | |||
+ | Число процессов веб-сервера Apache | ||
+ | |||
+ | < | ||
+ | # ps aux | grep httpd | wc -l | ||
+ | # ps aux | grep apache2 | wc -l | ||
+ | </ | ||
+ | |||
+ | Число соединений на 80 порту | ||
+ | |||
+ | < | ||
+ | |||
+ | Число соединений на 80 порту в статусе SYN | ||
+ | |||
+ | < | ||
+ | |||
+ | Количество соединений на 80 порту с каждого IP | ||
+ | |||
+ | < | ||
+ | |||
+ | Общее количество соединений с каждого IP | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Как изменить имя веб-сервера ==== | ||
+ | |||
+ | Иногда внизу страниц 403/404/500 можно заметить нечто вроде **Apache/ | ||
+ | |||
+ | Если это включено намерено, | ||
+ | |||
+ | Ставим модуль | ||
+ | |||
+ | < | ||
+ | |||
+ | Добавляем в файл '' | ||
+ | |||
+ | < | ||
+ | ServerTokens Full | ||
+ | ServerSignature On | ||
+ | SecServerSignature " | ||
+ | </ | ||
+ | |||
+ | И перезапускаем веб-сервер | ||
+ | |||
+ | < | ||
+ | |||
+ | Результат | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Конечно же **mod_security** создан не для подобных шуток, а для защиты веб-приложений, | ||
+ | |||
+ | ==== Как перевыпустить самоподписанный сертификат используя openssl ==== | ||
+ | |||
+ | < | ||
+ | # uname -a | ||
+ | Linux cool.host.name 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux | ||
+ | </ | ||
+ | |||
+ | Истёк срок самоподписаного сертификата в Apache | ||
+ | |||
+ | < | ||
+ | # echo | openssl s_client -connect IP:443 2>/ | ||
+ | notBefore=Jan 10 15:19:56 2013 GMT | ||
+ | notAfter=Jan 10 15:19:56 2014 GMT | ||
+ | </ | ||
+ | |||
+ | Смотрим где находятся настройки связанные с SSL в Apache | ||
+ | |||
+ | < | ||
+ | # grep SSLCertificate / | ||
+ | # Point SSLCertificateFile at a PEM encoded certificate. | ||
+ | SSLCertificateFile / | ||
+ | SSLCertificateKeyFile / | ||
+ | # Point SSLCertificateChainFile at a file containing the | ||
+ | # the referenced file can be the same as SSLCertificateFile | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | Всегда делаем копию данных | ||
+ | |||
+ | < | ||
+ | # cp / | ||
+ | # cp / | ||
+ | </ | ||
+ | |||
+ | Создаём новый сертификат на 10 лет (3652 дня) | ||
+ | |||
+ | < | ||
+ | # openssl req -new -days 3652 -x509 -nodes -newkey rsa:2048 -out / | ||
+ | Generating a 2048 bit RSA private key | ||
+ | ......................+++ | ||
+ | ........................................................................................................................+++ | ||
+ | writing new private key to '/ | ||
+ | ----- | ||
+ | You are about to be asked to enter information that will be incorporated | ||
+ | into your certificate request. | ||
+ | What you are about to enter is what is called a Distinguished Name or a DN. | ||
+ | There are quite a few fields but you can leave some blank | ||
+ | For some fields there will be a default value, | ||
+ | If you enter ' | ||
+ | ----- | ||
+ | Country Name (2 letter code) [XX]: | ||
+ | State or Province Name (full name) []: | ||
+ | Locality Name (eg, city) [Default City]: | ||
+ | Organization Name (eg, company) [Default Company Ltd]: | ||
+ | Organizational Unit Name (eg, section) []: | ||
+ | Common Name (eg, your name or your server' | ||
+ | Email Address []: | ||
+ | </ | ||
+ | |||
+ | Возможно потребуется выставить права | ||
+ | |||
+ | < | ||
+ | # chmod 600 / | ||
+ | # chmod 600 / | ||
+ | </ | ||
+ | |||
+ | Перезапускаем веб-сервер | ||
+ | |||
+ | < | ||
+ | |||
+ | Проверяем новый сертификат | ||
+ | |||
+ | < | ||
+ | # echo | openssl s_client -connect 185.72.244.81: | ||
+ | notBefore=Jan 20 08:06:16 2017 GMT | ||
+ | notAfter=Jan 20 08:06:16 2027 GMT | ||
+ | </ | ||
+ | |||
+ | ==== Как сделать, | ||
+ | |||
+ | Задача: | ||
+ | |||
+ | Решение: | ||
+ | |||
+ | < | ||
+ | < | ||
+ | redirect permanent / http:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Где http:// | ||
+ | |||
+ | ==== http authentication ==== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | # Apache 2.4 or later | ||
+ | AuthType Basic | ||
+ | AuthName " | ||
+ | AuthBasicProvider file | ||
+ | AuthUserFile "/ | ||
+ | Require valid-user | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | # Apache 2.2 or lower | ||
+ | AuthType Basic | ||
+ | AuthName " | ||
+ | AuthUserFile "/ | ||
+ | Require valid-user | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Редирект 301 domain.com в www.domain.com используя mod_rewrite ==== | ||
+ | |||
+ | via http:// | ||
+ | |||
+ | < | ||
+ | Options +FollowSymLinks | ||
+ | RewriteEngine On | ||
+ | rewritecond %{http_host} ^domain.com [NC] | ||
+ | rewriterule ^(.*)$ http:// | ||
+ | </ | ||
+ | |||
+ | ==== Как посмотреть список загруженных модулей Apache ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | или | ||
+ | |||
+ | < | ||
+ | |||
+ | или (для RHEL, Fedora, CentOS) | ||
+ | |||
+ | < | ||
+ | |||
+ | UPD бонус - посмотреть настроенные виртуальные хосты | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Как посмотреть uptime веб-сервера? | ||
+ | |||
+ | < | ||
+ | # ps -eo comm,etime | grep httpd | ||
+ | httpd | ||
+ | httpd 01:09 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:45 | ||
+ | httpd 20:14:34 | ||
+ | httpd 19:45:45 | ||
+ | httpd 19:40:57 | ||
+ | httpd 19:40:56 | ||
+ | httpd 19:40:56 | ||
+ | </ | ||
+ | |||
+ | Если включен [[http:// | ||
+ | |||
+ | < | ||
+ | The ' | ||
+ | # yum install links | ||
+ | </ | ||
+ | |||
+ | ==== logrotate, uptime ==== | ||
+ | |||
+ | У сервера uptime год, а вот Apache постоянно перезагружается? | ||
+ | |||
+ | В error_log следующее | ||
+ | |||
+ | < | ||
+ | [Sun Jun 19 04:41:01 2016] [notice] SIGHUP received. | ||
+ | [Sun Jun 26 03:11:03 2016] [notice] SIGHUP received. | ||
+ | </ | ||
+ | |||
+ | Как посмотреть, | ||
+ | |||
+ | < | ||
+ | # grep resuming / | ||
+ | [Sun Jun 26 03:11:04 2016] [notice] Apache/ | ||
+ | </ | ||
+ | |||
+ | Никакого бага или ошибки здесь нет, это такая фича. При запуске ротации логов Apache делает < | ||
+ | |||
+ | Файл ''/ | ||
+ | |||
+ | < | ||
+ | / | ||
+ | missingok | ||
+ | notifempty | ||
+ | sharedscripts | ||
+ | delaycompress | ||
+ | postrotate | ||
+ | / | ||
+ | endscript | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Как сделать, | ||
+ | |||
+ | Например так - http:// | ||
+ | Logrotate httpd (apache) logs - Possible without reloading httpd after log purge?]]) | ||
+ | |||
+ | Загадочный cron.daily, а также .hourly и .weekly | ||
+ | |||
+ | Вы когда-нибудь задавались вопросом, | ||
+ | |||
+ | Разные панели Vesta/ | ||
+ | |||
+ | Ещё интересное | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | UPD | ||
+ | |||
+ | Читай МАНтру и будешь труЪ! | ||
+ | |||
+ | **Проблема.** Настроил в отдельном файле в "/ | ||
+ | |||
+ | < | ||
+ | / | ||
+ | hourly | ||
+ | rotate 5 | ||
+ | </ | ||
+ | |||
+ | **В чём же дело?** | ||
+ | |||
+ | //Log files are rotated every hour. Note that usually logrotate is configured to be run by cron daily. You have to change this configuration and run logrotate hourly to be able to really rotate logs hourly.// | ||
+ | |||
+ | **Как быть?** Скопировать ''/ | ||
+ | |||
+ | ===== Ошибки, | ||
+ | |||
+ | ==== handle($request); | ||
+ | |||
+ | ...$kernel-> | ||
+ | |||
+ | Решение | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== perhaps misspelled or defined ==== | ||
+ | |||
+ | **Err:** Invalid command ' | ||
+ | **Fix:** a2enmod headers | ||
+ | |||
+ | **Err:** Invalid command ' | ||
+ | **Fix:** a2enmod ssl | ||
+ | |||
+ | **Err:** Invalid command ' | ||
+ | **Fix:** a2enmod proxy | ||
+ | |||
+ | ==== Config variable ${APACHE_RUN_USER} is not defined ==== | ||
+ | |||
+ | Ошибка | ||
+ | |||
+ | < | ||
+ | # apache2 -V | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | [Fri Apr 20 07: | ||
+ | AH00526: Syntax error on line 74 of / | ||
+ | Invalid Mutex directory in argument file: | ||
+ | </ | ||
+ | |||
+ | Решение | ||
+ | |||
+ | < | ||
+ | # source / | ||
+ | # apache2 -t | ||
+ | Syntax OK | ||
+ | </ | ||
+ | |||
+ | ==== httpd.itk: could not open error log file ==== | ||
+ | |||
+ | Starting httpd: (2)No such file or directory: httpd.itk: could not open error log file / | ||
+ | Unable to open logs | ||
+ | |||
+ | В ''/ | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== module remoteip_module is already loaded, skipping ==== | ||
+ | |||
+ | Смотрим где у нас дублируется **LoadModule** | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== (98)Address already in use: make_sock: could not bind to address 80 ==== | ||
+ | |||
+ | via http:// | ||
+ | |||
+ | < | ||
+ | # for i in `ps auwx | grep -i nobody | awk {' | ||
+ | # for i in `lsof -i :80 | grep http | awk {' print $2'}`; do kill -9 $i; done | ||
+ | # for i in `lsof -i :80 | grep http | awk {' print $2'}`; do kill -9 $i; done | ||
+ | # service httpd restart | ||
+ | </ | ||
+ | |||
+ | или так | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== PHP Warning: require_once(): | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ==== (28)No space left on device: Couldn' | ||
+ | |||
+ | // | ||
+ | |||
+ | Решение | ||
+ | |||
+ | < | ||
+ | |||
+ | или так | ||
+ | |||
+ | < | ||
+ | |||
+ | Увеличить кол-во семафоров | ||
+ | |||
+ | <file bash / | ||
+ | kernel.msgmni = 1024 | ||
+ | kernel.sem = 250 256000 32 1024 | ||
+ | </ | ||
+ | |||
+ | Применить изменения | ||
+ | |||
+ | < | ||
+ | |||
+ | http:// | ||
+ | |||
+ | ==== httpd dead but subsys locked ==== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | См. выше Couldn' | ||
+ | |||
+ | ==== Клон сайта ==== | ||
+ | |||
+ | У вас есть сайт и выделенный IP на сервере. У нехорошего человека есть домен и он направляет DNS на ваш IP. По чужому домену открывается ваш сайт. Вы теряете посетителей. | ||
+ | |||
+ | FIXME | ||
+ | |||
+ | < | ||
+ | RewriteBase / | ||
+ | RewriteCond %{HTTP_HOST} !^site.ru$ [NC] | ||
+ | RewriteRule ^(.*)$ http:// | ||
+ | </ | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ==== [authz_core: | ||
+ | |||
+ | http:// | ||
+ | |||
+ | //In 2.2, access control based on client hostname, IP address, and other characteristics of client requests was done using the directives Order, Allow, Deny, and Satisfy.// | ||
+ | |||
+ | //In 2.4, such access control is done in the same way as other authorization checks, using the new module mod_authz_host.// | ||
+ | |||
+ | Вместо | ||
+ | |||
+ | < | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | </ | ||
+ | |||
+ | Теперь используется | ||
+ | |||
+ | < | ||
+ | |||
+ | Ещё немного примеров | ||
+ | |||
+ | Было (2.2) | ||
+ | |||
+ | < | ||
+ | order allow,deny | ||
+ | deny from 192.168.1.7 | ||
+ | </ | ||
+ | |||
+ | Стало (2.4) | ||
+ | |||
+ | < | ||
+ | Require all granted | ||
+ | Require not ip 192.168.1.7 | ||
+ | </ | ||
+ | |||
+ | Было | ||
+ | |||
+ | < | ||
+ | Order deny,allow | ||
+ | Deny from all | ||
+ | </ | ||
+ | |||
+ | Стало | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Either all Options must start with + or -, or no Option may. ==== | ||
+ | |||
+ | Для всех опций надо добавлять + | ||
+ | |||
+ | Правильно | ||
+ | |||
+ | < | ||
+ | |||
+ | Неправильно | ||
+ | |||
+ | < | ||
+ | |||
+ | {{tag> |