V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
sockball07
V2EX  ›  NGINX

nginx 正向代理的问题

  •  
  •   sockball07 · 2021-02-12 10:42:04 +08:00 · 3477 次点击
    这是一个创建于 1365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据 该文章 使用以下配置即可正向代理

    server {
        resolver 114.114.114.114;
        listen 80;
        location / {
            proxy_pass http://$host$request_uri;
        }
    }
    
    server {
        resolver 114.114.114.114;
        listen 443;
        location / {
           proxy_pass https://$host$request_uri;
        }
    }
    

    使用即

    curl -x http://[ip]:80 www.baidu.com
    curl -x http://[ip]:443 www.reddit.com
    

    由于想加入密码, 于是加入 http basic 验证配置

    server {
        ...
    
        auth_basic "auth_basic";
        auth_basic_user_file /data/http_basic_auth.txt;
    
        ...
    }
    

    而使用只能这样

    curl -u 'user:pass' -x http://[ip]:443 www.reddit.com
    

    问:

    1. 如上的配置, 是不是意味着 http basic 验证的部分同样会转发给将要代理的站点

    2. 该配置与一般的 curl -x http://[user]:[pass]@[ip]:[port] https://www.reddit.com 有何不同,nginx 是否也能配置成这样?

    10 条回复    2021-02-15 00:10:27 +08:00
    love
        1
    love  
       2021-02-12 12:02:19 +08:00
    我记得拿 nginx 做代理软件用是行不通的,具体哪里不好忘记了,只记得一开始似乎用起来没问题,然后马上就发现解决不了的痛点了
    coolcoffee
        2
    coolcoffee  
       2021-02-12 12:23:16 +08:00
    basic auth 是会写在 Authorization 里面的,你试下 proxy_pass Authorization "",覆盖掉原来的值试试。
    zhoudaiyu
        3
    zhoudaiyu  
       2021-02-12 13:52:24 +08:00 via iPhone
    @love HTTP CONNECT ?
    love
        4
    love  
       2021-02-12 14:13:39 +08:00
    @zhoudaiyu 也许和打开 https 网站有关,难道是打开 http 重定向到 https 的网址不行吗,记不清了,总之有坑,不如就用专用的代理软件如 gost 了
    ryd994
        5
    ryd994  
       2021-02-13 04:53:31 +08:00   ❤️ 1
    https 网站不能用 nginx 代理。HTTPS 需要使用 CONNECT,nginx 不支持这个。这篇文章根本就是放屁。HTTPS 连证书都没有,而且你也不可能有对面站点的私钥。没有私钥,也不植入 CA,就算不是 NGINX,也不可能得知 URI 。

    代理验证的事情,正规的代理软件都有正常的解决办法。为什么用 Nginx ? Squid 不好吗?

    HTTP basic 验证实际上就是把用户名和密码 base64 后加到 Authorization header 里。所以你这样用的话,确实是会被传递到对面服务器的。而且在对面站点本身就使用验证的情况下,无法使用。
    正规代理鉴权用的是 Proxy-Authorization header 。
    ryd994
        6
    ryd994  
       2021-02-13 04:56:05 +08:00
    另外,nginx 现在支持 SNI 了,做反向代理还可以用 SNI 信息。
    但是,即使如此,你也没法把 nginx 当作正向代理用。
    sockball07
        7
    sockball07  
    OP
       2021-02-13 16:49:29 +08:00
    @coolcoffee #2 那看来确实是这么个道理 而且如果对面站点使用了 Authorization 就无效了( 5 楼也有提到)

    @ryd994 #5 那为什么根据配置 使用 443 的话 HTTPS 网站也能代理访问呢...
    ryd994
        8
    ryd994  
       2021-02-13 19:42:38 +08:00
    @sockball07 我怀疑根本没用上代理,你可以找个能显示来源 ip 的网站试试。比如:
    curl https://ipecho.net/plain
    sockball07
        9
    sockball07  
    OP
       2021-02-14 09:27:52 +08:00
    @ryd994 #8 试过了 确实用上了...
    Lax
        10
    Lax  
       2021-02-15 00:10:27 +08:00
    这仍然是个反向代理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2743 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:00 · PVG 21:00 · LAX 05:00 · JFK 08:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.