Open mqudsi opened 5 months ago
If you set X_REQUEST_URI in nginx (proxy), unit should forward that to PHP as-is, meaning you could easily make the first line in your index.php-file:
<?php
$_SERVER['REQUEST_URI'] = $_SERVER['X_REQUEST_URI'];
// Start app here
Or just adjust the app to use X_REQUEST_URI instead
Edit: Alternatively, you could restore the original path with routes and NJS, see https://unit.nginx.org/scripting/, e.g.:
{
"routes": {
"parse": [
{
"action": {
"rewrite": "`${ headers['X-Request-Path'] }`",
"pass": "routes/my-route"
}
}
]
}}
Alternatively, to just adjust the URL and then move on to the next rule
{
"routes": {
"parse": [
{
"action": {
"rewrite": "`${ headers['X-Request-Path'] }`",
"pass": "routes"
}
}
]
}}
I've used nginx-unit for standalone php servers in the past with great success so I decided to try and move a rather large production configuration of nginx + php-fpm to nginx + nginx-unit (php) but ran into what seems to be a limitation in the design. It seems that while nginx-unit supports sitting behind nginx, it doesn't really cater for cases where nginx is performing redirects for the app because it expects that php's
$_SERVER['REQUEST_URI']
will come from$request_uri
.In this case, because I am porting a php-fpm installation to nginx-unit, nginx has already rewritten "virtual urls" to the actual document url. I thought I could use
proxy_set_header X-Request-Uri $request_uri;
in nginx to make a variable$header_x_request_uri
available to nginx-unit and then configure nginx-unit to tell php to use$header_x_request_uri
asREQUEST_URI
but this does not seem possible (the only options arescript
andindex
?).In an nginx + php-fpm installation, the nginx
fastcgi_param
directive can be used to set the following variables:but there doesn't seem to be any way to do the same in nginx-unit?