Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nginx - PHP scripts not being called from reverse proxy

I give below an execerpt of of /etc/nginx/sites-available/default file

server {
        listen 443 ssl;
        server_name example.com;

        root /var/www/html;
        index index.php index.html;

location  / {
             try_files $uri $uri/ = 404;
}

location /rproxy/ {
                  proxy_pass https://example.org:8144/;
}     

location ~ \.php$ {
 try_files $uri = 404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 ....
} 

The example.org:8144 server

has the files and

  • index.php - returns hello World
  • bonjour.php - returns bonjour

Now here is the issue:

If I browse to https://example.com/rproxy it promptly returns hello world - the expected result.

However, if I browse to https://example.com/rproxy/bonjour.php (or even https://example.com/rproxy/index.php) I get a 404 error.

I understand what is happening here. My Nginx configuration is causing the example.com instance of Nginx to attempt to find all *.php files locally (i.e. on example.com) which fails when the file I am seeking is in fact on example.org:8144.

I imagine that there is a relatively simple way to tell Nginx when NOT to attempt to attempt to execute a PHP file - when it is in fact on rproxy. However, my knowledge of Nginx confugration is too limited for me to be able to figure out just how I alter the configuration. I'd be most obliged to anyone who might be tell me how to change the configuration to prevent this from happening.


I should clarify something here:

I need to be able to run PHP scripts on Both SERVERS example.com and example.org.

There is a very easy workaround here - I use a different extension, say php5, for php scripts on the proxied server, example.org. However, that is easily liable to lead to unforseen problems.

like image 660
DroidOS Avatar asked Dec 07 '25 02:12

DroidOS


1 Answers

For nginx regexp locations have bigger priority than prefix locations. But

If the longest matching prefix location has the “^~” modifier then regular expressions are not checked.

So try to replace

location /rproxy/ {

with

location ^~ /rproxy/ {
like image 151
SeriousDron Avatar answered Dec 08 '25 15:12

SeriousDron