应用服务器(Tomcat)与代理服务器(Nginx)在不同的服务器上,且应用服务器不可直接访问外网,只有通过Nginx将访问外网的HTTP请求正向代理
出去
比如使用apache.http.client
/** 正向代理地址 */
private static HttpHost forwardProxy = new HttpHost(host, forwardPort, forwardSchema);
HttpClientBuilder builder = HttpClients.custom().setDefaultRequestConfig(globalConfig).setKeepAliveStrategy(keepAliveStrat);
if (isForward) {
builder.setProxy(forwardProxy);
}
this.httpClient = builder.build();
server {
listen 8092;
location / {
# 配置 DNS 解析 IP 地址,以及超时时间,
resolver 219.149.6.99 114.114.114.114;
resolver_timeout 30s;
proxy_pass $scheme://$host$request_uri;
# proxy_set_header 部分的配置,是为了解决如果 URL 中带 "."(点)后 Nginx 503 错误
proxy_set_header Host $http_host;
# 配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间
proxy_buffers 4 256k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
# 配置代理服务器 Http 状态缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
access_log logs/proxy-$host-aceess.log main;
error_log logs/proxy-$host-error.log;
}
上述方式对HTTPS
请求貌似不起作用,不用回复Nginx就是不支持正向代理HTTPS,我只想评估这种场景的解决方案
。
你的代理这里$scheme://$host$request_uri; 为啥要用变量,这个变量不是nginx所在服务器的吗,这里感觉很奇怪