最简单的做法
直接修改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 startuppm2 save 复制代码
就会把你启动的网站信息存在 ~/.pm2/dump.pm2,例如 /root/.pm2/dump.pm2 其它同类型产品一样道理
如何搞均衡负载
在配置里,在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端口地址中,实现均衡负载