I am a beginner with nginx and php, so please excuse my basic question.
For a RESTful based API (nginx + php) I would need some help with nginx configuration.
Here is the relevant snippet of the nginx configuration (as suggested here) for redirecting all /api/v1/* requests to my apiv1.php script:
server {
server_name myServer;
root /usr/share/nginx/html;
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Now the issue is that when I type http://myServer//api/v1/resource/GetInfo in my browser, the apiv1.php script doesn't seem to receive the "resource/GetInfo". Actually, _GET and _REQUEST are empty, but _SERVER looks OK!
In my /etc/php5/fpm/php.ini, the following relevant config is enabled:
request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.
Do you maybe know why the php _GET and _REQUEST are empty? Is this related to my php configuration only?
Best regards, M.
One advantage of using NGINX as an API gateway is that it can perform that role while simultaneously acting as a reverse proxy, load balancer, and web server for existing HTTP traffic.
The way nginx and its modules work is determined in the configuration file. By default, the configuration file is named nginx. conf and placed in the directory /usr/local/nginx/conf , /etc/nginx , or /usr/local/etc/nginx .
It is possible to use nginx as a very efficient HTTP load balancer to distribute traffic to several application servers and to improve performance, scalability and reliability of web applications with nginx.
If someone else hit this page, there is solution I got for myself after a bit research:
location ~ ^/api/v0/(.*)/?$ {
try_files $uri $uri/ /v0.php?req=$1&$args;
}
Here I'm not limited with class/method structure and location seems more readable than rewrite.
Replace this:
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
With the following inside your server block:
rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;
Create a php file called apiv1.php and place in the root directory of your web server with the following lines of code:
<?php
$class = filter_input(INPUT_GET, 'class', FILTER_SANITIZE_STRING);
$method = filter_input(INPUT_GET, 'method', FILTER_SANITIZE_STRING);
echo $class;
echo '<br />';
echo $method;
Test by visiting the following link in your browser:
http://myServer/api/v1/members/getInfo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With