我有一个node.js应用程序,我正在运行nginx作为反向代理服务器。我想通过多种方式访问同一个应用程序。
让机器的IP地址为12.16.12.113
。
然后我希望通过以下方式访问相同的应用程序:
12.16.12.113:3000
test.example.com
我在sites-available
目录中有nginx的2个配置文件:
文件1:
server {
listen 80;
server_name test.example.com;
location / {
proxy_pass http://localhost:3000;
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;
}
}
file2的:
server {
listen 3000;
server_name default_server;
location / {
proxy_pass http://localhost:3000;
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;
}
}
问题在于,如果我链接sites-enabled
目录中的两个文件,则只能通过12.16.12.113:3000
访问该应用。如果我删除 file2 ,则可以通过test.example.com
访问它。
但我希望这两种方法都有效。
编辑1: 根据{{3}}回答的建议,我做了以下测试:
看来nginx没有收听端口80.为什么会这样?
答案 0 :(得分:0)
实现这一目标的方法很少。
您可以让您的节点应用程序在12.16.12.113:3000上而不是在localhost:3000上进行侦听,然后您只需要在端口80上使用nginx。
您可以让您的Node应用程序侦听localhost:3000(但仅限于localhost),然后通过nginx代理12.16.12.113:3000和端口80.
您可以让您的Node应用程序在任何界面上侦听localhost:4000或0.0.0.0:4000,并使用nginx将请求代理到端口80和3000.
但是你不能让它们同时听同一个端口和相同的接口而没有问题。
考虑到您没有包含Node应用程序如何绑定到端口的任何代码示例,这是唯一可以提供的建议,这将是此处唯一的相关信息。