LINUX.ORG.RU
решено ФорумAdmin

FreeBSD NGINX+fcgiwrap=«502 Bad Gateway»

 , , ,


0

1

Имеем:

FreeBSD 10.3-RELEASE FreeBSD 10.3-RELEASE
nginx-1.10.1,2
fcgiwrap-1.1.0_6

При попытке открыть в браузере любой pl скрипт получаю «502 Bad Gateway».

Настройка виртуального хоста в NGINX:

server {
    listen 80;
    server_name perl.site.ru;

    root /web/sites/perl.site.ru/www;
    index index.php index.html index.htm index.cgi index.pl;
    access_log /web/sites/perl.site.ru/log/access.log main;
    error_log /web/sites/perl.site.ru/log/error.log;

    location ~* \.php$ {
        fastcgi_pass   unix:/tmp/php-fpm.sock;
        fastcgi_index index.php;

        fastcgi_param DOCUMENT_ROOT /web/sites/perl.site.ru/www/;
        fastcgi_param SCRIPT_FILENAME /web/sites/perl.site.ru/www$fastcgi_script_name;
        fastcgi_param PATH_TRANSLATED /web/sites/perl.site.ru/www$fastcgi_script_name;

        include fastcgi_params;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    location ~ \.pl|cgi$ {
        gzip off;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }

}

rc.conf

# PHP-fpm
php_fpm_enable="YES"
#
# NGINX
nginx_enable="YES"
#
# FastCGI wrapper
fcgiwrap_enable="YES"
fcgiwrap_user="www"
fcgiwrap_socket_owner="www"
fcgiwrap_socket_group="www"
fcgiwrap_socket="unix:/var/run/fcgiwrap/fcgiwrap.sock"

Перерыл кучу форумов, ничего не помогает. С PHP все прекрасно работает. Подскажите, может я что-то делаю не там или не-то?

/var/run/fcgiwrap/fcgiwrap.sock

вот такой файл у вас существует?

l0stparadise ★★★★★ ()
Ответ на: комментарий от l0stparadise

Конечно. Прикол в том, что в логах нет никаких ошибок, акромя самой 502-й.

the_vitas ()
Ответ на: комментарий от the_vitas
-rw-------  1 www  wheel  5 29 июн 11:59 fcgiwrap.pid
srwxr-xr-x  1 www  www    0 29 июн 11:59 fcgiwrap.sock
the_vitas ()
Ответ на: комментарий от the_vitas

В логах fcgiwrap совсем пусто, да?

Еще момент - исправьте локейшн вот на это:

location ~ \.(pl|cgi)$ {

Я бы, честно говоря, просто запустил nginx с дебаг логом, потому что конкретных идей нет. 502 - значит nginx не может достучаться до бэкенда. Если в логах бэкенда пусто - значит все ломается раньше, чем запрос доходит в бэкенд. Если из имеющихся логов не ясно, где он валится... Надо сделать более подробные логи =)

l0stparadise ★★★★★ ()

Права на *.pl и каталог с ними правильные ?

Deleted ()
Ответ на: комментарий от Deleted

На все стоят права www:www. При не правильных правах получаем отлуп по «Access denied» и ошибку 403. Пробовал ставить даже 777 на всю папку и вложения, не помогает.

the_vitas ()
Ответ на: комментарий от the_vitas

Ошибка не похожа на nginx'овую. Попробуйте создать вот такой перловый файл

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Hello World.\n";

И открыть его.

l0stparadise ★★★★★ ()
Ответ на: комментарий от l0stparadise

Да приветствие в браузере появилось без проблем.

Тогда не понятно почему скрипт

#!/usr/loca/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n<BODY BGCOLOR=\"#FFF\">\n\n";
print "Hello!!!";
print "</BODY>\n";
print "</HTML>\n";
не отрабатывает, а вываливает ошибку 502...

the_vitas ()
Ответ на: комментарий от the_vitas

#!/usr/bin/perl

#!/usr/loca/bin/perl
не отрабатывает, а вываливает ошибку 502

Deleted ()
Ответ на: комментарий от Deleted

Во FreeBSD с 20 версии перла симлинк /usr/bin/perl уничтожен Поэтому все перловые скрипты должны быть /usr/local/bin/perl. В скрипте, что предложил протестировать l0stparadise, я так же путь заменил на /usr/local/bin/perl. Потому не того, этого...

the_vitas ()
Ответ на: комментарий от Deleted
Message from perl5-5.24.1:
The /usr/bin/perl symlink has been removed starting with Perl 5.20.
For shebangs, you should either use:

#!/usr/local/bin/perl

or

#!/usr/bin/env perl

The first one will only work if you have a /usr/local/bin/perl,
the second will work as long as perl is in PATH.
the_vitas ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.