我试图做一件非常简单的事情: Nginx发现* .php =>重定向到Apache Nginx发现* .jpg =>尝试静态,如果不存在=>重定向到Apache
但我找不到一个没有重复代码的解决方案:
location ~* \.(css|js|png|jpeg|gif)$ {
access_log off;
expires 30d;
try_files $uri @proxy;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
location @proxy {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
我想在位置说/使用@proxy位置,但无法找到如何执行此操作。有什么想法吗?
感谢。
Korko
答案 0 :(得分:1)
我采用的一个解决方案是重复代码更少的解决方案是将所有代理设置放在服务器块内(或在辅助文件中,如本示例http://wiki.nginx.org/FullExample中所示)并仅保留proxy_pass
个位置。
要在一个地方使用IP,您可以使用上游(它是默认模块):
http://wiki.nginx.org/HttpUpstreamModule
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
upstream _backend {
server 127.0.0.1:8080;
}
location ~* \.(css|js|png|jpeg|gif)$ {
access_log off;
expires 30d;
try_files $uri @proxy;
}
location / {
proxy_pass http://backend;
}
location @proxy {
proxy_pass http://backend;
}