我正在使用 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。