2

如果应用程序正在为它们提供服务,我正在尝试从应用程序中获取 nginx 反向代理静态文件,否​​则自己提供它们。目前,我有这个配置:

upstream app_server {
    server unix:/tmp/gunicorn.sock fail_timeout=0;
}

server {
    listen          8080;
    server_name     example.com;
    access_log      /var/log/nginx.access.log;
    error_log       /var/log/nginx.error.log;

    keepalive_timeout 5;

    location /static {
        try_files   $uri @proxy_to_app;
        alias       /path/to/__static;
        sendfile    off;
    }

    location / {
        try_files   $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass   http://app_server;
    }
}

如果文件不存在,则此方法有效/path/to/__static;它将请求发送到应用程序服务器。但是,如果文件也存在于 中/path/to/__static,则 nginx 会自行提供文件。

在这两种情况下,反转try_files线 ( try_files @proxy_to_app $uri) 都会失败。如果客户端请求/static/css/test.css,应用程序会收到对 的请求,即使应用程序返回 404 /css/test.css,它似乎也不会尝试。/path/to/__static

更新为包括完整配置。

4

1 回答 1

6
location /static/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass   http://app_server;
    proxy_intercept_errors on;
    error_page 404 =200 /local$uri;
}

location /local/static/ {
    internal;
    alias /path/to/__static/;
}
于 2013-02-21T17:44:35.353 回答