За последние 24 часа нас посетили 59589 программистов и 1741 робот. Сейчас ищут 913 программистов ...

nginx php cURL

Тема в разделе "PHP для новичков", создана пользователем Сергей Смирнов, 11 фев 2017.

  1. Сергей Смирнов

    С нами с:
    11 фев 2017
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте!
    Пытаюсь воспользоваться возможностями cURL для передачи данных из одного файла в другой с использованием сервера nginx.
    Сам сервер локальный, поэтому вся передача через localhost. Однако при работе постоянно выбивает на 504 ошибке с превышением времени обработки. Пробовал разные перенастройки nginx, но ни к ему не привело хорошему. Возможно кто-то сталкивался.
    Пример кода брался из интернета просто для проверки работы, но даже он не запустился

    index.php
    Код (Text):
    1. <?php
    2.     $connection = curl_init();
    3.     curl_setopt($connection, CURLOPT_URL, "http://localhost/json.php?id=1");
    4.     curl_exec($connection);
    5.     curl_close($connection);
    6. ?>
    json.php
    Код (Text):
    1. <?PHP
    2.     if (isset($_GET['id'])){
    3.         $id = (int)$_GET['id'];
    4.         switch($id){
    5.                 case 1:
    6.                     echo "<Н1>Заголовок 1</Н1>";
    7.                     break;
    8.                 case 2:
    9.                     echo "<Н2>Заголовок 2</Н2>";
    10.                     break;
    11.                 case 3:
    12.                     echo "<Н3>Заголовок 3</Н3>";
    13.                     break;                  
    14.         }      
    15.     }
    16. ?>
    nginx.conf
    Код (Text):
    1. #user  nobody;
    2. worker_processes  1;
    3.  
    4. error_log  logs/error.log;
    5.  
    6. events {
    7.     worker_connections  1024;
    8. }
    9.  
    10.  
    11. http {
    12.     include       mime.types;
    13.     default_type  application/octet-stream;
    14.  
    15.     access_log  logs/access.log;
    16.  
    17.     sendfile        on;
    18.  
    19.     keepalive_timeout  65;
    20.  
    21.     #gzip  on;
    22.  
    23.     server {
    24.         listen    80;
    25.     server_name    localhost;
    26.    
    27.     location / {
    28.         root    data/www/;
    29.         index    index.html index.php;
    30.     }
    31.    
    32.     location ~ \.(gif|jpg|png) {
    33.         root    data;
    34.     }
    35.  
    36.     location ~ \.php$ {
    37.             fastcgi_pass   127.0.0.1:9123;
    38.         fastcgi_index  index.php;
    39.             fastcgi_param  SCRIPT_FILENAME  data/www/$fastcgi_script_name;
    40.             include        fastcgi_params;
    41.         }
    42.     }
    43. }
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Может возникают трудности когда один поток только можно обработать, а ты инициируешь два, например в PHP, вроде NGINX сможет несколько обработать, а вот что там на счёт PHP?
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  4. Сергей Смирнов

    С нами с:
    11 фев 2017
    Сообщения:
    5
    Симпатии:
    0
    В том числе и данное пробовал, но нет
    --- Добавлено ---
    Да про возможность ответа в потоках тоже где-то встречалось на других ресурсах, но без конкретики :-(
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чего "но нет"?
     
  6. Сергей Смирнов

    С нами с:
    11 фев 2017
    Сообщения:
    5
    Симпатии:
    0
    Но нет - никакого результата положительного изменение данного параметра не принесло
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну вот по конфигу nginx видно что у тебя один воркер, он по идее может обрабатывать несколько потоков.
    А вот на счёт PHP, думаю у тебя там PHP-FPM надо посмотреть сколько он может потоков обработать.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    должно. ищи проблему. ты перезагружал nginx? 504 ошибка генерируется именно им? может кем-то ещё? апачем каким-нить? Пхп её не рожает сам, её делает веб-сервер. И вроде как других настроек, которые влияют на время ожидание от пхп у нгинкса нет. Т.е. надо удостовериться, что она не только в конфиге прописалась, но в нужной секции, и не была перебита такой же настройкой позже, и попала в нгинкс.
     
  9. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    1) 504 ошибка у курла или у скрипта ?
    2) Что там в логах ?
    3) Это не может быть таймаутом браузера ?
     
  10. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    в php.ini max_execution_time пробовал?

    и поставь 2 воркера worker_processes 2;
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @valentinnew
    вебсервер отваливается раньше, чем закончится работа пхп, значит всё там хорошо с макс экзекушн.

    в идеале число воркеров должно быть равно числу процессоров в системе.
     
  12. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    перечитал тему, не нашел где топикстартер об этом говорил. почему пыха не может ограничить время выполнения и выплюнуть 504?
    число воркеров - это уже оптимизция. один воркер не может работать в несколько потоков и чисто теоретически запрос может заблокировать поток, хотя в энжинксе все сделано, чтоб не блокировать поток.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну это из номера ошибки следует.

    думаю, это звучит слишом запутанно и требует отдельной темы.
     
  14. Сергей Смирнов

    С нами с:
    11 фев 2017
    Сообщения:
    5
    Симпатии:
    0
    Извиняюсь, что пропал из темы. Огромное спасибо за отлик и Ваши сообщения.
    Пробовал и воркер на 2 выставлять, и max execution увеличивать.
    По логу:
    Код (Text):
    1.  
    2. *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"
    3.  
    4. *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"
    5.  
    6.  *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.  
    8. *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"
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Сергей Смирнов PHP сервер там PHP-FPM и он может несколько потоков обрабатывать?
     
  16. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    /etc/php5/fpm/pool.d/www.conf , пожалуйста
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @valentinnew это путь файла, а не содержимое как минимум, сложно без него понять что там внутри
     
  18. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    Я прошу содержимое этого файла
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    замени на 127.0.0.1, авось прокатит

    А у тебя вообще пхп работал хоть когда-то?
     
  20. Сергей Смирнов

    С нами с:
    11 фев 2017
    Сообщения:
    5
    Симпатии:
    0
    Что я забыл уточнить, так это то что все это поднять пытаюсь на Windows.
    Моя крайняя попытка выглядит по файлам настроек следующим образом:
    nginx.conf
    Код (Text):
    1. #user  nobody;
    2. worker_processes  1;
    3. error_log  logs/error.log;
    4. events {
    5.     worker_connections  1024;
    6. }
    7. http {
    8.     include       mime.types;
    9.     default_type  application/octet-stream;
    10.     access_log  logs/access.log;
    11.     sendfile        on;
    12.     keepalive_timeout  65;
    13.     gzip  on;
    14.  
    15.     upstream backend {
    16.     server 127.0.0.1:9123;
    17.     server 127.0.0.1:9124;
    18.     server 127.0.0.1:9125;
    19.     server 127.0.0.1:9126;
    20.     server 127.0.0.1:9127;
    21.     }
    22.     server {
    23.         listen    80;
    24.         server_name    localhost;
    25.  
    26.     location / {
    27.         root    c:/nginx/data/www/;
    28.         index    index.html index.php;
    29.     }
    30.  
    31.     location ~ \.(gif|jpg|png) {
    32.         root    data;
    33.     }
    34.     location ~ \.php$ {
    35.             include        fastcgi_params;
    36.         }
    37.     }
    38. }
    fastcgi_params
    Код (Text):
    1. fastcgi_connect_timeout 1;
    2. fastcgi_next_upstream timeout;
    3. fastcgi_pass backend;
    4.  
    5. fastcgi_param  QUERY_STRING       $query_string;
    6. fastcgi_param  REQUEST_METHOD     $request_method;
    7. fastcgi_param  CONTENT_TYPE       $content_type;
    8. fastcgi_param  CONTENT_LENGTH     $content_length;
    9. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    10. fastcgi_param  REQUEST_URI        $request_uri;
    11. fastcgi_param  DOCUMENT_URI       $document_uri;
    12. fastcgi_param  DOCUMENT_ROOT      $document_root;
    13. fastcgi_param  SCRIPT_FILENAME    data/www/$fastcgi_script_name;
    14. fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    15. fastcgi_param  HTTPS              $https if_not_empty;
    16. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    17. fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    18. fastcgi_param  REMOTE_ADDR        $remote_addr;
    19. fastcgi_param  REMOTE_PORT        $remote_port;
    20. fastcgi_param  SERVER_ADDR        $server_addr;
    21. fastcgi_param  SERVER_PORT        $server_port;
    22. fastcgi_param  SERVER_NAME        $server_name;
    23.  
    24. # PHP only, required if PHP was built with --enable-force-cgi-redirect
    25. fastcgi_param  REDIRECT_STATUS    200;
    26. fastcgi_index  index.php;
    Файл запуска
    Код (Text):
    1. @ECHO OFF
    2. ECHO Starting nginx...
    3. cd C:\nginx
    4. start nginx
    5. echo start php
    6. set SRVPATH=C:\nginx
    7. %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9123 -c %SRVPATH%/php/php.ini
    8. %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9124 -c %SRVPATH%/php/php.ini
    9. %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9125 -c %SRVPATH%/php/php.ini
    10. %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9126 -c %SRVPATH%/php/php.ini
    11. %SRVPATH%\php\php-cgi.exe -b 127.0.0.1:9127 -c %SRVPATH%/php/php.ini
    В php.ini curl подключил (в extension)
    phpinfo(), вывод на экран (echo) и даже подключение к БД, все работает
    Пример же, ради которого все это - нет :-(
     
  21. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    попробуй другой урл курлом запрашивать. так ты узнаешь, какой скрипт блокируется