Node.js 是通过监听端口启动服务来运行的,访问的时候需要带上端口,除非端口是 80。但一般情况下,是不会让 Node.js 占用 80 端口的。并且 Node.js 在处理静态资源情况时并没有太大的优势。
所以一般的处理方式是通过 Nginx 之类的 web server 来处理,静态资源请求直接让 Nginx 来处理,动态类的请求通过反向代理让 Node.js 来处理。这样也方便做负载均衡。
nginx 下的配置可以参考下面的方式:
server {
listen 80;
server_name www.thinkjs.org;
index index.js index.html index.htm;
root /Users/welefen/Develop/git/www.thinkjs.org/www;
if (-f $request_filename/index.html){rewrite (.*) $1/index.html break;
}
if (!-f $request_filename){rewrite (.*) /index.js;
}
location = /index.js {
#proxy_http_version 1.1;
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:6666$request_uri;
proxy_redirect off;
}
location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|ico|svg|cur|ttf|woff)$ {expires 1000d;}
}
需要改动 3 个地方:
server_name www.thinkjs.org
将 server_name 改为项目对应的域名root /Users/welefen/Develop/git/www.thinkjs.org/www
配置项目的根目录,一定要到 www 目录下proxy_pass http://127.0.0.1:6666$request_uri;
将端口 6666
改为项目里配置的端口配置反向代理后,我们可能就不希望通过端口能直接访问到 Node.js 服务了。那么可以在 App/Conf/config.js
设置如下的配置:
use_proxy: true, // 是否使用代理访问,如:nginx。开启后不能通过 ip+ 端口直接访问