web-dev-qa-db-ja.com

Apache-mod_proxy_fcgi-PHP-FPMサーバーで繰り返し発生するPHP 503エラーを修正するにはどうすればよいですか?

私のphp-fpm設定に問題があります。多分あなた達は私を正しい方向に向けることができます。まず、すべてが正常に機能しています。しかし、時々、503エラーが発生します。 Webサイトをリロードすると、これらのエラーは消えます。それらはphpサイトにのみ表示され、1つのドメインまたは1つのフレームワークに分離されていません。 PHPmyAdmin、WordpressおよびTypo3で503エラーが表示されます。これらは私がテストした3つのサイトです。これらは別々のvhostsにあり、異なるphp-fpmプールがありますが、同じphpを共有しています-fpmマスタープロセス。

私が実行しているサーバーは、Apache 2.4(MPM-Event Workers)で、mod_phpまたはcgi/fastcgiがありません。代わりに、mod_proxyとmod_proxy_fcgiを使用して、すべての.phpファイルをphp-fpmプロセスに渡します。注意すべき点の1つは、サーバーはまだ稼働していないため、トラフィックがほとんどないかまったくないことです。サーバーハードウェアは強力で、12 VCoreと32 GB RAMです。

私のmod_proxyとmod_proxy_fcgiの設定はデフォルトです-何も変更していません。

私のvhost設定(プロキシ部分):

<FilesMatch "\.php$">
        SetHandler "proxy:unix:///opt/php-5.6.11/var/run/php5-fpm-mywebsite.sock|fcgi://mywebsite/"
    </FilesMatch>
    <Proxy fcgi://mywebsite/ enablereuse=on retry=0>
</Proxy>

注:以前にProxyディレクティブでmax = 10を使用したことがあり、503エラーをより頻繁に生成するようです。 max = 10を削除したので、発生が少ないようです。偶然かもしれません。

私のPHP-FPMプール構成(関連する部分):

listen = var/run/php5-fpm-mywebsite.sock
listen.owner = mywebsite
listen.group = www-data
listen.mode = 0660
listen.backlog = 65535

user = mywebsite
group = www-data
listen.allowed_clients = 127.0.0.1

pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 15s

request_terminate_timeout = 300s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = no

My PHP-FPM Config(関連する部分):

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10
events.mechanism = epoll

PHP-FPMマスタープロセス用の私のPHP.ini。ここにリストされていないものはすべて、デフォルトのphp設定であるか、関連性がないはずです。

memory_limit = 400M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 600
max_input_time  = -1
max_input_vars = 10000
suhosin.get.max_vars = 10000
suhosin.post.max_vars = 10000

[Zend]
zend_extension=/opt/php-5.6.11/lib/php/extensions/no-debug-non-zts-20131226/ioncube.so
zend_extension=opcache.so
opcache.revalidate_freq=0
;opcache.validate_timestamps=0
opcache.max_accelerated_files=50000
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1

[APC]
extension=apcu.so
apc.enabled=1
apc.shm_segments = 1
apc.shm_size=256M
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl=3600
apc.stat=1
apc.enable_cli=0
apc.file_update_protection=2
apc.max_file_size=2M
apc.include_once_override=0
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.cache_by_default=1
apc.use_request_time=1
apc.slam_defense=0
apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.lazy_classes=0
apc.lazy_functions=0

extension=memcache.so
extension=memcached.so

注:Memcachedには1 GBのメモリが割り当てられています。

Apacheエラーログ

Apache error.logからの実際のエラーメッセージ。常に同じ場合のエラーメッセージ。 (詳細なプロキシログを有効にしました):

