我认为我提出的 Web 服务器进程正在侦听 localhost:8080,并尝试连接到它,但一直收到连接重置错误。事实证明,我错了,我的进程正在侦听一个完全不同的端口。
然而,我无法理解的是为什么我会收到连接重置错误,而不是如果没有进程在该端口上侦听,通常会得到“连接被拒绝”。据我所知,在 8080 上没有其他东西可以收听:
$ sudo lsof -i -P | grep 8080
# no result
$ sudo netstat -a -n | grep 8080
# still no result
Run Code Online (Sandbox Code Playgroud)
然而,最初接受与此端口的连接(尽管在进一步数据时关闭):
$ /usr/local/bin/wget localhost:8080
--2014-01-14 16:29:22-- http://localhost:8080/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:8080... failed: Connection refused.
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... No data received.
Run Code Online (Sandbox Code Playgroud)
与 telnet 类似:
$ telnet localhost 8080
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to …Run Code Online (Sandbox Code Playgroud) 我刚刚在 Mac OS X 10.11 (El Capitan) 上设置了 Homebrew 的 Nginx。
如果我像这样设置我的 Ngnix 配置:
listen 127.0.0.1:8080;
listen 127.0.0.1:81;
listen 127.0.0.1:75;
Run Code Online (Sandbox Code Playgroud)
它会工作。但是如果我把它放在那里:
listen 127.0.0.1:80;
Run Code Online (Sandbox Code Playgroud)
它不会。如果我去,我会被拒绝连接http://127.0.0.1
ps说 Nginx 正在运行,但netstat -a | grep nginx或netstat -a | grep 80说它不是。
当然,以 root 身份运行它(不是我需要它来运行 :8080
Mac OS X 防火墙没有运行。
错误日志不再显示:
2015/10/10 17:16:19 [emerg] 23906#0: bind() to 0.0.0.0:80 failed (48: Address already in use)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我可以使用它运行8080(奇怪的是,当我运行时8080,它会打开80端口并将其重定向到80)。