Nginx + supervisord 怎么配置可以实现公网域名访问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
PMinV2
V2EX    程序员

Nginx + supervisord 怎么配置可以实现公网域名访问

  •  
  •   PMinV2 2018-02-01 09:34:00 +08:00 5869 次点击
    这是一个创建于 2877 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. supervisord config
    [unix_http_server] file=/tmp/supervisor.sock ; the path to the socket file ;chmod=0700 ; socket file mode (default 0700) ;chown=nobody:nogroup ; socket file uid:gid owner ;username=test ; default is no username (open server) ;password=test ; default is no password (open server) [inet_http_server] ; inet (TCP) server disabled by default port=0.0.0.0:9001 ; ip_address:port specifier, *:port for all iface username=test ; default is no username (open server) password=test ; default is no password (open server) 
    1. Nginx config
     upstream uwsgi_backend { server 127.0.0.1:8002; } server { listen 80; server_name mydomain.com; location ^~ /.git { deny all; } location ^~ /static { root /; index index.html; expires 1M; access_log off; add_header Cache-Control "public"; } location / { proxy_next_upstream error timeout http_500 http_503; proxy_connect_timeout 4000ms; proxy_read_timeout 30s; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Rewrite-URL $request_uri; client_max_body_size 10m; uwsgi_pass uwsgi_backend; include uwsgi_params; } } # 这里是出问题的地方,为希望能通过代理 9001 端口到本地的 0.0.0.0:9001 实现公网访问 server { listen mydomain.com:9001; server_name mydomain.com; location / { proxy_pass http://0.0.0.0:9001; proxy_buffering off; } } 

    下面是我谷歌搜索了很多跟我这个情况不太一样,求大神指点。

    https://segmentfault.com/a/1190000006902417

    https://serverfault.com/questions/858859/nginx-proxy-pass-to-supervisord

    31 条回复    2018-02-01 15:53:54 +08:00
    defunct9
        1
    defunct9  
       2018-02-01 09:36:17 +08:00   1
    开 ssh,我上去搞
    cominghome
        2
    cominghome  
       2018-02-01 09:36:48 +08:00
    嗯,我相信你是产品经理
    PMinV2
        3
    PMinV2  
    OP
       2018-02-01 09:40:05 +08:00
    @defunct9 大佬要这么猛嘛
    PMinV2
        4
    PMinV2  
    OP
       2018-02-01 09:40:25 +08:00
    pepesii
        5
    pepesii  
       2018-02-01 09:41:38 +08:00 via iPhone
    什么意思,supervisor 的那个 web 界面,要通过 ng 代理?
    rockyou12
        6
    rockyou12  
       2018-02-01 09:49:32 +08:00
    server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com;

    location / {
    proxy_pass http://localhost:9001;
    }

    }
    defunct9
        7
    defunct9  
       2018-02-01 09:49:44 +08:00
    @PMinV2 标准语。因为你描述的可能跟问题没有关联。嘿嘿
    yxwzaxns
        8
    yxwzaxns  
       2018-02-01 09:51:41 +08:00 via iPhone
    listen mydomain.com:9001;

    listen 9001

    不用加域名,域名已经由 server_name 指定
    PMinV2
        9
    PMinV2  
    OP
       2018-02-01 09:56:03 +08:00
    @pepesii 对的
    msg7086
        10
    msg7086  
       2018-02-01 09:56:08 +08:00
    listen 的是 IP 和端口,域名要写在 server_name 里,proxy 的目标是 IP,不是 0000。
    msg7086
        11
    msg7086  
       2018-02-01 09:57:49 +08:00
    而且你把 supervisord 配置在了 0000,已经是公网访问了,再配置 nginx 就冲突了。你要么选择把 supervisord 配置在本机,再用反代,要么就直接用 supervisord。
    PMinV2
        12
    PMinV2  
    OP
       2018-02-01 10:00:58 +08:00
    @yxwzaxns 修改之后显示:
    无法访问此网站 拒绝了我们的连接请求。

    Header 中的返回就一条提示:Referrer Policy:no-referrer-when-downgrade
    yxwzaxns
        13
    yxwzaxns  
       2018-02-01 10:07:09 +08:00 via iPhone
    @PMinV2
    [inet_http_server] ; inet (TCP) server disabled by default
    port=0.0.0.0:9001

    这里把 0000 换成 127001

    nginx 里 listen 公网 ip:9001

    passproxy http://127001:9001

    最后看 nginx 的日志
    PMinV2
        14
    PMinV2  
    OP
       2018-02-01 10:24:49 +08:00
    @msg7086 已经按你说的修复了,但是还是没能成功访问
    PMinV2
        15
    PMinV2  
    OP
       2018-02-01 10:25:13 +08:00
    @yxwzaxns 日志没有关于这个请求的。
    PMinV2
        16
    PMinV2  
    OP
       2018-02-01 10:27:34 +08:00
    更新配置
    [inet_http_server]
    port=127.0.0.1:9001

    server {
    listen 9001;

    server_name mydomain . com;

    location / {
    proxy_pass http:// 127.0.0.1:9001;
    proxy_buffering off;
    }
    }
    yxwzaxns
        17
    yxwzaxns  
       2018-02-01 10:30:35 +08:00 via iPhone
    @PMinV2 因为你没配置日志吧
    SmiteChow
        18
    SmiteChow  
       2018-02-01 10:33:34 +08:00
    端口冲突了
    seancheung
        19
    seancheung  
       2018-02-01 10:56:28 +08:00
    >> nginx 配置

    upstream supervisord {
    server 127.0.0.1:9001;
    keepalive 8;
    }

    server
    {
    listen 80;
    listen [::]:80;

    # server_name domain.com;
    # auth_basic "Restricted Access";
    # auth_basic_user_file /etc/nginx/conf/htpasswd.users;

    location / {
    proxy_pass http://supervisord;
    proxy_http_version 1.1;
    # proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    # proxy_set_header Host $host;
    # proxy_cache_bypass $http_upgrade;
    }
    }

    >> supervisor 配置

    [inet_http_server]
    port = 127.0.0.1:9001
    username = user
    password = 123

    >> 已测试可以正常访问
    seancheung
        20
    seancheung  
       2018-02-01 11:06:58 +08:00   1
    顺便指正一下题主配置中得问题:

    你的 supervisord 已经监听了 9001 端口, 而你 nginx 里再去抢占这个端口,是无法启动服务的。
    另外如果你希望通过 nginx 反向代理 supervisord 的 inet_http_server, 那么在 inet_http_server 配置里就只需要监听来自本地 host 的请求即可。否则你的 9001 端口依然是对 public 暴露的(不考虑防火墙的话)。

    另外你的 nginx 最新面的 server 配置中, listen 不应该加上域名。域名放 server_name 部分。listen 部分结构是 host+port, 而 host 可以缺省。既然你是对公网暴露,那么缺省 host 即可。如果需要 ipv6,加上 ipv6 的监听即可。

    我给出的配置为最简配置,题主可以根据实际需求调整。另外 basicauth 也可以放在 nginx 里实现。
    PMinV2
        21
    PMinV2  
    OP
       2018-02-01 11:16:48 +08:00
    问题得到了解决,感谢各位的鼎力相助。

    原因如下:我的 Nginx 和 supervisord 都没问题了,但是我的端口以为没问题但是其实存在问题
    fuck,阿里云安全组,禁止了我的端口。
    我一开始使用了下面两条命令开通了防火墙访问权限

    iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 9001 -j ACCEPT
    iptables -L -n
    #看到下面这个就以为 OK 了
    ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9001

    但是经过仔细排查问题重新使用下面这个命令解决了问题
    iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 9001 -j ACCEPT
    service iptables save
    iptables -nvL
    0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9001
    0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:9889
    虽然作为一个产品并不能看懂这两条有啥区别,我是从 iptables -h 文档中查到的命令进行尝试的,有大佬解释一下吗?

    运行良好的 supervisord Web 服务
    running
    pid 9706, uptime 0:26:03 wechatspider_processor Restart Stop Clear Log Tail -f
    running
    pid 15689, uptime 0:00:01 wechatspider_redis Restart Stop Clear Log Tail -f
    running
    pid 9707, uptime 0:26:03 wechatspider_scheduler Restart Stop Clear Log Tail -f
    PMinV2
        22
    PMinV2  
    OP
       2018-02-01 11:17:56 +08:00
    @seancheung 我重新考虑了防火墙
    gqkkk
        23
    gqkkk  
       2018-02-01 11:20:55 +08:00
    0.0.0.0 是全地址监听了
    自己看下日志 会告诉你端口被占用的
    PMinV2
        24
    PMinV2  
    OP
       2018-02-01 11:21:21 +08:00
    更正一下:0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:9001
    PMinV2
        25
    PMinV2  
    OP
       2018-02-01 11:21:48 +08:00
    @gqkkk 是防火墙的问题,已经解决了
    defunct9
        26
    defunct9  
       2018-02-01 11:28:09 +08:00
    So, 我说的是大实话。你一开始的描述跟问题毫无关联。上去看一眼就知道了。导致一堆人开始猜火车。
    PMinV2
        27
    PMinV2  
    OP
       2018-02-01 11:29:29 +08:00
    @defunct9 大佬要是能给我指点迷津就更好了。作为一个 PM 能到部署阶段已经不易了
    GenHong
        28
    GenHong  
       2018-02-01 11:38:12 +08:00
    @defunct9 表示赞同~~
    20has
        29
    20has  
       2018-02-01 12:38:04 +08:00 via Android
    @PMinV2 作为一个运维 我想说的是
    阿里云的安全组和 iptables 防火墙是两个东西 详情可以看看阿里云帮助文档
    又是反向代理,又是 iptables 端口转发,还有安全组,老铁,你要闹哪样!
    如果是我我会 安全组入口全部放行 iptables 禁用 只使用 nginx 代理即可
    tailf
        30
    tailf  
       2018-02-01 15:06:39 +08:00
    解决办法:


    1. 把 Nginx 删了
    2. 把防火墙的 9001 端口打开


    哦了。
    knva
        31
    knva  
       2018-02-01 15:53:54 +08:00
    反向代理 9001 有这么麻烦?
    下个宝塔面板点两下的事情..
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5560 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms 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