Nginx
nginx:直接從位置發送到另一個命名位置
在我的 nginx
1.12.2
配置文件中,我有:upstream app { server unix:/tmp/app.sock fail_timeout=0; } server { listen 443 deferred; root /some/dir; try_files $uri @app; # If the request is for the naked domain, just serve the index bundle # without going through Rails # location = / { try_files /index.html =404; } # If the request if for the /api prefix, go directly to Rails. # This location block is not strictly required, but it could be a handy # customization hook for extra headers and settings. # location /api/ { # Extra conf! try_files @app; } # The location directory allows very creative configurations. # http://nginx.org/en/docs/http/ngx_http_core_module.html#location # # This is just a named location to be used in try_files. location @app { proxy_pass_request_headers on; proxy_set_header ... proxy_pass http://app; } }
在那裡,這並不正確,因為它只有一個參數:
location /api/ { # Extra conf! try_files @app; }
…但它很好地傳達了我想要實現的目標。我想我可以
try_files
通過在最後一個參數之前添加一個非 esitent 文件來開始工作。是
try_files
唯一的方法,還是有另一個更慣用的指令?
你的方案行不通。當
nginx
確定最後一個location
塊來處理請求時,它將使用範圍內的“設置和標頭”,這可能是從周圍的塊繼承的,但不會包括來自同級塊的任何“額外的標頭和設置” -與找到最終location
塊的過程無關。有關更多資訊,請參閱此文件。如果您有適用於多個位置的通用語句,則可以將它們解除安裝到單獨的文件中,並在必要時包含它們。例如:
location / { try_files $uri @app; } location /api/ { # Extra conf! include my/proxy/conf; } location @app { include my/proxy/conf; }
有關更多資訊,請參閱此文件。