反向代理
正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。 从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。结论就是,正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
从用途上来讲:
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。
反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
反向代理服务器的基本配置
proxy_pass
proxy_pass URL; 配置块 location if 此配置将当前请求代理到URL参数指定的服务器上,URL可以是主机名或者IP地址加PORT的形式 proxy_pass http://localhost:8000; 也可以结合负载均衡实用<负载均衡会说明这种情况> 也可以吧HTTP转换成HTTPS proxy_pass http://192.168.0.1; 默认情况反向代理不转发请求中的Host头部,如果需呀设置抓发头部 则 proxy_set_header Host $host;
proxy_method
proxy_method method_name; 配置块 http server location 此配置项表示转发时的协议方法名: proxy_method POST; 那么客户端发来的GET请求在转发时方法改为POST;
proxy_hide_header
proxy_hide_header header1; 配置块 http server location; Nginx会将上游服务器的响应转发给客户端,但默认不转发HTTP头部字段(Date Server X-Pad X-Accel-* ) 使用proxy_hide_header可以指定任意头部不能被转发 proxy_hide_header Cache-Control; proxy_hide_header MicrosoftOfficeWebServer;
proxy_pass_header
proxy_pass_header header1; 配置块 http server location 功能与 proxy_hide_header相反,是设置哪些头部允许转发. proxy_pass_header X-Accel-Redirect;
proxy_pass_request_body
proxy_pass_request_body off|on; 默认 on 配置块 http server location; 确定上游服务器是否向上游服务器转发HTTP包体
proxy_pass_request_header
proxy_pass_request_header on | off; 默认on 配置块 http server location 确定是否转发HTTP头部
proxy_redirect
proxy_redirect [default | off |redirect |replacement] 默认default 配置块 http server location 当上游服务响应时重定向或刷新(HTTP 301 302),proxy_redirect可以重设HTTP头部的location或refresh字段 proxy_redirect http://locahost:8000/two/ http://frontend/one/; 上游响应302,location是URI是http://locahost:8000/two/some/uri/ 那是实际转发给客户端的是 http://frontend/one/some/uri/; 可以使用前面提到的ngx_http_core_module模块提供的变量 proxy_redirect http://locahost:8000/two/ http://$host:server_port/; 可以省略replacement参数的主机名部分,这时候用虚拟主机名填充 proxy_redirect http://locahost:8000/two/ /one/; 使用off参数的时候,将使location和refresh的字段维持不变 proxy_redirect off; 如果使用的 proxy_redirect default; 下面两种配置是等效的 location /{ proxy_pass http://upstream:port/two/; proxy_redirect default; } location /{ proxy_pass http://upstream:port/two/; proxy_redirect http://upstream:port/two/ /one/; }
proxy_next_upstream
proxy_next_upstream [error |timeout |invalid_header |http_500 |http_502~504 |http_404 | off] 默认 proxy_next_upstream error timeout; 配置块 http server location 此配置表示上游一台服务器转发请求出现错误时,继续换一套服务器处理这个请求 其参数用来说明在那些情况下继续选择下一台上游服务器转发请求. error 向上游发起连接 发送请求 读取响应时出错 timeout 发送请求或读取响应时出错 invalid_header 上游服务器发送的响应时不合法 http_500 上游响应500 http_502 上游响应502 http_503 上游响应503 http_504 上游响应504 http_404 上游响应404 off 关闭proxy_next_upstream功能 只要一出错就选择另外一台上游再次出发 Nginx反向代理模块中还提供很多配置,如设置连接的超时时间,临时文件如何存储,如何缓存上游服务器响应等功能.
可以通过阅读 ngx_http_proxy_module了解更多详细情况
#sudo vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
#保证代理机器能访问到 下面的机器并装有nginx 在主机号为100的机器上有响应网页
proxy_pass http://192.168.1.100;
root html;
index index.html index.htm;
}
}
sudo /usr/local/nginx/sbin/nginx -s reload
加一些判断条件 获取到 对方请求的主机 防止别人代理到自己的主机上