他にも同様の質問がたくさんあることは承知していますが、それらの質問からの解決策はすでに整っていると思います。
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-fpmとnginxの両方を正常に再起動しました:
server:$ Sudo service nginx restart
* Restarting nginx nginx
...done.
server:$ Sudo service php5-fpm restart
* Restarting PHP5 FastCGI Process Manager php5-fpm
...done.
しかし、どのポートがリッスンされているかを見ると、9002と90しかわかりません。
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 / { }
}
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
。
PHP FPMプール名
あなたの差分から、あなたは重複しているように見えますPHP /etc/php-fpm.d
。最後にロードする構成ファイルのみが有効になると確信しています。
その結果、プール名が重複している場合、最後にロードされた名前/ポートのペアのみが起動します。
あなたのデータを見て、おそらくmy-app-dev.conf
およびmy-app-deploy.conf
diff
に表示されていないため、同じプール名を共有します。その結果、これらのプールの1つだけが有効になります。
PHPプール名を再確認することをお勧めします。