Nginx必备知识5:搭建反向代理

  • 反向代理

    反向代理(Reverse Proxy),是指用代理服务器来接受Internet上的连接请求,然后将 请求转发给内网上的上游服务器,并将从上游服务器上得到的结果返回给Internet上的请求连接的客户端,此时代理服务器对外的表现就是一个Web服务器。

  • Nginx作为反向代理的原因

    Nginx具备高并发高负载能力,因此一般用作前端服务器直接向客户端提供静态文件服务。对于一些复杂业务不适合放在Nginx服务器上的一般用ApacheTomcat等服务器来处理。此时就需要将Nginx同时配置为静态服务器以及反向代理,不适合Nginx处理的请求就通过反向代理功能转发到上游服务器中处理。

    从另一个角度,只有用户的动态请求(不同用户请求结果不同)才会需要反向代理,如果结果一样就是静态资源请求。

  • Nginx作为反向代理的特点

    当客户端发来HTTP请求时,Nginx并不会立即转发到上游服务器,而是先把用户的请求(包括HTTP包体)完整的接收到Nginx所在服务器的硬盘或内存中,然后再向上游服务器发起连接。

    Squid等代理服务器则是一边接收客户端请求,一边转发到上游服务器。

    Nginx方式可以降低上游服务器的负载,降低其并发压力。

  • 所需模块

    1. ngx_http_proxy_module
  • 具体配置步骤

    以最简单的方式配置一个反向代理。

    1. 将上篇搭建的静态服务器改为上游服务器

      上游服务器一般是内网服务器。

      vim /home/nginx/conf/nginx.conf

      修改:

      http {
          server {
              listen	127.0.0.1:8080; # 127.0.0.1表示只能本机进程访问
          }
      } 
      
    2. 停止原来的Nginx进程,并重启

      /home/nginx/sbin/nginx -s stop

      /home/nginx/sbin/nginx

      此版本为1.16.1

    3. 用OpenResty搭建反向代理

      依据OpenResty® Linux 包界面方式下载、安装OpenResty

    4. 修改OpenResty下Nginx配置

      vim /usr/local/openresty/nginx/conf/nginx.conf

      http {
          upstream local { # 表示上游服务器地址,将这一批服务器命名为local
              server 127.0.0.1:8080 # 其中一台服务器地址,可以有很多
          }
          server {
              sercer_name localhost; 
              listen 80;
              location / { # 对所有的请求
                  proxy_pass http://local; # 代理到刚才配置的上游服务中
              }
          }
      } 
      
    5. 启动OpenResty下的Nginx

      /usr/local/openresty/nginx/sbin/nginx

      此时访问ip:80,抓包可以看到请求头是OpenResty返回的。

    6. 配置缓存服务器\响应服务器
      http {
          upstream local { # 表示上游服务器地址,将这一批服务器命名为local
              server 127.0.0.1:8080 # 其中一台服务器地址,可以有很多
          }
          server {
              sercer_name localhost; 
              listen 80;
              location / { # 对所有的请求
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forward_for;
                  
                  proxy_cache my_cache;
                  proxy_cache_key $host$uri$is_arfs$args;
                  proxy_cache_valid 200 304 302 ld;
                  proxy_pass http://local; # 代理到刚才配置的上游服务中
              }
          }
      } 
      
  • Reference

  1. Nginx核心知识100讲:12
  2. Nginx Document
  3. 《深入理解Nginx模块开发与架构解析(第2版)》

你可能感兴趣的:(#,Nginx,Nginx,反向代理)