Здравствуйте! Пытаюсь воспользоваться возможностями cURL для передачи данных из одного файла в другой с использованием сервера nginx. Сам сервер локальный, поэтому вся передача через localhost. Однако при работе постоянно выбивает на 504 ошибке с превышением времени обработки. Пробовал разные перенастройки nginx, но ни к ему не привело хорошему. Возможно кто-то сталкивался. Пример кода брался из интернета просто для проверки работы, но даже он не запустился index.php Код (Text): <?php $connection = curl_init(); curl_setopt($connection, CURLOPT_URL, "http://localhost/json.php?id=1"); curl_exec($connection); curl_close($connection); ?> json.php Код (Text): <?PHP if (isset($_GET['id'])){ $id = (int)$_GET['id']; switch($id){ case 1: echo "<Н1>Заголовок 1</Н1>"; break; case 2: echo "<Н2>Заголовок 2</Н2>"; break; case 3: echo "<Н3>Заголовок 3</Н3>"; break; } } ?> nginx.conf Код (Text): #user nobody; worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log logs/access.log; sendfile on; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; location / { root data/www/; index index.html index.php; } location ~ \.(gif|jpg|png) { root data; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9123; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME data/www/$fastcgi_script_name; include fastcgi_params; } } }
Может возникают трудности когда один поток только можно обработать, а ты инициируешь два, например в PHP, вроде NGINX сможет несколько обработать, а вот что там на счёт PHP?
время ответа лимитировано только одной настройкой - http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout
В том числе и данное пробовал, но нет --- Добавлено --- Да про возможность ответа в потоках тоже где-то встречалось на других ресурсах, но без конкретики :-(
Ну вот по конфигу nginx видно что у тебя один воркер, он по идее может обрабатывать несколько потоков. А вот на счёт PHP, думаю у тебя там PHP-FPM надо посмотреть сколько он может потоков обработать.
должно. ищи проблему. ты перезагружал nginx? 504 ошибка генерируется именно им? может кем-то ещё? апачем каким-нить? Пхп её не рожает сам, её делает веб-сервер. И вроде как других настроек, которые влияют на время ожидание от пхп у нгинкса нет. Т.е. надо удостовериться, что она не только в конфиге прописалась, но в нужной секции, и не была перебита такой же настройкой позже, и попала в нгинкс.
@valentinnew вебсервер отваливается раньше, чем закончится работа пхп, значит всё там хорошо с макс экзекушн. в идеале число воркеров должно быть равно числу процессоров в системе.
перечитал тему, не нашел где топикстартер об этом говорил. почему пыха не может ограничить время выполнения и выплюнуть 504? число воркеров - это уже оптимизция. один воркер не может работать в несколько потоков и чисто теоретически запрос может заблокировать поток, хотя в энжинксе все сделано, чтоб не блокировать поток.
Извиняюсь, что пропал из темы. Огромное спасибо за отлик и Ваши сообщения. Пробовал и воркер на 2 выставлять, и max execution увеличивать. По логу: Код (Text): *4 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /json.php?id=1 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9123", host: "localhost" *2 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9123", host: "localhost" *2 CreateFile() "C:\nginx/data/www/favicon.ico" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php" *7 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /json.php?id=1 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9123", host: "localhost"
Что я забыл уточнить, так это то что все это поднять пытаюсь на Windows. Моя крайняя попытка выглядит по файлам настроек следующим образом: nginx.conf Код (Text): #user nobody; worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log logs/access.log; sendfile on; keepalive_timeout 65; gzip on; upstream backend { server 127.0.0.1:9123; server 127.0.0.1:9124; server 127.0.0.1:9125; server 127.0.0.1:9126; server 127.0.0.1:9127; } server { listen 80; server_name localhost; location / { root c:/nginx/data/www/; index index.html index.php; } location ~ \.(gif|jpg|png) { root data; } location ~ \.php$ { include fastcgi_params; } } } fastcgi_params Код (Text): fastcgi_connect_timeout 1; fastcgi_next_upstream timeout; fastcgi_pass backend; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SCRIPT_FILENAME data/www/$fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_index index.php; Файл запуска Код (Text): @ECHO OFF ECHO Starting nginx... cd C:\nginx start nginx echo start php set SRVPATH=C:\nginx %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9123 -c %SRVPATH%/php/php.ini %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9124 -c %SRVPATH%/php/php.ini %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9125 -c %SRVPATH%/php/php.ini %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9126 -c %SRVPATH%/php/php.ini %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9127 -c %SRVPATH%/php/php.ini В php.ini curl подключил (в extension) phpinfo(), вывод на экран (echo) и даже подключение к БД, все работает Пример же, ради которого все это - нет :-(