请教 v2 大佬们以下 nginx 反向代理配置报错问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qwer666df
V2EX    NGINX

请教 v2 大佬们以下 nginx 反向代理配置报错问题

  •  
  •   qwer666df 2020-11-25 22:02:29 +08:00 4810 次点击
    这是一个创建于 1868 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求想的是,在访问 test.cc/sss 的时候转到 http://localhost:8001 地址

    其中:

    • http://127.0.0.1:8001/sss/list 这个地址是可以正常访问的
    • 防火墙已经关闭
    • 是 Python 项目, 不是 php 项目, , 因为 Google 了一圈发现都是说 php-fpm+nginx 的问题

    报错信息

    2020/11/25 13:43:56 [error] 7#7: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: test.cc, request: "GET /sss/list HTTP/1.1", upstream: "http://127.0.0.1:8001/sss/list", host: "test.cc" 

    nginx.conf

    upstream websocket { ip_hash; server 127.0.0.1:3101 weight=1 max_fails=2 fail_timeout=30s; server 127.0.0.1:3102 weight=1 max_fails=2 fail_timeout=30s; server 127.0.0.1:3103 weight=1 max_fails=2 fail_timeout=30s; } server { listen 80; server_name test.cc; location ~ /sss/ { proxy_pass http://localhost:8001; } } 
    第 1 条附言    2020-11-26 13:30:35 +08:00
    揭帖: 原因大改就是因为 @ztechstack 说的原因 , 我是 nginx 是在 docker 上的, 访问的 127 实际上是在 docker 里面的不是我的本机 127, 但是我的 8001 端口又是在本机的, 所以访问不了
    20 条回复    2020-11-27 11:00:11 +08:00
    eyeix
        1
    eyeix  
       2020-11-25 23:40:45 +08:00 via iPhone
    你这个写法,访问 test.cc/sss 实际上会反代到 localist:8001/sss
    kidlj
        2
    kidlj  
       2020-11-26 00:09:21 +08:00 via iPhone
    SELinux 关掉了吗?

    # sestatus 查看。
    lpts007
        3
    lpts007  
       2020-11-26 03:07:22 +08:00 via Android
    postman 直接给 8001 发个请求试试,headers 的 Host 设置为 test.cc
    37Y37
        4
    37Y37  
       2020-11-26 08:15:34 +08:00
    server 段还有其他 location 规则干扰了吧
    ik
        5
    ik  
       2020-11-26 08:15:59 +08:00 via iPhone
    关闭 selinux

    location ~ /sss/ 改成 location ~ /sss
    ik
        6
    ik  
       2020-11-26 08:16:44 +08:00 via iPhone
    @ik 先关 selinux 看看吧
    zm8m93Q1e5otOC69
        7
    zm8m93Q1e5otOC69  
       2020-11-26 08:27:02 +08:00
    建议使用二级域名。。
    zm8m93Q1e5otOC69
        8
    zm8m93Q1e5otOC69  
       2020-11-26 08:29:32 +08:00
    或者这样试试
    location ^~/sss/ {
    rewrite ^/sss/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:8081;
    }
    zliea
        9
    zliea  
       2020-11-26 08:47:06 +08:00
    偷偷的问是不是 docker
    todd7zhang
        10
    todd7zhang  
       2020-11-26 08:54:02 +08:00
    如果是 Django 的话,可以尝试看看是不是 ALLOWED_HOSTS 的问题
    Kirsk
        11
    Kirsk  
       2020-11-26 09:24:42 +08:00 via Android
    看一楼回复 location /sss/ {
    proxy_pass http://localhost:8001
    Vibra
        12
    Vibra  
       2020-11-26 09:47:05 +08:00
    @lrvinye 是的, 他应该写的是 proxy_pass http://websocket
    qwer666df
        13
    qwer666df  
    OP
       2020-11-26 10:13:57 +08:00
    @ztechstack #9 对是 docket
    @lrvinye #1 但是我本地 hosts 里面 localhost 也指向到了 127.0.0.1
    @lpts007 #3 8001 端口能直接访问没啥问题的
    lpts007
        14
    lpts007  
       2020-11-26 12:03:27 +08:00 via Android
    @qwer666df 访问的时候 Host 设了吗
    zliea
        15
    zliea  
       2020-11-26 12:27:18 +08:00
    docker 的话,nginx 容器内部访问 127.0.0.1 是访问 nginx 容器自身;
    如果需要访问 python 容器的话:
    1. 在同一 docker 的 network 里,可以使用[python 容器名称]:[python 服务端口]。
    2. 或者使用[宿主机 IP]:[python 容器映射宿主机端口]。
    qwer666df
        16
    qwer666df  
    OP
       2020-11-26 13:28:11 +08:00
    @lpts007 #14 host 设置了应该是 docker 的问题
    qwer666df
        17
    qwer666df  
    OP
       2020-11-26 13:29:20 +08:00
    @ztechstack #15 对, 我早上发现了, 也就是访问 nginx 的去了, 不是我的本机, 所以一直链接不上, 你说的这个方案.. 我还不太熟悉, 打算先看看 docker 在研究研究... 蛋疼
    ziwen1943
        18
    ziwen1943  
       2020-11-26 17:38:58 +08:00
    这个问题大概率是 docker 引起的,如果使用 docker 的话,nginx 容器代理应该代理 python 容器名( docker 子网访问使用容器名,加对应端口,127.0.0.1 只是在 nginx 本容器内访问,)
    一个简单的方法是,先用 python 的 debug 方法直接监听 0.0.0.0 ( ALLOW_HOST ),测试通过后再加 nginx 代理,而且这样代理还不行,应该把 python 容器的 Django 项目静态文件通过映射传递或者容器继承文件,让 nginx 来代理所有静态文件和 api,django 真正变成后端,不负责静态文件的路由和转发,django 的效率更高。
    eyeix
        19
    eyeix  
       2020-11-26 22:30:45 +08:00 via iPhone
    @qwer666df 我的意思是 location 使用正则时将会把 location 获取的完整 uri 加到反代的地址后面,而使用普通匹配时则情况不一样,建议搜索 nginx 反代斜杠用法
    qwer666df
        20
    qwer666df  
    OP
       2020-11-27 11:00:11 +08:00
    @lrvinye #19 谢谢大佬 学到了

    @ziwen1943 #18 恩恩, 应该是这个问题, 我一开始只是拿 Python 启动测试一把没想到 docker 折腾有点复杂, 现在先不折腾了,,, 还有我的 Python 是装在本机的也不能代理. 有点蛋疼, 谢谢大佬讲解
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5700 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 06:27 PVG 14:27 LAX 22:27 JFK 01:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86