[proxy:debug] [pid 141760:tid 140526898214656] mod_proxy.c(1159): [client myclient] AH01143: Running scheme unix handler (attempt 0), referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:debug] [pid 141760:tid 140526898214656] mod_proxy_fcgi.c(879): [client myclient] AH01076: url: fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php proxyname: (null) proxyport: 0, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:debug] [pid 141760:tid 140526898214656] mod_proxy_fcgi.c(886): [client myclient] AH01078: serving URL fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2147): AH00942: FCGI: has acquired connection for (mywebsite)
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2200): [client myclient] AH00944: connecting fcgi://mywebsite//var/www/html/mywebsite/htdocs/typo3site/website/index.php to mywebsite:8000, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2237): [client myclient] AH02545: fcgi: has determined UDS as /opt/php-5.6.11/var/run/php5-fpm-mywebsite.sock, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2409): [client myclient] AH00947: connected //var/www/html/mywebsite/htdocs/typo3site/website/index.php to httpd-UDS:0, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:error] [pid 141760:tid 140526898214656] [client myclient] AH01067: Failed to read FastCGI header, referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy_fcgi:error] [pid 141760:tid 140526898214656] (104)Connection reset by peer: [client myclient] AH01075: Error dispatching request to : , referer: http://mywebsite/website/typo3/install/index.php?TYPO3_INSTALL[type]=cleanup
[proxy:debug] [pid 141760:tid 140526898214656] proxy_util.c(2162): AH00943: FCGI: has released connection for (mywebsite)

今私の質問:

Webサーバーで繰り返し発生するPHP 503エラーを修正するにはどうすればよいですか?

私の考え:

  • たぶん、UDSモードのmod_proxy_fcgi。しかし、UDSを非アクティブにすることはパフォーマンスの点で悪いのではないでしょうか。そこで何か微調整できますか?
  • mod_proxyまたはmod_proxy_fcgiがphp-fpmで正しく機能しないか、正しく設定されていませんか?
  • APC、ZendOPCache、またはMemcachedが問題を混乱させていますか?サーバーに割り当てられているメモリはほとんどなく、十分な空きメモリがあるため、割り当てられたメモリとは言えません
  • Php.ini設定に問題がありますか?
  • Php-fpm構成またはphp-fpmプール構成に問題がありますか?

私はそれらの輸出品ではないので、物事を理解するのに苦労しています。 php-fpmを使用したApacheも一般的ではないようです。ほとんどのGoogleの結果はnginxベースであり、あまり役に立ちません。

多分ここの誰かが私を助けることができますか?

どうもありがとう!!

4
Riemu

Proxy行のenablereuse = onオプションを削除して、次のようにします。

<Proxy fcgi://mywebsite/ retry=0>

これにより、「、リファラー...へのリクエストのディスパッチエラー」問題が解決しました。

2
vick

私はまったく同じ問題を抱えていて、原因を理解しようとしたところ、私たちの理由はバグのあるプラグインであることがわかりました

特に、これを無効にすることで問題を修正しましたwordpress plugin: https://wordpress.org/plugins/custom-css-js/

私たちはphp 7とwordpress 4.5.6。

ですから、php、Apache、またはキャッシュシステムの設定ミスによるものではありません。どちらの問題も、使用可能なリソース(CPU/RAM)の問題ではありませんでした。問題はバグのあるプラグインによるものでした。

問題の原因となったプラグインを見つけるのは非常に困難でした。 phpデバッグオプションのおかげで理解できたので、以下の行をwp-config.phpに追加してデバッグすることをお勧めします。

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

幸運!

2
Diego D

他の投稿が示唆したように、enablereuse=onは、PHP-FPMデーモンがUnixソケット経由で実行されている場合は使用しないでください。

Mod_proxy_fcgiのApacheドキュメントでは、これを確認することで、

UDSは現在、接続の再利用をサポートしていません

UDSはUnixドメインソケットを意味します。つまり、デフォルトのTCPポートメソッドではなく、PHP-FPMをソケット(.sock)として実行している場合)を意味します。

Nathan Zacharyが、Apache + PHP-FPMをソケットとして構成する方法について詳しく説明します 、その他の関連トピック。

POST enablereuse = onおよびUDSを実行した直後に、クレイジーで予測不可能なApache応答が発生しました。enablereuse= onを削除してサービスを再起動するとすぐに、問題は完全になくなりました。

詳細は mod_h2の人々からの症状とこの問題のデバッグ です。

1
allella

listen = var/run/php5-fpm-mywebsite.sockは正しいですか?

仮想ホストの場合については、次の構成を試すことができます。

  • Apache(VirtualHostタグ内)

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/DOCUMENT_ROOT_OF_VHOST/$1
    
  • PHP-FPMプール

    listen = 127.0.0.1:9000
    

.htaccessについて懸念がない場合は、nginxをお勧めします。

0
Joe Horn