前一阵子我尝试过使用 IIS 托管 nodejs 程序, 为的是解决 nodejs 的进程持久化, 带来的另一个问题是在外网访问速度不理想, 于是决定使用 nginx
下面讲的一切都是在 windows 上进行的, linux 可能有差异
准备工作:
1. 准备好 nginx 程序 下载 http://nginx.org/en/download.html
2. 检查当前主机上的 80 端口与预备域名是否有绑定, 有就解除
3. 安装 node 模块 forever "npm install forever -g"
准备好 nginx 程序后, 找到主要的配置文件, 比如 nginx.conf
修改关键几项配置
在 http 节点中, 加入
javascript 代码
- server {
- listen 80;
server_name 域名;
- location / {
- proxy_pass http:// 局域网地址;
- }
- }
这是添加一个局域网站点的代理
如果主域名下还有子域名站点
上述配置再加一遍, 对应子域名稍作调整
例如
javascript 代码
- server {
- listen 80;
server_name 子域名. 主域名;
- location / {
- proxy_pass http:// 局域网地址 2;
- }
- }
既然咱是用 nginx 托管 nodejs 站点, 那么有必要进行一些优化
1. 让静态资源的请求不经过 nodejs 站点
在 server 节点中加入
javascript 代码
location ~ ^/(images/|img/|scripts/|javascript/|js/|CSS/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
root node 站点的静态资源目录;
- access_log off;
- expires max;
- }
2. 记录访问日志
在 server 节点中加入
javascript 代码
access_log logs / 日志文件名. log;
3. 让 nodejs 站点能正确获取请求 ip
在 location 节点中加入
javascript 代码
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header REMOTE-HOST $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
此时 nodejs 站点程序获取 ip 的方式就要变一下, 从 header 中取 X-Real-IP 或 REMOTE-HOST
4. 持久化 nodejs 站点进程
使用 node 的 forever 模块启动 node 程序
例如: forever app.js
注意 forever 启动期间不要关闭, forever 是为了让 nodejs 程序更新或崩溃时自动重启进程
nginx 配置好后, 启动 nodejs 站点, 启动 nginx 程序, 在浏览器输入域名试试看!
其它注意事项
1.nginx 配置文件的所有节点缩进使用制表符, 如果你是直接从网站粘贴过去要调整空格符
2. 配置文件中的注释使用 "#" 标记
来源: http://www.qdfuns.com/article/19084/b9f19f485357a3d80a256ed921c11b8f.html