Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

使用 Ngnix 给 Node.js 应用做反向代理 #14

Open
nodejh opened this issue Nov 22, 2016 · 0 comments
Open

使用 Ngnix 给 Node.js 应用做反向代理 #14

nodejh opened this issue Nov 22, 2016 · 0 comments

Comments

@nodejh
Copy link
Owner

nodejh commented Nov 22, 2016

一般来说使用 node.js 开发的 webapp 都不会是默认的80端口,以官方文档演示为例:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

该例子使用的是 3000 端口,需要像 localhost:3000 这样,域名(或IP)加上 :port 才能访问。而一般 Web 应用都是监听的 80 端口。而普通应用一般只能监听 1024 以上的端口号,监听 80 端口需要 root 权限。而且 node.js 监听了 80 端口后,像 nginx 这类 HTTP Server 就只能选择监听其他端口了。

所以一般不使用 node.js 直接监听 80 端口,而是通过 nginx 来做反向代理。

Nginx 的具体配置如下:


upstream nodejs {
    server 127.0.0.1:3000;
    keepalive 64;
}

server {
    listen 80;
    # server_name 后面是域名,这里以 www.domain.com 为例
    server_name www.domain.com;
    # 日志
    access_log /var/log/nginx/test.log;
    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_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass http://nodejs;
    }
}
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

1 participant