nginx + ssi + remote uri access does not work

2020-06-29 03:12发布

问题:

I have a setup where my nginx is in front with apache+PHP behind.

My PHP application cache some page in memcache which are accessed by nginx directly except some dynamic part which are build using SSI in Nginx.

The first problem I had was nginx didnt try to use memcache for ssi URI.

<!--# include virtual="/myuser" -->

So I figured that if I force it to use a full URL, it would do it.

<!--# include virtual="http://www.example.com/myuser" -->

But in logs file (both nginx and apache) I can see that a slash has been added at the beginning of the url

http ssi filter "/http://www.example.com/myuser"

In the source code of the SSI module I see a PREFIX that seems to be added, but I can really tell if I can disable it.

Anybody got this issue? Nginx version : 0.7.62 on Ubuntu Karmic 64bits

Thanks a lot

回答1:

It has nothing about nginx, you just can't do that. SSI doesn't accept remote uri. you can only specify a local file path.

See http://en.wikipedia.org/wiki/Server_Side_Includes



回答2:

You can configure nginx to include remote URLs despite you cannot refer them directly in SSI instructions. In site config create location with local path and named remote location that points where you want to. For example:

server {
....
  location /remote {
    proxy_pass @long_haul; # or use "try_files" to provide fallback
  }

  location @long_haul {
    proxy_pass http://porno.com;
  }
....
}

and in served html use include directive that refers /remote path:

  <!--# include virtual="/remote/rest-of-url&and=parameters" -->

Note that you may customize URL that is passed further with variables and regexp. For example:

  location ~/remote(.+) {
    proxy_pass @long_haul$1?$args;
  }


标签: nginx ssi