Size: a a a

2021 April 20

SS

Sasha Sorochynskyi in nginx_ru
благодарю
источник

КМ

Константин Михеев... in nginx_ru
Подниму свое сообщение :) Никто не поможет?
источник

КМ

Константин Михеев... in nginx_ru
Переслано от Константин Михеев...
Всем привет. Помогите, пожалуйста, разобраться с настройкой nginx в докере. Вводные:
PHP приложение https://github.com/marcj/php-rest-service

в документации написано, что нужно использовать такой конфиг для корректной работы:


// edit virtualhost /etc/nginx/conf.d/name_virtualhost_file
server {
.. something params ...
location / {
 include fastcgi_params;
   
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
}

// and add line to /etc/nginx/fastcgi_params
fastcgi_param PATH_INFO $fastcgi_script_name;



Докер настраиваю по https://habr.com/ru/post/519500/

Здесь же указан такой конфиг


server {
   listen 80;
   index index.php index.html;
   server_name project-1.localhost;
   error_log /var/log/nginx/project-1.error.log;
   access_log /var/log/nginx/project-1.access.log combined if=$loggable;
   root /var/www/project-1.ru;

   location / {
       try_files $uri $uri/ /index.php?$query_string;
   }

   location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass php-7.3:9000;
       fastcgi_index index.php;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_script_name;
   }
}


Нужно объединить конфиги, чтобы php приложение заработало корректно.

Итоговый конфиг сейчас такой:


server {
   listen 80;
   index index.php index.html;
   server_name antiperekup.localhost;
   error_log /var/log/nginx/antiperekup.error.log;
   access_log /var/log/nginx/antiperekup.access.log combined if=$loggable;
   root /var/www/antiperekup;

   location /api/ {
       rewrite ^/api/(.*)$ /api.php$1;
   }

   location ~ /api/(.+)\.php {
       fastcgi_pass php-7.3:9000;
       fastcgi_split_path_info ^(.+\.php)(.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       fastcgi_param X_REQUEST_ID $request_id;
       fastcgi_param X_FORWARDED_PROTO $scheme;
       fastcgi_read_timeout 180;
       fastcgi_send_timeout 180;
       include fastcgi_params;
   }

   location ~ \.php {
       fastcgi_pass php-7.3:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       include fastcgi_params;
   }
}


Проблема: GET запрос http://antiperekup.localhost/api/v1/test_report/?key=1321s5d6asd54 выдает File not found. Если прописать явно api.php http://antiperekup.localhost/api.php/v1/test_report/?key=1321s5d6asd54 , то выводится сообщение из api.php , но в код библиотеки не попадает:


Server::create('/v1/', new \Api)
->addGetRoute('test_report', 'testReport')
->run();


В методе testReport просто print_r, который не отрабатывает. Когда обращаюсь к http://antiperekup.localhost/api/v1/test_report/?key=1321s5d6asd54 , то в error.log вижу следующее:
2021/04/20 12:07:03 [error] 30#30: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.22.0.1, server: antiperekup.localhost, request: "GET /api/v1/test_report/?key=1321s5d6asd54 HTTP/1.1", upstream: "fastcgi://172.22.0.2:9000", host: "antiperekup.localhost"
источник

A

Anton in nginx_ru
запрос к http://antiperekup.localhost/api/v1/test_report/?key=1321s5d6asd54
по конфигу уходит в location ~ \.php “обращается” к файлу
/var/www/antiperekup/api.phpv1/test_report/?key=1321s5d6asd54
(без / между api.php и урл-е при реврайте в location / его теряем)
источник

КМ

Константин Михеев... in nginx_ru
Спасибо, но не совсем понимаю, как исправить эту ситуацию
источник

A

Anton in nginx_ru
как минимум поправить rewrite
источник

A

Anton in nginx_ru
ну и файл /var/www/antiperekup/api.php есть в контейнере с php?
источник

КМ

Константин Михеев... in nginx_ru
да, есть
источник

КМ

Константин Михеев... in nginx_ru
этот ? rewrite ^/api/(.*)$ /api.php/$1;
источник

A

Anton in nginx_ru
да
источник

КМ

Константин Михеев... in nginx_ru
Сделал так
location /api/ {
       rewrite ^/api/(.*)$ /api.php?$1;
   }

стало работать http://antiperekup.localhost/api/v1/test_report/?key=1321s5d6asd54 и так http://antiperekup.localhost/api.php/v1/test_report/?key=1321s5d6asd54

но в testReport по-прежнему не попадает (
источник

КМ

Константин Михеев... in nginx_ru
в api.php только
источник

КМ

Константин Михеев... in nginx_ru
в api.php если распечатать $_REQUEST:

Array
(
   [v1/test_report/] =>
   [key] => 1321s5d6asd54
)
источник

A

Anton in nginx_ru
это уже вопрос к коду, замени api.php на <?php echo “test”;?> и удоставерься что запрос туда приходит
источник

КМ

Константин Михеев... in nginx_ru
ага, запрос туда приходит, спасибо. Странно, что эта библиотека отрабатывает некорректно, на продакшн сервере работает нормально при таком же окружении
источник

JM

J M in nginx_ru
коллеги добрый день. подскажите как вы боретесь с гребаным хардкоженым буфером

FastCGI sent in stderr: "the log buffer is full (1024). The access log request has been truncated" while reading upstream
источник

AN

Anton Noginov in nginx_ru
А что слушает fastcgi?
источник

JM

J M in nginx_ru
сокет
источник

AN

Anton Noginov in nginx_ru
Ба-дум-тсс.

Сервер какой? Пэхэпэ? Пятон? Перл?
источник

JM

J M in nginx_ru
nginx + php fpm 7.4
источник