我知道还有很多其他类似的问题,但是我觉得我已经有了这些问题的解决scheme。
我有3个站点在VirtualBox Ubuntu 12.04.4 LTS服务器上本地运行,我使用nginx和php-fpm。
它们被configuration为在端口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和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)
我从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文件
更新站点根目录实际上是服务,它只是返回502的api / test.php页面
更新我移动的端口周围,我交换了networking和开发,所以开发现在在9001端口,但这没有什么区别。 我已经更新了这个问题。
所有3个端口都提供内容 – 我认为这是我为API部分设置的redirect。
这是开发和部署PHP和nginxconfiguration之间的差异:
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
这里是完整的开发站点的configuration文件,在端口9001,这是给我的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\/[az]+\/? { if (!-e $request_filename) { rewrite ^/api/picture/([az]+)/? /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上进行监听(尽pipe你可能想使用sudo netstat -plnt来获得一个更简洁的列表,而且生成速度更快)。
可以推测,这个问题是用php-fpm。 我build议你暂时忘记nginx,并使用telnet localhost 9001进行debugging。 我希望你会看到连接失败。 一旦获得连接,请返回使用nginx。
我猜测,要么你有一个configuration问题,该网站应该是在端口9001,或PHP-FPM是由于某种原因无法绑定到该端口。
无论哪种方式,我要找的第一件事就是在启动时从php-fpm的日志条目。 您可能需要启用这些日志。 看到这个问题: 如何configurationphp-fpm将日志logging到在nginx虚拟主机中configuration的日志文件
那些configuration文件比较看起来很简单。 也许检查这些行上的控制字符(例如Windows风格的行结束符可能会有一些工作实践)。 此外,请记住检查文件权限以及文件内容的差异。
如果问题涉及绑定到端口,那么使用不同的端口可能会改变行为。 值得一试,即使只是为了排除这一点。 你也可以通过strace输出来查看当fpm尝试绑定端口9001时会发生什么。例如: strace -p [pid] | grep -n 10 9001 strace -p [pid] | grep -n 10 9001 。
PHP FPM池名称
从你的差异看来,你已经在/etc/php-fpm.d复制了PHP池名称。 我很确定只有最后加载的configuration文件才会生效。
因此,如果池名称重复,则只有最后加载的名称/端口对会旋转起来。
看看你的数据,也许my-app-dev.conf和my-app-deploy.conf共享相同的池名称,因为它没有显示在diff 。 因此,这些池中只有一个是有效的。
我build议双检查你的PHP池名称。