• 第十四章 nginx代理配置


    一、nginx代理

    1.常见模式

    1.常见模式:
    1)正向代理
    2)反向代理

    2.区别
    1)区别在于形式上服务的“对象”不一样
    2)正向代理代理的对象是客户端,为客户端服务
    3)反向代理代理的对象是服务端,为服务端服务

    2.nginx代理服务支持协议

    反向代理模式Nginx配置模块
    http、websocket、https、tomcat、Java程序 ngx_http_proxy_module
    fastcgi(php程序) ngx_http_fastcgi_module
    uwsgi(python程序) ngx_http_uwsgi_module
    grpc(golang程序) ngx_http_v2_module

    3.语法

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

    二、nginx代理实践

    1.环境准备

    主机IP身份
    lb01 10.0.0.4,172.16.1.4 代理服务器
    web01 172.16.1.7 被代理的服务器

    2.配置web01网站

    [root@web01 conf.d]# vim proxy.conf
    server {
      listen 80;
      server_name linux.proxy.com;
      location / {
          root /code/proxy;
          index index.html;
      }
    }
    [root@web01 ~]# systemctl restart nginx

    3.编写网站

    [root@web01 ~]# echo "web01........" > /code/proxy/index.html

    4.配置代理

    #安装nginx
    [root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf
    server {
      listen 80;
      server_name linux.proxy.com;

      location / {
          proxy_pass http://10.0.0.7:80;
      }
    }

    5.配置hosts

    10.0.0.4 linux.proxy.com

    6.访问页面查看

    访问页面不是域名对应的页面,是web01上面nginx第一个配置文件
    使用wireshark抓包分析
    可以看出,当我们只用proxy_pass代理的时候,会发现如下问题:
    10.0.0.1请求10.0.0.4的时候使用的是域名
    10.0.0.4请求10.0.0.7的时候使用的是IP:port

    之前课程中讲到,当访问80端口的时候,没有域名的情况下,默认会去找排在最上面的那个配置文件。
    所以我们需要解决这个问题,保留住最开始的请求头部信息。
    proxy_set_header,这个模块可以帮我们解决这个问题

    三、nginx代理常用参数

    1.添加访问后端服务器的请求头信息

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

    # 用户请求的时候HOST的值是www.oldboy.com, 那么代理服务会像后端传递请求的还是www.oldboy.com
    proxy_set_header Host $http_host;
    # 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
    proxy_set_header X-Real-IP $remote_addr;
    # 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    2.代理到后端的TCP连接、响应、返回等超时时间

    #nginx代理与后端服务器连接超时时间(代理连接超时)
    Syntax: proxy_connect_timeout time;
    Default: proxy_connect_timeout 60s;
    Context: http, server, location

    #nginx代理等待后端服务器的响应时间
    Syntax:     proxy_read_timeout time;
    Default:   proxy_read_timeout 60s;
    Context:   http, server, location

    #后端服务器数据回传给nginx代理超时时间
    Syntax: proxy_send_timeout time;
    Default: proxy_send_timeout 60s;
    Context: http, server, location

    3.proxy_buffer代理缓冲区

    #nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
    Syntax: proxy_buffering on | off;
    Default: proxy_buffering on;
    Context: http, server, location

    #设置nginx代理保存用户头信息的缓冲区大小
    Syntax: proxy_buffer_size size;
    Default: proxy_buffer_size 4k|8k;
    Context: http, server, location

    #proxy_buffers 缓冲区
    Syntax: proxy_buffers number size;
    Default: proxy_buffers 8 4k|8k;
    Context: http, server, location

    4.配置代理

    [root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf
    server {
      listen 80;
      server_name linux.proxy.com;

      location / {
          proxy_pass http://10.0.0.7:80;
          include /etc/nginx/proxy_params;
      }
    }

    5.配置优化文件

    [root@lb01 ~]# vim /etc/nginx/proxy_params 
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;

    proxy_buffering on;
    proxy_buffer_size 32k;
    proxy_buffers 4 128k;

     

  • 相关阅读:
    php 下设置cookie问题
    js 页面无滚动条添加滚轮事件
    Python中关于字符串的问题
    Python 字符串相加问题
    ajax 同步和异步
    重叠div鼠标经过事件
    Myeclipse中将项目上传到码云
    eclipse debug的时候提示debug Edit Source Lookup path
    阿里云+wordpress搭建个人博客网站
    centos7 安装mysql
  • 原文地址:https://www.cnblogs.com/jhno1/p/13608193.html
Copyright © 2020-2023  润新知