[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 1
开 ssh,我上去搞
|
2
cominghome 2018-02-01 09:36:48 +08:00
嗯,我相信你是产品经理
|
4
PMinV2 OP @cominghome 😄
|
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 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 里实现。 |
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 有这么麻烦?
下个宝塔面板点两下的事情.. |