2016-08-08 7 views
1

В настоящее время я тестирую приложение perl cgi в nginx и fcgiwrap. Это частично работает. Однако у меня возникают проблемы с получением ошибок в ответе.nginx не возвращает ошибки из fcgiwrap при использовании supervisord

Все запросы возвращают 200. Если ошибки cgi, он просто возвращает пустой контент.

Я запускаю как nginx, так и fcgiwrap из supervisord.

Это мой файл supervisord.conf ...

[supervisord] 
logfile=/tmp/supervisord.log 
nodaemon=true 

[fcgi-program:fcgiwrap] 
command = /usr/sbin/fcgiwrap 
user = www-data 
socket = unix:///var/run/supervisor/%(program_name)s.sock 
socket_owner = www-data:www-data 
socket_mode = 0770 
autorestart=true 
autostart=true 
startsecs=1 
startretries=3 
stopsignal=QUIT 
stopwaitsecs=10 
environment=PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin' 
redirect_stderr=false 
stdout_logfile=/var/log/fcgiwrap_out.log 
stderr_logfile=/var/log/fcgiwrap_err.log 

[program:nginx] 
command=/usr/sbin/nginx -g 'daemon off;' 

Я получаю ошибки, возникающие в /var/log/fcgiwrap_err.log. Однако сообщение об ошибке и, что более важно, статус, не возвращаются в nginx.

Это мой Nginx конфигурации ...

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    root /var/www/web; 

    index index.html index.cgi; 

    server_name _; 

    location/{ 
      try_files $uri $uri/ =404; 
    } 

    location ~ \.cgi$ { 
     gzip off; 
     include /etc/nginx/fastcgi_params; 
     fastcgi_pass unix:/var/run/supervisor/fcgiwrap.sock; 
     fastcgi_index index.cgi; 
     fastcgi_param SCRIPT_FILENAME /var/www/web$fastcgi_script_name; 
    } 

    # deny access to .htaccess files 
    location ~ /\.ht { 
      deny all; 
    } 
} 

Я не уверен, является ли из-за неправильной конфигурации fcgiwrap, Nginx, или supervisord вопрос.

ответ

0

Вы сказали диспетчеру контролировать разъем (/var/run/supervisor/fcgiwrap.sock), но не сказали fcgiwrap использовать этот сокет. Таким образом, соединение PHP через этот пустой сокет никогда не достигнет процесса fcgiwrap, и, следовательно, у вас нет сообщения об ошибке от fcgiwrap.

Вы должны изменить команду fcgiwrap указать сокет, с помощью параметра -s.

+0

Спасибо, я закончил с совершенно другой архитектурой, которая не использовала супервизор (или докер), но это, безусловно, звучит так, будто это может быть проблемой. Я мог бы увидеть, могу ли я выкопать старый исходный код и попробовать его. – user1751825