web-dev-qa-db-ja.com

Nginx 502 Bad Gateway-111:接続が拒否され、ポートがリッスンされていません

他にも同様の質問がたくさんあることは承知していますが、それらの質問からの解決策はすでに整っていると思います。

VirtualBox Ubuntu 12.04.4 LTSサーバーでローカルに3つのサイトを実行しています。nginxとphp-fpmを使用しています。

これらは、ポート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;

php-fpmnginxの両方を正常に再起動しました:

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

しかし、どのポートがリッスンされているかを見ると、900290しかわかりません。

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)

そして、私は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"

本当に基本的なものを見逃したことを願っていますが、9002にサイトを追加したとき、両方に新しいポート番号を追加する以外に何もしなければならなかったことを覚えていませんconfファイル

[〜#〜] update [〜#〜]サイトルートは実際にサービスを提供しています。これはapi/test.php502を返すページ

[〜#〜] update [〜#〜]ポートを移動し、webとdevを入れ替えたので、devは9001ポートになりましたが、違いはありません。これを反映するように質問を更新しました。

3つのポートすべてがコンテンツを提供しています-これは、APIセクション用に設定したリダイレクトに関係していると思います。

Devとdeploy PHPとnginxconfigsの違いは次のとおりです。

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

そして、これは私に502を与えているポート9001の開発サイトの完全なconfファイルです

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 / { }
}
2
Pete

Lsofの出力は、php-fpmがポート9001をリッスンしていないことをかなり決定的に示しています(ただし、生成が高速な、より簡潔なリストにはSudo netstat -plntを使用することをお勧めします)。

おそらく、問題はphp-fpmにあります。当面はnginxを忘れて、デバッグにはtelnet localhost 9001を使用することをお勧めします。接続に失敗するでしょう。接続が可能になったら、nginxの使用に戻ります。

ポート9001にあるはずのサイトの構成に問題があるか、何らかの理由でphp-fpmがそのポートにバインドできなかったと思います。

いずれにせよ、私が最初に探すのは、起動時のphp-fpmからのログエントリです。これらのログを有効にする必要がある場合があります。そのためのこの質問を参照してください: nginx virtualhostsで構成されたログファイルにログを記録するようにphp-fpmを構成する方法

これらの設定ファイルの差分は、十分に単純明快に見えます。おそらく、それらの行の制御文字を確認してください(たとえば、Windowsスタイルの行の終わりは、いくつかの作業慣行で侵入する可能性があります)。また、ファイルのアクセス許可とファイルの内容の違いを確認することを忘れないでください。

問題がポートへのバインドに関連している場合は、別のポートを使用すると動作が変わる可能性があります。たとえそれを除外するためであっても、一撃の価値があります。また、strace出力を調べて、fpmがポート9001をバインドしようとした場合に何が起こるかを確認することもできます。例:strace -p [pid] | grep -n 10 9001

4
mc0e

PHP FPMプール名

あなたの差分から、あなたは重複しているように見えますPHP /etc/php-fpm.d。最後にロードする構成ファイルのみが有効になると確信しています。

その結果、プール名が重複している場合、最後にロードされた名前/ポートのペアのみが起動します。

あなたのデータを見て、おそらくmy-app-dev.confおよびmy-app-deploy.confdiffに表示されていないため、同じプール名を共有します。その結果、これらのプールの1つだけが有効になります。

PHPプール名を再確認することをお勧めします。

2
jeffatrackaid