我有一个运行 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/