如何在443上运行nodejs服务器,确保nginx不会停止工作

时间:2017-03-13 15:14:29

标签: node.js nginx

我的Nginx默认文件如下所示:

server {
       listen  80;
       server_name humanfox.com www.humanfox.com;
       rewrite  ^/(.*)$ https://www.humanfox.com$1 permanent;
}


server {
        listen 443 ssl spdy;
        server_name humanfox.com www.humanfox.com;
        ssl on;
        ssl_certificate /root/ca3/www.humanfox.com.crt;
        ssl_certificate_key /root/ca3/humanfox.com.key;
        access_log  /var/log/nginx/humanfox.com.access.log;
        error_log   /var/log/nginx/humanfox.com.error.log;
        rewrite     ^/(.*)$ https://www.humanfox.com$1 permanent;
}

现在,Nginx运行正常但是当我尝试在端口443(https)上运行我的nodejs服务器时,它说EADDR已经在使用中。 当我杀死端口以使用我的nodejs服务器时,它也会杀死Nginx并且Nginx停止工作。

如何在443上运行我的nodejs服务器,确保nginx不会关闭。

2 个答案:

答案 0 :(得分:1)

您无法在端口443和nginx上运行nodejs同时为ssl(443)提供服务。您可以通过将nginx配置为nodejs的反向代理来完成此操作。

假设您在端口3000中运行nodejs。

const http = require('http');
http.createServer((req,res) => {
  res.writeHead(200, {"Content-Type":"plain/html"});
  res.end('Node is Running');
}).listen(3000);

你的nginx配置应该是:

server {
    listen 443 ssl spdy;

    server_name humanfox.com www.humanfox.com;
    ssl on;
    ssl_certificate /root/ca3/www.humanfox.com.crt;
    ssl_certificate_key /root/ca3/humanfox.com.key;
    access_log  /var/log/nginx/humanfox.com.access.log;
    error_log   /var/log/nginx/humanfox.com.error.log;

    location / {
        proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:3000;
        proxy_redirect off;
    }
}

希望它有所帮助。

答案 1 :(得分:0)

您将无法收听nginx已在侦听的同一端口。

您可以做的是侦听某个不同的端口并将nginx配置为反向代理以连接到您的节点进程。从外部用户的角度来看,它看起来就像你想要的那样 - 节点应用程序可以通过443端口访问 - 但不存在端口冲突。

有关如何执行此操作的示例,请参阅此答案: