Как я могу отключить повторные попытки с помощью fastcgi?
Я установил:
fastcgi_next_upstream off;
fastcgi_next_upstream_tries 1;
в конфигурации nginx.
Вот несколько логов nginx:
php_1 | 172.20.0.2 - 28/May/2018:10:07:56 +0000 "GET /index.php" 200
web_1 | 172.20.0.1 - - [28/May/2018:10:07:58 +0000] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.4"
php_1 | [28-May-2018 10:07:58.106908] DEBUG: pid 1, fpm_pctl_perform_idle_server_maintenance(), line 379: [pool www] currently 5 active children, 0 spare children, 5 running children. Spawning rate 1
php_1 | 172.20.0.2 - 28/May/2018:10:07:57 +0000 "GET /index.php" 200
web_1 | 172.20.0.1 - - [28/May/2018:10:07:59 +0000] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.4"
php_1 | [28-May-2018 10:07:59.108072] DEBUG: pid 1, fpm_pctl_perform_idle_server_maintenance(), line 379: [pool www] currently 5 active children, 0 spare children, 5 running children. Spawning rate 1
php_1 | 172.20.0.2 - 28/May/2018:10:07:57 +0000 "GET /index.php" 200
php_1 | 172.20.0.2 - 28/May/2018:10:07:57 +0000 "GET /index.php" 200
php_1 | 172.20.0.2 - 28/May/2018:10:07:57 +0000 "GET /index.php" 200
web_1 | 172.20.0.1 - - [28/May/2018:10:07:59 +0000] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.4"
web_1 | 172.20.0.1 - - [28/May/2018:10:07:59 +0000] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.4"
web_1 | 172.20.0.1 - - [28/May/2018:10:07:59 +0000] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.4"
php_1 | 172.20.0.2 - 28/May/2018:10:07:58 +0000 "GET /index.php" 200
web_1 | 172.20.0.1 - - [28/May/2018:10:08:00 +0000] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (pc-x86_64-linux-gnu) Siege/4.0.4"
php_1 | [28-May-2018 10:08:00.109179] DEBUG: pid 1, fpm_pctl_perform_idle_server_maintenance(), line 379: [pool www] currently 5 active children, 0 spare children, 5 running children. Spawning rate 1
Вот некоторые результаты инструмента нагрузочного тестирования siege http:
Transactions: 114 hits
Availability: 88.37 %
Elapsed time: 79.02 secs
Data transferred: 0.00 MB
Response time: 51.59 secs
Transaction rate: 1.44 trans/sec
Throughput: 0.00 MB/sec
Concurrency: 74.43
Successful transactions: 114
Failed transactions: 15
Longest transaction: 61.11
Shortest transaction: 28.07
Бэкэнд - это сервис php-fpm с max_children
значение 5 - значит, он должен обрабатывать не более 5 запросов одновременно. Однако nginx, похоже, «повторяет» запрос, если он терпит неудачу (потому что он достигает значения параллелизма выше 5 - как это показано в результатах осады).
Полный проект докера с указанным выше поведением можно найти здесь: https://github.com/chrissound/phpfpmmaxchildrentest/
Я должен был установить listen.backlog
до 0 внутри php-fpm
как будто у него есть очередь запросов. Хотя это, похоже, не работает полностью (хотя имеет некоторый эффект): Как я могу заставить fastcgi / php-fpm отказываться от соединений, когда он достигнет своей емкости?