Nginx 反向代理
正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。结论就是,正向代理 是一个位于客户端和原始服务器(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
加一些判断条件 获取到 对方请求的主机 防止别人代理到自己的主机上
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 配置 Nginx
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论