Tom Crowder
Tom Crowder

Reputation: 160

With nginx, how do I run SSI on a page returned from another server?

I'm trying out nginx. I would like to use it to perform the following:

  1. Retrieve a page from a server1 which includes some SSI commands
  2. Process the SSI commands, eventually including content from server2
  3. Return the resultant page

I've got SSI working when using a local file, but not when using the page from a server1 using proxy_pass.

Here's my config I'm using to try to achieve the above.

events {
    worker_connections  1024;
}
http {
    server {
        listen       80;
        server_name  localhost;

        location /hello-world.html {
            ssi on;
            proxy_pass http://tom.office.bla.co.uk:8080/hello-world/;
        }
    }
}

For testing purposes, I'm using a simple SSI command, as shown in the output my browser actually ends up with, which is identical to the content on server1:

<html>

<!--# set var="test" value="Hello nginx!" -->
<!--# echo var="test" -->

</html>

Do I need to use something other than proxy_pass, or is it just not possible? Thanks!

Upvotes: 4

Views: 4517

Answers (1)

mjones753
mjones753

Reputation: 216

Make sure that server1 is not returning compressed content. if its being returned gzipped, nginx won't uncompress it to apply the ssi rules to it.

you can ensure the reponse is returned in plain text by clearing the Accept-Encoding header:

location /hello-world.html {
    ssi on;
    proxy_set_header Accept-Encoding ""; 
    proxy_pass http://tom.office.bla.co.uk:8080/hello-world/;
}

Upvotes: 18

Related Questions