Node.js 使用NGINX将端口80转发到8080
我正在debian服务器上使用LEMP堆栈和节点JS。Nginx在端口80上工作,节点JS在8080上工作。我为nodejs应用程序创建了新的子域:cdn.domain.com。目前我只能像cdn.domain.com:8080/一样访问NodeJS应用程序。我想做的是配置Nginx,这样,当我进入cdn.domain.com时,我可以让应用程序在端口80上工作。我认为可以使用nginx上游实现。但我不知道怎么做 NGINX通过允许在客户端和后端服务器之间设置隧道来支持WebSockets。为了让NGINX将升级请求从客户端发送到后端服务器,必须显式设置升级和连接头。例如:Node.js 使用NGINX将端口80转发到8080,node.js,nginx,proxy,debian,Node.js,Nginx,Proxy,Debian,我正在debian服务器上使用LEMP堆栈和节点JS。Nginx在端口80上工作,节点JS在8080上工作。我为nodejs应用程序创建了新的子域:cdn.domain.com。目前我只能像cdn.domain.com:8080/一样访问NodeJS应用程序。我想做的是配置Nginx,这样,当我进入cdn.domain.com时,我可以让应用程序在端口80上工作。我认为可以使用nginx上游实现。但我不知道怎么做 NGINX通过允许在客户端和后端服务器之间设置隧道来支持WebSockets。为了
# WebSocket proxying
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
# The host name to respond to
server_name cdn.domain.com;
location / {
# Backend nodejs server
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
资料来源:这就是你如何做到这一点的方法
upstream {
nodeapp 127.0.0.1:8080;
}
server {
listen 80;
# The host name to respond to
server_name cdn.domain.com;
location /(.*) {
proxy_pass http://nodeapp/$1$is_args$args;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Real-Port $server_port;
proxy_set_header X-Real-Scheme $scheme;
}
}
您还可以使用此配置在多个节点进程之间实现负载平衡,如下所示:
upstream {
nodeapp 127.0.0.1:8081;
nodeapp 127.0.0.1:8082;
nodeapp 127.0.0.1:8083;
}
在不同的进程中,在端口8081、8082和8083上运行节点服务器。Nginx可以轻松地在这些服务器进程之间实现流量负载平衡。您可以定义一个上游并在代理过程中使用它 简单的是:
server {
listen 80;
server_name p3000;
location / {
proxy_pass http://0.0.0.0:3000;
include /etc/nginx/proxy_params;
}
}
就这么简单, 确保将example.com更改为您的域(或IP),将8080更改为您的Node.js应用程序端口:
server {
listen 80;
server_name example.com;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8080";
}
}
来源:在
sudo vi/etc/nginx/sites available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _ your_domain;
location /health {
access_log off;
return 200 "healthy\n";
}
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
这对我很有用:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
如果它对您不起作用,请查看sudotail-f/var/log/nginx/error.log上的日志问题不在于websocket,而在于HTTP。看起来上游在最新的nginx(如1.4.6)中不起作用。我认为语法不同:上游名称{server…}请详细说明您的答案。用户应该能够理解您的建议,而无需遵循将来可能不起作用的场外链接。请投票支持包含显然要使用的
/etc/nginx/proxy_params
。您可以使用cdn.domain.com
而不是p3000
来更清楚地回答这个问题。但这在我的情况下效果很好,我想知道为什么所有其他答案都建议使用上游(现在必须检查一下…)。嗨,有了这个解决方案,我是否需要将端口8080打开到外部,或者端口80打开就足够了。感谢您无需打开端口8080或任何其他端口。只开80度就够了,成功了
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}