Nginx 反向代理

发布于 2024-06-28 06:45:34 字数 4641 浏览 19 评论 0

正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。结论就是,正向代理 是一个位于客户端和原始服务器(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

ˇ宁静的妩媚

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文