• Nginx


    目录
    - 前言
    - Nginx 根据域名反向代理
    - Nginx proxy_pass 关于 '/' 的作用

    1. 前言

    接到一个需求,通过nginx 代理互联网上某一个页面,刚开始的时候觉得很简单的,直接 proxy_pass 过去就完事了,测试了下还是想太多。具体记录如下。

    2. Nginx 根据域名反向代理

    web服务器通常有三种访问方式:

    1. 基于ip
    2. 基于域名
    3. 基于端口

    而互联网上暴露的网站多数都是通过 基于域名 的方式,如果直接通过解析后的IP访问,可能就无法访问到网站信息。我这里模拟了下这种方式,如下:

    对应关系:

    浏览器访问域名:

    浏览器访问ip地址:

    现在问题来了,当你的 nginx 配置 proxy_pass 的时候,得到的是 域名返回的结果 还是 ip地址返回的结果呢?这两种返回的结果完全不同。

    在另一台主机 [ 192.168.118.14 ] 上安装 nginx 并配置好

    配置nginx 方向代理

    通过浏览器访问 192.168.118.14

     查看日志信息:

    192.168.118.41 - - [23/Jul/2019:20:09:12 +0800] "GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" "-" "upstream_addr":"112.2.3.66:80"
    

    结合上面的反馈, 可以得到,当 nginx 反向代理域名,会根据启动时候解析出来的ip,加载到内存中,后面不会改变可以绑定hosts或者指定resolve服务器来固定ip

    如果在使用 nginx 做反向代理的时候遇到以上相同的情况,解决办法是 设置一个 proxy_set_header

    proxy_set_header Host "[domain]";
    

    配置完成,nginx -s reload  浏览器访问:

     现在就得到想要的页面了。

    3. Nginx proxy_pass 关于 '/' 的作用

    有这样一个服务器访问如下:

    访问 http://192.168.118.15 得到

    访问 http://192.168.118.15/a/

    在这台主机前端需要添加一个反向代理。配置如下:

    第一种配置:

    当这样配置的时候,访问 http://192.168.118.14/a/ 结果如下:

    总结:

    proxy_pass http://192.168.118.14/a/  --> http://192.168.118.15/
    

    第二种配置:

    当这样配置的时候,访问 http://192.168.118.14/a/ 结果如下:

    总结:

    proxy_pass http://192.168.118.14/a  --> http://192.168.118.15/
    

    综上所述:

    当 proxy_pass 不加 '/' 时, location uri 会追加到 proxy_pass http://domain/  后面;
    当 proxy_pass 加 '/' 时,不会在 proxy_pass http://domain  后面追加任何uri

    切记以上两条规则。

  • 相关阅读:
    推理思维
    模糊数学
    Android 加法程序
    线程特点
    单例模式的优缺点
    lua 字符串过滤,特殊字符过滤
    cocos2dx
    cocos2dx之控制台输出
    C++基础(using)
    生活常识
  • 原文地址:https://www.cnblogs.com/hukey/p/11609030.html
Copyright © 2020-2023  润新知