最简单的做法
直接修改nginx配置,增加下面配置
server {
listen 80; # 监听80端口
server_name node.bluej.cn; # 监听的域名
#access_log /web/nodejs/access.log; #配置了一下来访日志,怕占用硬盘,关了
error_log /web/nodejs/error.log; #配置了一下错误日志
## 针对静态资源做优化,所有静态资源由nginx来处理,注意有新的类型记得加进来
location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js|doc|docx|xls|xlsx|zip|rar|mp3|mp4)$
{
root /web/nodejs; #指向根目录
expires max; #用来设置缓存时间
}
## node线程,只负责动态部分
location /{
proxy_pass http://127.0.0.1:8000; #反向代理,指向具体的node监听端口
proxy_redirect off; #关闭地址的重定向
# 在代理请求头中加入下面的信息,方便我们用nodejs获取一些客户端信息
proxy_set_header Host $host; #本机地址(ip或域名)
proxy_set_header X-Real-IP $remote_addr; #客户端真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#客户端真实ip
}
}
常见问题
- 访问页面超时
有可能是读取文件
fs.readFile
的路径出问题了,不同环境下,路径写法有所区别,正确的兼容写法应该是
否则,很容易请求超时,因为无法读取正确的文件路径var path = require("path");//引入path模块 path.join(__dirname, "../view/index.html");//参数一,表示你当前文件所在物理绝对路径,参数二就是你具体要访问的路径了
- nginx访问静态文件,老是报403 Forbidden
原因可能是 nginx没有访问目录的权限,在 nginx.conf 文件中,标注了
user www www;
,所以,咱们网站根目录所在的父文件夹的拥有者必须也是www用户,所以,记得设置一下你的目录拥有者chown www:www /web
- 如何设置我们的nodejs网站可以开机启动
如果你是用pm2
就会把你启动的网站信息存在 ~/.pm2/dump.pm2,例如 /root/.pm2/dump.pm2pm2 startup pm2 save
其它同类型产品一样道理
如何搞均衡负载
在配置里,在server段前面加上upstream段
upstream nodejs_upstream {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server{
...
location /{
proxy_pass http://nodejs_upstream
}
...
}
上面的配置意思是nginx会自动分配请求到多个ip端口地址中,实现均衡负载