从长远来看,我想要做的是能够通过任何端口连接到任何域,例如,mysite.com:8000
然后通过Nginx让它通过相同的端口路由到内部IP。所以例如192.168.1.114:8000
。
我查看了iptables,虽然我计划拥有多个域名,所以在这种情况下我真的不适合我(如果我错了,请随时纠正我)。我确保我尝试访问的内部ip和端口是可连接和运行的,并且我正在测试的端口可以从我的网络外部访问。
这是我目前正在使用的Nginx配置:
server {
set $server "192.168.1.114";
set $port $server_port;
listen 80;
listen 443;
listen 9000;
server_name mysite.com;
location / {
proxy_pass http://$server:$port;
proxy_set_header Host $host:$server_port;
}
}
目前发生的情况是,当我发送请求时,它只是超时。我一直在测试使用端口80
和端口9000
。关于我可能做错的任何想法?谢谢!
编辑:
我将配置文件更改为如下所示
server {
listen 9000;
server_name _;
location / {
add_header Content-Type text/html;
return 200 'test';
}
我一直得到同样的错误。防火墙已关闭,因此看起来Nginx似乎没有在端口9000上侦听。有关为什么会出现这种情况的任何想法?
最有效的方法是拥有三个独立的服务器指令,每个端口一个。这样,上游服务器不是动态的,因此Nginx知道它可以保持对每个服务器开放的长期连接。
如果你真的不想这样做,你可以通过做这样的事情来绕过它:
proxy_pass http://upstream_server.example:$server_port;
$port
不存在,但$server_port
does,所以应该工作。 (它不是$ port,因为每个连接有两个端口:服务器端口和客户端端口,分别是$ server_port和$ remote_port。)