Apache env variables
Переменные окружения и их применение в апаче и нжинксе
Вводная: есть cmd.cgi который пишет данные в файл для того что бы в нагиос можно было отдавть результаты пассивных проверок.CGI медленный надо сделать быстрым. Так-как все данные прилетают GET то напрашивается решение разбирать его и писать прямо в лог
Примеры:
Apache
<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost
# DocumentRoot /var/www/html
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/default_error.log
CustomLog ${APACHE_LOG_DIR}/default_access.log nagios
ScriptAlias /cgi-bin/nagios3 /usr/lib/cgi-bin/nagios3
ScriptAlias /nagios3/cgi-bin /usr/lib/cgi-bin/nagios3
Alias /nagios3/stylesheets /etc/nagios3/stylesheets
Alias /nagios3 /usr/share/nagios3/htdocs
CustomLog /var/lib/nagios3/rw/nagios.cmd nagios
LogLevel alert rewrite:trace4
RewriteEngine On
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule (.*) $1 [E=arg_host:default_val]
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteCond %{QUERY_STRING} host=([^&]*).*$
RewriteRule (.*) $1 [E=arg_host:%1]
#
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule (.*) $1 [E=arg_service:default_val]
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteCond %{QUERY_STRING} service=([^&]*).*$
RewriteRule (.*) $1 [E=arg_service:%1]
#
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule (.*) $1 [E=arg_plugin:default_val]
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteCond %{QUERY_STRING} plugin=([^&]*).*$
RewriteRule (.*) $1 [E=arg_plugin:%1]
#
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule (.*) $1 [E=arg_plugin_state:default_val]
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteCond %{QUERY_STRING} plugin_state=([^&]*).*$
RewriteRule (.*) $1 [E=arg_plugin_state:%1]
#
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule (.*) $1 [E=arg_plugin_output:default_val]
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteCond %{QUERY_STRING} plugin_output=([^&]*).*$
RewriteRule (.*) $1 [E=arg_plugin_output:%1]
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule ^ - [R=200]
### end
<DirectoryMatch (/usr/share/nagios3/htdocs|/usr/lib/cgi-bin/nagios3|/etc/nagios3/stylesheets)>
Options FollowSymLinks
DirectoryIndex index.php index.html
AllowOverride AuthConfig
Order Allow,Deny
Allow From All
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /etc/nagios3/htpasswd.users
# nagios 1.x:
#AuthUserFile /etc/nagios/htpasswd.users
require valid-user
</DirectoryMatch>
<Directory /usr/share/nagios3/htdocs>
Options FollowSymLinks
Options ExecCGI FollowSymLinks
</Directory>
</VirtualHost>
В этом примере
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteRule (.*) $1 [E=arg_plugin_output:default_val]
RewriteCond - только если запрос на cmd.cgi
RewriteRule - инициализирует переменную, это необязательное действие, arg_plugin_output - имя переменной, default_val - значение с которым она инициализируются.
RewriteRule (.*) $1 теоретически - должно "ничего не делать"
RewriteCond %{REQUEST_URI} "cmd.cgi"
RewriteCond %{QUERY_STRING} plugin_output=([^&]*).*$
RewriteRule (.*) $1 [E=arg_plugin_output:%1]
RewriteCond %{REQUEST_URI} "cmd.cgi" RewriteRule ^ - [R=200]
RewriteRule (.*) $1 [E=arg_plugin_output:%1] - не меняя URLзаписывает значение plugin_output в переменную arg_plugin_output
Запрос сам по себе - как то так: ....cmd.cgi?plugin_output=OK ...
LogFormat "[%{%s}t%{msec_frac}t] PROCESS_SERVICE_CHECK_RESULT;%{arg_host}e;%{arg_service}e;%{arg_plugin_state}e;%{arg_plugin_output}e" nagios
Nginx
Nginx имеет встроенную возможность обращаться к переменным
log_format nagios '[$msec] PROCESS_SERVICE_CHECK_RESULT;$arg_host;$arg_service;$arg_plugin_state;$arg_plugin_output';
server {
access_log /var/lib/nagios3/rw/nagios.cmd nagios buffer=4k;
listen 84 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
return 200;
}
}