node pm2 nginx 搭建

pm2 用来守护进程,提供了管理、保护、监控、负载均衡等功能,用于管理你的node在线应用。下面是对应操作命令:

#安装说明
npm install pm2 -g

#linux 需添加软连接
ln -s node地址/bin/pm2 /user/local/bin/pm2

#启动node服务
pm2 start app.js

#查看所有pm2服务
pm2 list

#暂停
pm2 stop pm2对应的id

#暂停所有
pm2 stop all

#重启
pm2 restart pm2对应的id
#重启所有
pm2 restart all

#监控
pm2 monit

#查看日志
pm2 logs

#清空日志
pm2 flush

#关闭移除对应服务
pm2 delete pm2对应的id
pm2 delete all

#重载
pm2 reload all

#杀死进程
pm2 kill

pm2还可以通过配置process文件对应用服务做出更加明确的配置:

{
  "apps": [
    {
      "name": "yjk-wechat-node",
      "cwd": "/var/node",
      "script": "app.js",
      "log_date_format": "YYYY-MM-DD HH:mm Z",
      "error_file": "log/error.log",
      "out_file": "log/out.log",
      "pid_file": "log/pid.log",
      "instances": "2",
      "min_uptime": "180s",
      "max_restarts": 12,
      "max_memory_restart": "500M",
      "cron_restart": "1 0 * * *",
      "watch": false,
      "merge_logs": true,
      "exec_interpreter": "node",
      "exec_mode": "cluster",
      "autorestart": true,
      "vizion": true
    }
  ]
}

说明:

  • apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
  • name:应用程序名称
  • cwd:应用程序所在的目录
  • script:应用程序的脚本路径
  • log_date_format:
  • error_file:自定义应用程序的错误日志文件
  • out_file:自定义应用程序日志文件
  • pid_file:自定义应用程序的pid文件
  • instances:负载均衡的实体个数,一般由你的服务器内核决定
  • min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
  • max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
  • cron_restart:定时启动,解决重启能解决的问题
  • watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
  • merge_logs: 
  • exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
  • exec_mode:应用程序启动模式,这里设置的是cluster(集群),默认是fork
  • autorestart:启用/禁用应用程序崩溃或退出时自动重启
  • vizion:启用/禁用vizion特性(版本控制)

面对各种疑难杂症:
1.pm2 start 出现启动的服务eroor
先查看自己是否install
确保代码没有任何问题,那一般是开的实体太多,进程无法分配,直接 pm2 kill

nginx安装,我用的是ubuntu14,快捷安装:

apt-get update

apt-get install nginx

到/etc/nginx/下面,修改nginx.conf文件。

http {
    #一些默认配置就不沾出来了
	include /etc/nginx/conf.d/*.conf;
	#include /etc/nginx/sites-enabled/*;注意这是屏蔽nginx的默认设置,其实你可以直接在这里做配置也行

	server {
		listen 80;

        #node服务费配置,我本想将node服务重定向到其他目录的,但是没有成功,其实不配置这个也能用,直接访问公网的ip加端口号就行
		location / {
			proxy_pass http://172.19.159.149:3000; #代理地址
			proxy_set_header X-Real-IP $remote_addr; #其中这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #我们先看看这里有个X-Forwarded-For变量,这是一个squid开发的,用于识别通过HTTP代理或负载平衡器原始IP一个连接到Web服务器的客户机地址的非rfc标准,如果有做X-Forwarded-For设置的话,每次经过proxy转发都会有记录,格式就是client1, proxy1, proxy2,以逗号隔开各个地址,由于他是非rfc标准,所以默认是没有的,需要强制添加,在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。也就是说在默认情况下我们使用request.getHeader("X-Forwarded-For")获取不到用户的ip,如果我们想要通过这个变量获得用户的ip
			proxy_set_header Host $http_host; #这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里。如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。
			proxy_set_header X-Nginx-Proxy true; 
			proxy_redirect off;
		}
        #这是我的vue前端项目,做一下域名重定向,因为多个客户访问一个应用,在根据地址做个性化
		location /cscvif {
			root html;
			proxy_pass http://172.19.159.149:8081/main;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			client_max_body_size  100m; #允许客户端请求的最大单文件字节数
			index  index.html index.htm;
		}
        #由于对vue项目做了域名重定向,原来的重定向就不能用了,所以对static文件单独做一个资源转发
		location /yjkstatic {
			proxy_pass  http://172.19.159.149:8081/;
		}
	}
    #通用vue前端项目配置
	server {
		listen 8081;

		location / {
			root /var/www/html/yjk-wechat-vuepro/dist;
			try_files $uri $uri/ @router; #需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
			index index.html index.htm;
		}
		#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
		#因此需要rewrite到index.html中,然后交给路由在处理请求资源
		location @router {
			rewrite ^.*$ /index.html last;
		}
	}
}

配置完然后启动nginx

#启动
service nginx start

#停止
service nginx stop

#重启
service nginx restart

#重载
service nginx reload

#判断nginx配置文件是否异常
nginx -t

猜你喜欢

转载自blog.csdn.net/sjpeter/article/details/93753965
今日推荐