我在 Ubuntu 服务器上MyApp
运行了Vapor App ,并安装了 nginx 以通过 连接到它。它可以工作,但我不明白它的以下部分:localhost:8080
<server-ip>:80
为了让它工作,我遵循了关于如何托管 Vapor 应用程序的小教程。nginx 配置文件的一部分必须设置如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
我现在应该能够MyApp
使用<server-ip>:80
,但这不起作用。正如MyApp
提示符开始的那样:
服务器启动于http://本地主机:8080
我将 nginx 配置中的服务器块更改为:
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
proxy_pass http://localhost:8080; // Changed to localhost
}
}
这有效,我现在能够到达了MyApp
!
netstat 显示以下条目:
[...]:~# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1106/nginx: master
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 601/systemd-resolve
[...] // my ssh connection
tcp6 0 0 ::1:8080 :::* LISTEN 8145/<MyApp>
tcp6 0 0 :::80 :::* LISTEN 1106/nginx: master
- 因此,我的 Vapor 应用程序似乎在 tcp6 上运行。我是服务器开发新手,认为 localhost 相当于
127.0.0.1
。为什么我的更改会让它工作? - 当我更改为本地主机后,我可能会遇到其他问题吗?
答案1
该名称除了相当于IPv4地址之外,还localhost
相当于IPv6地址。::1
127.0.0.1
在过去的近 20 年左右的时间里,IPv6 一直是比 IPv4 更受青睐的协议,因此当 IPv6 地址可用于某个名称时,将会首先尝试该地址。
这意味着,除非有人竭尽全力禁用 IPv6,否则几乎每台现代设备都可以localhost
连接到。在某些操作系统(如 Windows)上,IPv6 无论如何都无法禁用,因此始终可以连接到。::1
localhost
::1