node.js - nginx 服务器将自定义端口上的请求转发到 Node 应用程序

标签 node.js ssl nginx reverse-proxy

我有一个运行 nginx 的 VPS 服务器,我还有一个在端口 8000 上运行的 Node 应用程序。nginx 服务器容纳我的 PHP 应用程序,并在默认的网络服务器端口上运行良好。

我有一个指向服务器 ip 的自定义域名。

我已经安装了 let's encrypt 来处理我的 https 流量,它适用于我的 php 应用程序。

我必须在端口 8080 上捕获 https 流量并将请求转发到端口 8000 上的 Node 应用。

我已经尝试了大多数 stackoverflow 的东西。我不知道我做错了什么。

下面是我的 nginx 服务器 block 的副本。

 server {
       listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/repairspots.org/fullchain.pem; # managed$
    ssl_certificate_key /etc/letsencrypt/live/repairspots.org/privkey.pem; # manag$
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    }




// i need to get this portion right

server {
  listen [::]:8080 ssl ipv6only=on; # managed by Certbot
  listen 8080 ssl;
  server_name 0.0.0.0;

  ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; # managed$
  ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; # manag$
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  error_page  497 https://0.0.0.0:8080$request_uri;

  # pass requests to port 8000 where our other node server is running
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://0.0.0.0:8000;
    proxy_ssl_session_reuse off;
    proxy_set_header Host $http_host;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
  }
}

最佳答案

我能够通过以下解决问题。

我创建了/etc/nginx/conf.d/proxy.conf 并粘贴了下面的服务器 block 。

server {
    listen 8080 ssl;
    listen [::]:8080 ssl ipv6only=on;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed$
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # manag$
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  error_page 497  https://$host:$server_port$request_uri;#enforces https redirect on http traffic

   location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_ssl_session_reuse off;
        proxy_set_header X-Forwarded-Ssl on; #needed incase redirects comes from http
        proxy_set_header X-NginX-Proxy true;
        rewrite ^/?(.*) /$1 break;
        proxy_pass http://127.0.0.1:8000; #node server
        proxy_redirect off;

    }


}

这是我以前根本没有做的一件事。您需要在您正在监听的端口上接受互联网流量。运行以下与端口号内联的命令。

sudo iptables -A INPUT -p tcp --dport 9000 -j ACCEPT

关于node.js - nginx 服务器将自定义端口上的请求转发到 Node 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51334571/

相关文章:

caching - g-wan - 再现性能声明

在 nginx 中将/foo.html重定向到/foo但不是/to/index

javascript - 有人可以对 socket.io "helloworld"等价物给出具体的评论和解释吗?

node.js - Typescript - 使用 Class-transformer 扁平化 JSON 模型

Apache 在 mod_jk 之前重写(删除 www)

ssl - 使用 Google Cloud Container 实现 HTTPS 的步骤是什么?

node.js - NestJS 拦截器 : Unable to set HTTP Headers on outgoing requests

node.js - 从 swift 容器下载时文件损坏

php - 用于接受银行路由和帐号的安全 Web 表单

Python、uWSGI、NGINX、FLASK 适用于 WiFi,不适用于蜂窝网络