• (013)Nginx静态资源web服务_代理服务


      1、代理及其配置语法

      代理就是客户端首先请求代理,代理再把请求给服务端,服务端再通过代理返回给客户端。Nginx可以实现很多协议的代理:

      

      最常用的是HTTP的代理,HTTP代理分为正向代理和反向代理。区别在于代理的对象不一样,正向代理代理的对象是客户端,比如说想访问谷歌,把代理服务器设置想访问的地址为谷歌就可以了,想访问什么就设置为什么,为我们客户端服务。反向代理代理的对象是服务端,我们并不需要关心服务端是哪一台服务器,反向代理放在服务端,它帮我们处理请求。

      正向代理的场景:

      1)一个公司所有的电脑没法上网了,只有一台机器可以上网的时候,往往需要配置一个代理的地址,通过这台代理服务器去上公网。

      2)翻墙,通过国外的一台代理搜索想要看的网站。

      反向代理的场景:

      客户端请求一个网站的时候,不知道后端有多少台服务器,其实请求的是一个代理,代理把请求发给对应的服务器,服务器再返回给客户端。

      代理的配置语法:

      Syntax:proxy_pass URL;
      Default:-
      Context:location,if in location,limit_except

      URL格式如:http://localhost:8000/uri/ 或者 https://localhost:8000/uri/ 或者 http://unix:/tmp/backend.socket:/uri/

      2、演示反向代理

      准备虚拟机151和152,Nginx端口分别是80和8080,思路是浏览器访问151,在151上配置反向代理,代理到152上,请求152上的页面。

      152上新建测试文件/opt/app/code/test_proxy.html

    <html>
    <head>
        <meta charset="utf-8">
        <title>imooc1</title>
    </head>
    <body style="background-color:red;">
        <h1>Welcome to 192.168.7.152</h1>
    </body>
    </html>

      修改152配置文件,给test_proxy.html配置一个默认访问路径并修改端口,新加配置如下:

    location ~ .*.(html|htm)$ {
        root  /opt/app/code;
    }

      

      修改151配置文件,配置反向代理:

    location ~ /test_proxy.html$ {
        proxy_pass http://192.168.7.152:8080;
    }

      

      启动两个nginx服务,并测试http://192.168.7.151/test_proxy.html,代理成功! 

      

      3、演示正向代理

      准备两台虚拟机151和152,思路是152上页面只允许151访问,如果想用本地浏览器访问,只能为浏览器设置代理,代理到151访问152。

      152上新建测试文件/opt/app/code/jesonc.html

    <html>
    <head>
        <meta charset="utf-8">
        <title>jeson1</title>
    </head>
    <body >
        <h1>Jeson<h1>
    </body>
    </html>

      152上修改配置文件,只允许192.168.7.151访问,并且指定了首页访问目录:

    location / {
        allow 192.168.7.151;
        deny all;
        root   /opt/app/code;
        index  index.html index.htm;
    }  

      

      151上修改配置文件,配置正向代理,指定DNS

    resolver 8.8.8.8;
    location / {  
        proxy_pass http://$http_host$request_uri;
    }  

      

      重新启动两台虚拟机的Nginx,浏览器访问:http://192.168.7.152/jesonc.html,浏览器直接访问152,返回403。 

      

      下面为浏览器设置代理,打开IE浏览器(谷歌浏览器代理插件SwitchySharp没安上。。。),IE浏览器设置代理很简单:依次点击工具->Internet选项->连接->局域网设置,填写代理地址和端口,如图所示(如果设置完不生效请关闭再重新打开浏览器):

      

      在IE中输入:http://192.168.7.152/jesonc.html,访问成功!

      

      说明:

      1)proxy_pass http://$http_host$request_uri 中 $http_host是192.168.7.152,$request_uri是/jesonc.html。

      2)在IE浏览器中设置了代理,在谷歌浏览器居然也成功代理了。。。相通的。。。

      3)如果虚拟机152经过了一级或多级代理的话,应该使用$http_x_forwarded_for判断,不能用deny、allow,语法如:

    location / {
        if ( $http_x_forwarded_for !~* "^192.168.7.151") {
            return 403;
        }
        root   /opt/app/code;
        index  index.html index.htm;
    }

      4、代理的常用配置

      在官网http://nginx.org的documentation中可以查找proxy的全部配置,地址如下:

      http://nginx.org/en/docs/http/ngx_http_proxy_module.html

      1)配置缓存区

      Syntax:proxy_buffering on | off;
      Default:proxy_buffering on;
      Context:http,server,location

      扩展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size

      2)配置跳转重定向

      Syntax:proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;
      Default:proxy_redirect default;
      Context:http,server,location

      3)配置头信息

      Syntax:proxy_set_header field value;
      Default:proxy_set_header Host $proxy_host;
          proxy_set_header Connection close;
      Context:http,server,location

      扩展:proxy_hide_header、proxy_set_body

      4)配置超时

      Syntax:proxy_connect_timeout time;
      Default:proxy_connect_timeout 60s;
      Context:http,server,location

      扩展:proxy_read_timeout、proxy_send_timeout

      5) 代理配置示例

    location / {
           proxy_pass http://127.0.0.1:8080;
          proxy_redirect default;
    
          proxy_set_header Host $http_host;#设置头信息host
          proxy_set_header X-Real-IP $remote_addr;#设置头信息客户端真实IP
    
          proxy_connect_timeout 30;
          proxy_send_timeout 60;
          proxy_read_timeout 60;
    
          proxy_buffer_size 32k;
          proxy_buffering on;
          proxy_buffers 4 128k;
          proxy_busy_buffers_size 256k;
          proxy_max_temp_file_size 256k;
    }

      可以把公共信息提取出来,放到一个单独的文件里,比如文件名:proxy_params,然后使用 include加载

    proxy_redirect default;
    
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
    location / {
        proxy_pass http://127.0.0.1:8080;
        include proxy_params;
    }

      

      

  • 相关阅读:
    完全卸载Android Studio(卸载得干干净净)
    每日生活总结1
    求解协方差矩阵
    每天一个linux命令:ifconfig命令 临时修改重启后恢复原样
    每天一个linux命令(58):telnet命令
    每天一个linux命令:pwd命令
    每天一个linux命令(38):cal 命令
    每天一个linux命令:scp命令
    login shell与non-login shell的区别
    linux下重要的网络配置文件
  • 原文地址:https://www.cnblogs.com/javasl/p/12865035.html
Copyright © 2020-2023  润新知