我有一个包含静态内容的 Web 应用,可以提供动态页面和安全内容。静态内容位于/public
文件夹中,应由 直接提供nginx
。动态内容由上游提供127.0.0.1:3000
。安全内容也由上游提供,可从/assets/*
URL 获得。此安全内容可能具有与静态内容相同的文件扩展名,但它始终位于 中/assets/
。
我有一个工作nginx
配置,其中两个位置具有相同的代理规则。有没有办法以某种方式减少我的配置,以连接上游服务的两个位置?
server {
server_name example.name;
root /home/user/ruby18/app/public;
try_files $uri @thin;
location ^~ /assets/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://thin;
}
location ~* \.(jpeg|jpg|gif|png|ico|css|bmp|js)$ {
root /home/user/ruby18/app/public;
}
location @thin {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://thin;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream thin {
server 127.0.0.1:3000;
}
答案1
include
指令就是您正在寻找的。
/etc/nginx/proxy.conf
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://thin;
/etc/nginx/nginx.conf
server {
server_name example.name;
root /home/user/ruby18/app/public;
try_files $uri @thin;
location ^~ /assets/ {
include proxy.conf;
}
location @thin {
include proxy.conf;
}
...