NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
qwer666df
V2EX  ›  NGINX

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

  •  
  •   qwer666df · Nov 25, 2020 · 5057 views
    This topic created in 1998 days ago, the information mentioned may be changed or developed.

    需求想的是,在访问 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;
    	}
    }
    
    Supplement 1  ·  Nov 26, 2020
    揭帖: 原因大改就是因为 @ztechstack 说的原因 , 我是 nginx 是在 docker 上的, 访问的 127 实际上是在 docker 里面的不是我的本机 127, 但是我的 8001 端口又是在本机的, 所以访问不了
    20 replies    2020-11-27 11:00:11 +08:00
    eyeix
        1
    eyeix  
       Nov 25, 2020 via iPhone
    你这个写法,访问 test.cc/sss 实际上会反代到 localist:8001/sss
    kidlj
        2
    kidlj  
       Nov 26, 2020 via iPhone
    SELinux 关掉了吗?

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

    location ~ /sss/ 改成 location ~ /sss
    ik
        6
    ik  
       Nov 26, 2020 via iPhone
    @ik 先关 selinux 看看吧
    zm8m93Q1e5otOC69
        7
    zm8m93Q1e5otOC69  
       Nov 26, 2020
    建议使用二级域名。。
    zm8m93Q1e5otOC69
        8
    zm8m93Q1e5otOC69  
       Nov 26, 2020
    或者这样试试
    location ^~/sss/ {
    rewrite ^/sss/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:8081;
    }
    zliea
        9
    zliea  
       Nov 26, 2020
    偷偷的问是不是 docker
    todd7zhang
        10
    todd7zhang  
       Nov 26, 2020
    如果是 Django 的话,可以尝试看看是不是 ALLOWED_HOSTS 的问题
    Kirsk
        11
    Kirsk  
       Nov 26, 2020 via Android
    看一楼回复 location /sss/ {
    proxy_pass http://localhost:8001
    Vibra
        12
    Vibra  
       Nov 26, 2020
    @lrvinye 是的, 他应该写的是 proxy_pass http://websocket
    qwer666df
        13
    qwer666df  
    OP
       Nov 26, 2020
    @ztechstack #9 对是 docket
    @lrvinye #1 但是我本地 hosts 里面 localhost 也指向到了 127.0.0.1
    @lpts007 #3 8001 端口能直接访问没啥问题的
    lpts007
        14
    lpts007  
       Nov 26, 2020 via Android
    @qwer666df 访问的时候 Host 设了吗
    zliea
        15
    zliea  
       Nov 26, 2020
    docker 的话,nginx 容器内部访问 127.0.0.1 是访问 nginx 容器自身;
    如果需要访问 python 容器的话:
    1. 在同一 docker 的 network 里,可以使用[python 容器名称]:[python 服务端口]。
    2. 或者使用[宿主机 IP]:[python 容器映射宿主机端口]。
    qwer666df
        16
    qwer666df  
    OP
       Nov 26, 2020
    @lpts007 #14 host 设置了应该是 docker 的问题
    qwer666df
        17
    qwer666df  
    OP
       Nov 26, 2020
    @ztechstack #15 对, 我早上发现了, 也就是访问 nginx 的去了, 不是我的本机, 所以一直链接不上, 你说的这个方案.. 我还不太熟悉, 打算先看看 docker 在研究研究... 蛋疼
    ziwen1943
        18
    ziwen1943  
       Nov 26, 2020
    这个问题大概率是 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  
       Nov 26, 2020 via iPhone
    @qwer666df 我的意思是 location 使用正则时将会把 location 获取的完整 uri 加到反代的地址后面,而使用普通匹配时则情况不一样,建议搜索 nginx 反代斜杠用法
    qwer666df
        20
    qwer666df  
    OP
       Nov 27, 2020
    @lrvinye #19 谢谢大佬 学到了

    @ziwen1943 #18 恩恩, 应该是这个问题, 我一开始只是拿 Python 启动测试一把没想到 docker 折腾有点复杂, 现在先不折腾了,,, 还有我的 Python 是装在本机的也不能代理. 有点蛋疼, 谢谢大佬讲解
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   979 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 19:13 · PVG 03:13 · LAX 12:13 · JFK 15:13
    ♥ Do have faith in what you're doing.