使用 Nginx 进行离线反向代理

使用 Nginx 进行离线反向代理

我正在使用 Nginx 反向代理访问在线 drupal 服务器上的内容。事实是,如果 Nginx 失去互联网连接,当我尝试通过反向代理调用服务器时,我希望它会向我发送一个错误代码,说明它无法连接远程服务器并且超时了,但我唯一得到的是 302 代码,因此无法使用 proxy_intercept_errors on; 捕获。

我想要的是:如果 Ngnix 由于任何原因(404、50x、根本没有互联网)无法访问服务器,我希望他向我发送一个明确、具体的错误页面(如果错误代码为 400 或更高,则会正确返回此页面,但如果 Nginx 无法访问互联网,则不会返回此页面)。

我使用的conf是:

# Reverse proxy for remote hosts
# regex capture, $1 is hostname $2 is the rest of the URI
location ~* /reverseproxy/([^/]*)(.*) {


    $$$RESOLVER_DNS_ADRESSES_TOKEN$$$
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header        Host    $1;

    proxy_cache_bypass 1;
    proxy_no_cache 1;
    proxy_intercept_errors on;

    # Tranform custom X-Cookie into regular Cookie header
    set $cookieValue "";
    if ($http_x_cookie) {
        set $cookieValue $http_x_cookie;
    }
    proxy_set_header Cookie $cookieValue;

    # CORS headers
    proxy_hide_header Access-Control-Allow-Origin;
    proxy_hide_header Access-Control-Allow-Methods;
    proxy_hide_header Access-Control-Allow-Headers;
    proxy_hide_header Access-Control-Allow-Credentials;

    add_header  Access-Control-Allow-Credentials true;
    add_header  Access-Control-Allow-Origin http://localhost:8080;
    add_header  Access-Control-Allow-Methods 'OPTIONS, GET, POST';
    add_header Access-Control-Allow-Headers 'Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control, Cookie';

    send_timeout 10s;
    proxy_connect_timeout 5s;

    proxy_pass http://$1$2$is_args$query_string;
}

网络中断时给出的答案示例:

127.0.0.1 - - [01/Feb/2013:14:54:02 +0100] "GET /reverseproxy/xx.xxx.xx.xx/info.php >HTTP/1.1" 302 160 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML,如 >Gecko) Chrome/24.0.1312.57 Safari/537.17"

提前致谢,

答案1

看起来你正在尝试创建一个正常的向前代理,而不是反向代理。不幸的是,正如您已经发现的那样,nginx 不适合用作正向代理。相反,请使用为此目的设计的软件,例如 squid 或 wwwoffle。

相关内容