Назад | Перейти на главную страницу

Nginx как отключить повторные попытки fastcgi

Как я могу отключить повторные попытки с помощью 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 отказываться от соединений, когда он достигнет своей емкости?