Reputation: 23
Like in this thread i run into the same problem with trailing slashes.
Directory /var/www/services contains several backend services.
For example, i'm requesting GET /customer?arg1=1&arg2=2
nginx will always redirects me to /customer/?arg1=1&arg2=2
.
Nginx log output:
172.18.0.6 - - [29/May/2019:14:47:32 +0000] "GET /customer?limit=1&filter%5Bemail%5D=somemail%40gmail.com&filter%5BwebsiteId%5D=1 HTTP/1.1" 301 170 "-" "GuzzleHttp/6.3.3 curl/7.29.0 PHP/7.0.33"
172.18.0.6 - - [29/May/2019:14:47:32 +0000] "GET /customer/?limit=1&filter%5Bemail%5D=somemail%40gmail.com&filter%5BwebsiteId%5D=1 HTTP/1.1" 200 12 "-" "GuzzleHttp/6.3.3 curl/7.29.0 PHP/7.0.33"
All other requests, like customer/count
works as expected.
How can i avoid such undesired behaviour?
Configuration is below:
server {
listen 80;
listen 443 ssl;
server_name api.local;
root /var/www/services;
ssl_certificate /etc/ssl/certs/optimax.crt;
ssl_certificate_key /etc/ssl/certs/optimax.key;
ssl_dhparam /etc/ssl/certs/optimax.pem;
location ~ ^/(?<ms_dir>[^/]+)/(.*)$ {
root /var/www/services/$ms_dir/public;
set $ms_request $2;
try_files $uri /index.php$is_args$args;
}
location ~ /index\.php(/|$) {
fastcgi_pass php72:9001;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param REQUEST_URI $ms_request;
fastcgi_param SCRIPT_FILENAME $realpath_root/$ms_dir/public$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root/$ms_dir/public;
}
access_log /dev/stdout;
error_log /dev/stderr;
rewrite_log on;
}
Upvotes: 1
Views: 867
Reputation: 23
The Richard Smith's suggestion works perfect.
Updated config below:
server {
listen 80;
listen 443 ssl;
server_name api.local;
root /var/www/services;
ssl_certificate /etc/ssl/certs/optimax.crt;
ssl_certificate_key /etc/ssl/certs/optimax.key;
ssl_dhparam /etc/ssl/certs/optimax.pem;
location ~ /index\.php(/|$) {
fastcgi_pass php72:9001;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param REQUEST_URI $ms_request;
fastcgi_param SCRIPT_FILENAME $realpath_root/$ms_dir/public$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root/$ms_dir/public;
}
location ~ ^/(?<ms_dir>[^/]+)(?:/(.*))$ {
root /var/www/services/$ms_dir/public;
set $ms_request $2;
try_files $uri /index.php$is_args$args;
}
access_log /dev/stdout;
error_log /dev/stderr;
rewrite_log on;
}
Upvotes: 1