Nginx 502 Bad Gateway - 111: Conexão recusada, porta não sendo escutada

2

Estou ciente de que há muitas outras perguntas semelhantes, mas as soluções das perguntas que eu sinto que já tenho em prática.

Eu tenho 3 sites rodando localmente em um servidor LTS VirtualBox Ubuntu 12.04.4, estou usando nginx e php-fpm.

Eles estão configurados para serem executados nas portas 9001 - > 9003:

server:/etc/php5/fpm/pool.d$ grep 900 *
my-app-deploy.conf:listen = 127.0.0.1:9002
my-app-dev.conf:listen = 127.0.0.1:9001
my-web.conf:listen = 127.0.0.1:9003

server:/etc/nginx/conf.d$ grep 900 *
my-app-deploy.conf:                fastcgi_pass   127.0.0.1:9002;
my-app-dev.conf:                fastcgi_pass   127.0.0.1:9001;
my-app-web.conf:                fastcgi_pass   127.0.0.1:9003;

Eu reiniciei php-fpm e nginx com êxito:

server:$ sudo service nginx restart
 * Restarting nginx nginx
   ...done.
server:$ sudo service php5-fpm restart
 * Restarting PHP5 FastCGI Process Manager php5-fpm
   ...done.

Mas se eu observar quais portas estão sendo ouvidas, só vejo 9002 e 9003 :

server:$ sudo lsof -i | grep 900
php5-fpm  1020     root    7u  IPv4   8557      0t0  TCP localhost:9002 (LISTEN)
php5-fpm  1020     root    8u  IPv4   8558      0t0  TCP localhost:9003 (LISTEN)
php5-fpm  1021 www-data    0u  IPv4   8557      0t0  TCP localhost:9002 (LISTEN)
php5-fpm  1022 www-data    0u  IPv4   8557      0t0  TCP localhost:9002 (LISTEN)
php5-fpm  1023 www-data    0u  IPv4   8557      0t0  TCP localhost:9002 (LISTEN)
php5-fpm  1024 www-data    0u  IPv4   8557      0t0  TCP localhost:9002 (LISTEN)
php5-fpm  1025 www-data    0u  IPv4   8558      0t0  TCP localhost:9003 (LISTEN)
php5-fpm  1026 www-data    0u  IPv4   8558      0t0  TCP localhost:9003 (LISTEN)
php5-fpm  1027 www-data    0u  IPv4   8558      0t0  TCP localhost:9003 (LISTEN)
php5-fpm  1028 www-data    0u  IPv4   8558      0t0  TCP localhost:9003 (LISTEN)

E recebo o seguinte erro do nginx :

server:~/vhosts/my-app/logs$ tail -n 1 nginx/error.log 
2014/06/20 11:07:36 [error] 2434#0: *4 connect() failed 
    (111: Connection refused) while connecting to upstream, client: 192.168.0.10,
    server: my.app.dev, request: "GET /api/test.php HTTP/1.1", upstream:
    "fastcgi://127.0.0.1:9001", host: "my.app.dev"

Espero ter perdido algo realmente básico, mas quando adicionei o site em 9002 não me lembro de ter que fazer mais nada além de adicionar o novo número de porta a ambos os arquivos conf

UPDATE A raiz do site está sendo veiculada, é apenas a página api / test.php que está retornando 502

UPDATE Mudei as portas, troquei web e dev por volta, assim dev está agora na porta 9001, mas isso não fez diferença. Atualizamos a pergunta para refletir isso.

Todas as três portas estão veiculando conteúdo - acho que é algo relacionado a redirecionamentos. Tenho a configuração para a seção da API.

Aqui está uma comparação entre as configurações dev e deploy do PHP e nginx:

server:/etc/nginx/conf.d$ diff my-app-dev.conf my-app-deploy.conf 
3c3
<         server_name my.app.dev;
---
>         server_name my.app.deploy;
10c10
<         root /var/www/vhosts/my-app/public_html/mobile;
---
>         root /var/www/vhosts/my-app/public_html/mobile_deploy;
47c47
<                 fastcgi_pass   127.0.0.1:9001;
---
>                 fastcgi_pass   127.0.0.1:9002;

