Sto provando a creare un file conf di nginx che ha una piccola ripetizione in esso. Sto usando nginx per servire i file statici, e proxy 404 o contenuti PHP per la posizione @varnish nome:Come avere più blocchi di posizione utilizzare lo stesso nome @location
location @varnish {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_pass http://localhost:6081;
proxy_set_header Request-URI $request_uri;
}
Per la situazione "standard" per cui nginx dovrebbe controllare per vedere se ha un file e quindi passare fino al backend, funziona bene il seguente:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
access_log off;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
expires max;
open_file_cache_valid 120m;
try_files $uri @varnish;
}
Tuttavia, per PHP, io non voglio nemmeno la pena di provare il file, si deve solo reindirizzare immediatamente la richiesta al @varnish:
location ~ \.php$ {
rewrite . @varnish last;
}
Tuttavia, questo non sembra funzionare. Sembra un dolore avere due blocchi separati identici (uno per @backend e uno per php) che fanno riferimento allo stesso proxy, ed è il tipo di problema in cui gli umani possono dimenticare di mettere qualcosa in uno e non nell'altro.
Ha funzionato come un incantesimo! – shrikeh