从长远来看,我想做的是能够通过任何端口连接到任何域,例如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上监听。关于为什么可能会出现这种情况的任何想法?
答案 0 :(得分:1)
最有效的方法是拥有三个单独的服务器指令,每个端口一个。这样,上游服务器就不是动态的,因此Nginx知道它可以保持长期开放给每个服务器的连接。
如果您真的不想这样做,则可以通过执行以下操作来解决此问题:
proxy_pass http://upstream_server.example:$server_port;
$port
不存在,但是$server_port
does,所以应该可以。 (它不是$ port,因为每个连接都有两个端口:服务器端口和客户端端口,分别是$ server_port和$ remote_port。)