server:/etc/php5/fpm/pool.d$ diff my-app-dev.conf my-app-deploy.conf
33c33
< listen = 127.0.0.1:9001
---
> listen = 127.0.0.1:9002
384c384
< php_admin_value[doc_root] = /var/www/vhosts/my-app/public_html/mobile
---
> php_admin_value[doc_root] = /var/www/vhosts/my-app/public_html/mobile_deploy

E aqui está o arquivo conf completo para o site dev, na porta 9001, que está me dando o 502

server {
        listen 80;
        server_name my.app.dev;

        error_log  /var/www/vhosts/logs/my-app/nginx/error.log;
        access_log /var/www/vhosts/logs/my-app/nginx/access.log  main;

        error_page 404 /404;

        root /var/www/vhosts/my-app/public_html/mobile;
        index index.html index.php;

        client_max_body_size 10M;

        proxy_read_timeout 180s;

        # deny any attempt to access hidden files
        location ~ /\. { deny all; }

        # disable logging for favicon
        location = /favicon.ico {
                log_not_found off;
        }

        location ~* \/api\/[0-9]\/.*\.zip {
                try_files $uri /api/3/nomarket.data.zip;
        }

        location ~* \/api\/picture\/[a-z]+\/? {
                if (!-e $request_filename) {
                        rewrite ^/api/picture/([a-z]+)/? /api/picture.php?type=$1 last; break;
                }
        }

        location /api {
                if (!-e $request_filename) {
                        rewrite ^/api/(.*)$ /api/router.php?rest_data=$1 last; break;
                }
        }

         # allow php files to be executed
        location ~ \.php$ {
                # only call php if the file exists. Very important for security!
                try_files  $uri =404;
                include /etc/nginx/fastcgi_params;
                fastcgi_pass   127.0.0.1:9001;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_index  index.php;
        }

        # just serve static files, please.
        location / { }
}
    
por Pete 20.06.2014 / 14:14

2 respostas

4

Sua saída lsof parece razoavelmente conclusiva que o php-fpm não está escutando na porta 9001 (embora você possa gostar de usar sudo netstat -plnt para uma listagem mais concisa que seja mais rápida de gerar).

Presumivelmente, o problema é com o php-fpm. Eu sugiro que você esqueça o nginx no momento, e use telnet localhost 9001 para depuração. Espero que você veja uma falha na conexão. Volte a usar o nginx assim que conseguir uma conexão.

Eu estou supondo que ou você tem um problema de configuração com o site que deveria estar na porta 9001, ou php-fpm foi por algum motivo incapaz de vincular a essa porta.

De qualquer forma, a primeira coisa que eu procuro é entradas de log do php-fpm no momento da inicialização. Você pode precisar habilitar esses logs. Veja esta pergunta para isso: Como configurar o php-fpm para registrar logs em arquivos de log configurados em nginx virtualhosts

Esses diffs de arquivos de configuração parecem bastante diretos. Talvez verifique os caracteres de controle nessas linhas (por exemplo, as extremidades da linha de estilo do Windows podem entrar com algumas práticas de trabalho). Além disso, lembre-se de verificar as diferenças nas permissões de arquivo e no conteúdo do arquivo.

Se o problema estiver relacionado à ligação à porta, a utilização de uma porta diferente provavelmente alterará o comportamento. Vale um tiro, mesmo que seja só para descartar isso. Você também pode procurar por strace output para ver o que acontece se / quando o fpm tentar vincular a porta 9001. Por exemplo, strace -p [pid] | grep -n 10 9001 .

    
por 01.07.2014 / 14:42
2

Nomes do pool PHP FPM

A partir do seu diff, parece que você duplicou os nomes dos pools PHP em /etc/php-fpm.d . Tenho certeza de que apenas o arquivo de configuração que será carregado por último estará em vigor.

Como resultado, com nomes de conjuntos duplicados, somente o último par de nomes / portas carregado será ativado.

Analisando seus dados, talvez my-app-dev.conf e my-app-deploy.conf compartilhem o mesmo nome de pool, já que ele não é mostrado em diff . Como resultado, apenas um desses pools está em vigor.

Eu recomendo verificar seus nomes do pool de php.

    
por 26.06.2014 / 20:30