
[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) 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
1 defunct9 2018-02-01 09:36:17 +08:00 开 ssh,我上去搞 |
2 cominghome 2018-02-01 09:36:48 +08:00 嗯,我相信你是产品经理 |
4 PMinV2 OP |
5 pepesii 2018-02-01 09:41:38 +08:00 via iPhone 什么意思,supervisor 的那个 web 界面,要通过 ng 代理? |
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; } } |
8 yxwzaxns 2018-02-01 09:51:41 +08:00 via iPhone |
10 msg7086 2018-02-01 09:56:08 +08:00 listen 的是 IP 和端口,域名要写在 server_name 里,proxy 的目标是 IP,不是 0000。 |
11 msg7086 2018-02-01 09:57:49 +08:00 而且你把 supervisord 配置在了 0000,已经是公网访问了,再配置 nginx 就冲突了。你要么选择把 supervisord 配置在本机,再用反代,要么就直接用 supervisord。 |
12 PMinV2 OP |
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 的日志 |
16 PMinV2 OP 更新配置 [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; } } |
18 SmiteChow 2018-02-01 10:33:34 +08:00 端口冲突了 |
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 >> 已测试可以正常访问 |
20 seancheung 2018-02-01 11:06:58 +08:00 顺便指正一下题主配置中得问题: 你的 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 里实现。 |
21 PMinV2 OP 问题得到了解决,感谢各位的鼎力相助。 原因如下:我的 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 |
22 PMinV2 OP @seancheung 我重新考虑了防火墙 |
23 gqkkk 2018-02-01 11:20:55 +08:00 0.0.0.0 是全地址监听了 自己看下日志 会告诉你端口被占用的 |
24 PMinV2 OP 更正一下:0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:9001 |
26 defunct9 2018-02-01 11:28:09 +08:00 So, 我说的是大实话。你一开始的描述跟问题毫无关联。上去看一眼就知道了。导致一堆人开始猜火车。 |
29 20has 2018-02-01 12:38:04 +08:00 via Android @PMinV2 作为一个运维 我想说的是 阿里云的安全组和 iptables 防火墙是两个东西 详情可以看看阿里云帮助文档 又是反向代理,又是 iptables 端口转发,还有安全组,老铁,你要闹哪样! 如果是我我会 安全组入口全部放行 iptables 禁用 只使用 nginx 代理即可 |
30 tailf 2018-02-01 15:06:39 +08:00 解决办法: 1. 把 Nginx 删了 2. 把防火墙的 9001 端口打开 哦了。 |
31 knva 2018-02-01 15:53:54 +08:00 反向代理 9001 有这么麻烦? 下个宝塔面板点两下的事情.. |