Вводные:
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"
запрос к http://antiperekup.localhost/api/v1/test_report/?key=1321s5d6asd54 по конфигу уходит в location ~ \.php “обращается” к файлу /var/www/antiperekup/api.phpv1/test_report/?key=1321s5d6asd54 (без / между api.php и урл-е при реврайте в location / его теряем)
Спасибо, но не совсем понимаю, как исправить эту ситуацию
Обсуждают сегодня