1 Star 5 Fork 2

姚文强/learn-nginx

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
nodejs-proxy.md 2.35 KB
一键复制 编辑 原始数据 按行查看 历史
xuexb 提交于 9年前 . add: 添加nodejs代理配置

配置nodejs反向代理

服务端如果使用nodejs运行服务,由于端口不能同时多个服务占用,而服务器中可能又是多个网站,那么可以使用nginx反向代理 ,比如有这些网站域名和端口:

域名 端口
www.xxoo.com 8001
www.xo.com 8002
www.xo.cn 8003

当然一个服务器上的网站可能还有更多,可以通过配置nginx转发来代理这些端口分发,如:

# 配置 www.xxoo.com的8001代码
server {
    server_name www.xxoo.com;
    listen 80;

    # 设置这个网站的根目录
    root /wwwroot/www.xxoo.com/;

    # 由于下面配置了文件不存在则代码到nodejs中,那么直接访问目录(不带默认主页)的话会有问题,这里做下判断
    # 如果访问目录下有index.html文件,则直接重写到该文件
    # break表示重写且停止,但url不变,而permanent表示301重定向,url会更新
    if ( -f $request_filename/index.html ){
        rewrite (.*) $1/index.html break;
    }

    # 如果请求的文件不存在,则代理到node
    if ( !-f $request_filename ){
        rewrite (.*) /index.js;
    }

    # 代理node服务 8001
    location = /index.js {
        # 设置一些代理的header信息,这些信息将被透传到nodejs服务的header信息里
        proxy_set_header Connection "";
        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_pass http://127.0.0.1:8001$request_uri;

        # 忽略其他重写
        proxy_redirect off;
    }
}

配置之后,比如你网站根目录里有index.html文件,访问url如:

访问链接 解析过程 备注
www.xxoo.com/index.html nginx 由于文件存在,直接使用nginx输出
www.xxoo.com nginx 由于判断该目录下有index.html文件,则自动重写到该文件,但url不变
www.xxoo.com/xx.html nginx -> nodejs:8001 由于文件不存在,使用nginx代理到nodejs的8001端口
www.xxoo.com/xxoo/ nginx -> nodejs:8001 首先判断该目录是否存在
如果存在再判断是否有index.html文件
一旦不成立,直接代理到node
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yaowenqiang/learn-nginx.git
git@gitee.com:yaowenqiang/learn-nginx.git
yaowenqiang
learn-nginx
learn-nginx
master

搜索帮助