• nginx proxy_set_header Host $host 和 proxy_set_header Host $http_host 的作用对比


    转载自https://www.jianshu.com/p/7a8a7eb3707a

    1、浏览器直接访问服务,获取到的 Host 包含浏览器请求的 IP 和端口

    测试服务器,centos 7

    sudo pip install --upgrade pip

    sudo pip install flask

    把如下代码放到文件ngx_header.py, 并用python运行如下脚本,

    IP 是 eth0的IP,请根据自己的服务器,做相应的修改, 笔者使用的是阿里云服务器,有公网IP,公网IP映射到本地eth0就是172.31.5.0

    # cat ngx_header.py 
    from flask import Flask, request, jsonify
    app = Flask(__name__)
    
    
    @app.route('/')
    def get_host():
        host = request.headers.get('Host')
        return jsonify({'Host': host}), 200
    
    
    if __name__ == '__main__':
        app.run(host='172.31.5.0', port=5000)
    
    # python ngx_header.py

    结果如下:

     2、配置 nginx 代理服务

    2.1 不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,参考 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
    # cat ngx_header.conf 
    server {
        listen 8090;
        server_name _;
        location / {
            proxy_pass http://172.31.5.0:5000;
        }
    }

    结果如下:

    2.2 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息

    # cat ngx_header.conf 
    server {
        listen 8090;
        server_name _;
        location / {
            proxy_set_header Host $host;
            proxy_pass http://172.31.5.0:5000;
        }
    }

    结果如下:

    2.3 设置 proxy_set_header Host $host:$proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 $host:$proxy_port 的值 

    # cat ngx_header.conf 
    server {
        listen 8090;
        server_name _;
        location / {
            proxy_set_header Host $host:$proxy_port;
            proxy_pass http://172.31.5.0:5000;
        }
    }

    结果如下:

    2.4 设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口

    server {
        listen 8090;
        server_name _;
        location / {
            proxy_set_header Host $http_host;
            proxy_pass http://172.31.5.0:5000;
        }
    }

    结果如下:

    2.5 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404
    # tree .
    .
    ├── ngx_header.py
    └── templates
        ├── bar.html
        └── foo.html
    
    1 directory, 3 files
    
    // ngx_header.py 代码
    # cat ngx_header.py 
    from flask import Flask, request, render_template, redirect
    app = Flask(__name__)
    
    
    @app.route('/')
    def get_header():
        host = request.headers.get('Host')
        return render_template('foo.html',Host=host)
    
    
    @app.route('/bar')
    def get_header2():
        host = request.headers.get('Host')
        return render_template('bar.html',Host=host)
    
    
    @app.route('/2bar')
    def get_header3():
        # 代码层实现的重定向
        return redirect('/bar')
    
    
    if __name__ == '__main__':
        app.run(host='172.31.5.0', port=5000)
    // foo.html 代码
    # cat templates/foo.html 
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>foo</title>
    </head>
    <body>
    Host: {{ Host }}
    </br>
    <a href="2bar"">页面跳转</a>
    </body>
    </html>
    
    // bar.html 代码
    # cat templates/bar.html 
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>bar</title>
    </head>
    <body>
    Host: {{ Host }}
    </body>
    </html>
    
    # python ngx_header.py 
    
    # cat ngx_header.conf 
    server {
        listen 8090;
        server_name _;
        location / {
            proxy_set_header Host $host;
            proxy_pass http://172.31.5.0:5000;
        }
    }

    结果如下:

     

  • 相关阅读:
    WRF WPS预处理
    CVS安装
    Linux窗口最小化消失,任务栏上无法找到的解决方法
    NCARG安装配置出现error while loading shared libraries: libg2c.so.0问题额解决办法
    Netcdf安装
    Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
    The leaflet package for online mapping in R(转)
    Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
    What does a Bayes factor feel like?(转)
    Weka算法介绍
  • 原文地址:https://www.cnblogs.com/faberbeta/p/nginx008.html
Copyright © 2020-2023  润新知