Apache env variables

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Переменные окружения и их применение в апаче и нжинксе

Вводная: есть 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;
    }

}