(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;
}

  

  

原文地址:https://www.cnblogs.com/javasl/p/12865035.html