背景
通过指定服务器访问不能直接访问的资源
实现
默认情况下Nginx的正向代理默认访问的服务都是常规的80端口,网上大部分的例子如下:
server {
resolver 8.8.8.8; #指定DNS服务器
listen 8000;
location / {
proxy_pass $scheme://$host$request_uri; #设定代理服务器的协议和地址
}
}
如果需要代理的服务地址包含非80端口,有人用lua实现 ,但实际没必要,例子如下
server {
resolver 8.8.8.8; #指定DNS服务器
listen 8000;
location / {
proxy_pass $scheme://$http_host$request_uri; #设定代理服务器的协议和地址
}
}
关键在于nginx对于$http_*可以读取到 header参数,而http header中的host是包含端口的
说明
原生nginx不支持https代理,如果访问https网站,会报错,如果需要代理https,可以参考 ngx_http_proxy_connect_module