nginx + spawn-fcgi обслуживает необработанный cgi (двоичный) контент файла (не выполняет их)

Я в тупике, пытаясь выяснить, почему мой nginx + spawn-fastcgi обслуживает необработанный двоичный контент, а не выполняет его и обслуживает результат.

Цель состоит в том, чтобы настроить Nagios Core 4.x с помощью NginX. Есть много хороших блогов по этому вопросу; но никто не пролил свет на мою проблему.

В настоящее время я использую CentOS 6.6 NginX v1.0.15, spawn-fcgi v1.6.3 и php (php-fpm) v5.4.30.

Хостинг файлов PHP прекрасно работает (php-fpm), ** это просто содержимое spawn-fcgi, у меня возникла проблема, с которой я отвечаю за обслуживание файлов /cgi-bin/*.cgi. Вот моя среда spwn-fcgi:

cat << _EOF > /etc/sysconfig/spawn-fcgi
OPTIONS="-u apache -g apache -a 127.0.0.1 -p 9001 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
_EOF

Моя конфигурация NginX:

server {
   listen 80;
   server_name monitor.mydomain.com;
   return 301 https://$server_name$request_uri;
}

server {
   listen 443;

   # Satisfy allows us to bypass authentication
   # for allowed ip addresses
   satisfy any;
   # Local Traffic only
   allow   192.168.0.0/24;
   allow   127.0.0.0/8;
   # drop rest of the world
   deny    all;

   server_name monitor.mydomain.com;
   root /usr/share/nagios;

   ssl_session_timeout  5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
   ssl_prefer_server_ciphers on;
   ssl_session_cache  builtin:1000  shared:SSL:10m;

   ssl on;
   ssl_certificate      /etc/pki/tls/certs/mydomain.com.crt;
   ssl_certificate_key  /etc/pki/tls/private/mydomain.com.key;

   index  index.php index.html index.htm;

   access_log  /var/log/nginx/nagios.access.log;
   error_log /var/log/nginx/nagios.error.log;

   # Security
   auth_basic            "Restricted Area";
   auth_basic_user_file  mynagios.htpasswd;

   location ~ \.htaccess {
      deny all;
   }

   location / { 
      if ($uri ~* "\.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$") {
         expires max;
         break;
      }
   }

   error_page  404              /404.html;
   location = /404.html {
      root   /usr/share/nginx/html;
   }

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
      root   /usr/share/nginx/html;
   }

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #
   location ~ \.php$ {
      try_files $uri = 404;

      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
   }

   #location ~ \.cgi$ {
   location /nagios/cgi-bin/ {
      root   /usr/lib64/nagios/cgi;
      rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;

      fastcgi_param  AUTH_USER $remote_user;
      fastcgi_param  REMOTE_USER $remote_user;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      #fastcgi_pass unix:/var/run/php-fcgi.sock;
      fastcgi_pass   127.0.0.1:9001;
      include      fastcgi_params;
   }
}

Инструмент, о котором идет речь, работает:

[root@fserver conf.d]# netstat -pnat | egrep '900(0|1)'
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      9054/php-fpm        
tcp        0      0 127.0.0.1:9001              0.0.0.0:*                   LISTEN      28888/php-cgi

Опять в двух словах; этот конфиг "почти" работает очень хорошо, но запрос, такой как https://monitor.mydomain.com/nagios/cgi-bin/status.cgi обслуживает контент:

ELF>... <raw ugly content>

Стоит также отметить, что я использовал SELinux (написал свой собственный модуль для Nagios), но отключил его (весь SELinux), пока не смог решить эту проблему cgi.

Любой совет, который вы, ребята, можете дать, был бы фантастическим! ТИА

1 ответ

Я понял проблему; если у кого-то возникла та же проблема, что и у меня, это было результатом того, что fcgiwrap не использовался. Я просто следовал инструкциям и скомпилировал его.

Использование fcgiwrap позволило мне выполнить код, возвращаемый spawn-fcgi вместо отображения необработанных данных (моя проблема):

cat << _EOF > /etc/sysconfig/spawn-fcgi
OPTIONS="-u apache -g apache -a 127.0.0.1 -p 9001 -f /usr/sbin/fcgiwrap -P /var/run/spawn-fcgi.pid"
_EOF

# Now restart spawn-fcgi
service spawn-fcgi restart
Другие вопросы по тегам