node项目pm2线上部署 ,nginx 配置反向代理和图片上传

官方文档:http://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup

直接贴代码

upstream my_nodejs_upstream {
    server 127.0.0.1:3001;
}

server {
    listen 80;
    server_name my_nodejs_server;
    root /home/www/project_root;
    
    location / {
        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_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_max_temp_file_size 0;
        proxy_pass http://my_nodejs_upstream/;
        proxy_redirect off;
        proxy_read_timeout 240s;
    }
}

最后附上一份 完整的nginx 配置文件


#定义nginx运行的用户和用户组
user  git;
# nginx 进程数,建议设置为等于cpu总核心数
worker_processes  auto;

#全局错误日志定义类型
#error_log  logs/error.log; 
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


# 工作模式与连接数上限
events {
    #没个进程的最大连接数(最大连接数 = 连接数 * 进程数)
    worker_connections  2048;
    #时间处理机制(epoll)在系统内核2.6以上,高性能网络i/o 模型,并发数比较大,socket 连接比较多的web 服务器使用
    #epll 是最好的,如果跑在FreeBSD上边就用kqueue模型
    #参考时间模型,use[kqueue|rtsig|epoll|/dev/poll|select|poll]
    use epoll;
}


http {
    # 文件扩展名与文件类型映射表
    include       mime.types;
    # 默认文件类型
    default_type  application/octet-stream;
    # 默认编码
    charset utf-8;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    
    # 开启搞笑文件传输模式,sendfile 指令指定nginx 是否调用sendfile 函数来输出文件,对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可以设置为off,以平衡测判与网络I/O 处理速度,降低系统的负载
    # 注意如果图片显示不正常把这个改成off 
    sendfile        off;
    # 防止网络阻塞
    tcp_nopush     on;
    
    # 长链接超市时间,单位是秒	
    keepalive_timeout  65;
    # 隐藏 Nginx 版本号
    server_tokens off;
    # 开启gzip压缩输出,经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快更多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器压缩,传到浏览器后浏览器解压并解析.
    gzip  on;
    # 设置 允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取,默认值是0,不管页面多大都压缩,建议设置成大于1k的字节数,小于1k可能会越压越大。
    gzip_min_length 1k;
    # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k 代表以 16k 为单位,按照原始数据大小以 16k 为单位的4倍申请内存。
    gzip_buffers  16 64k;
    # 压缩版本(默认是1.1,前端如果是squid2.5请输入1.0)
    gzip_http_version 1.1;
    # gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。
    gzip_comp_level 5; 
    # 开启gzip压缩的MIME类型
    # gzip_types text/plain text/css application/javascript;
    gzip_types text/plain application/x-javascript text/css application/xml;
    # 和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的http头来判断,是否需要压缩
    gzip_vary on;
    
    # 允许客户端请求的最大单个文件字节数,它出现在请求头部的Content-Length 字段,(可以更改此参数达到限制用户上传文件大小的目的)
    client_max_body_size 10m;
    # 缓冲去代理缓冲客户端请求的最大字节数,可以理解为先保存到本地在传给用户,这个指令可以连接请求使用的缓冲区大小,默认值: 8k/16k 。如果客户端请求一个文件大于128k ,则nginx 会尝试在硬盘上创建临时文件,如果硬盘满了,则会报错
    client_body_buffer_size 10m;
    # 跟后端服务器连接的超时时间,发起握手等候响应超时时间
    proxy_connect_timeout 600s;
    # 连接成功,等候后端服务器的响应时间,其实已经进入后端的派对中等候处理。
    proxy_read_timeout 600s;
    # 后端服务器回传时间,就是在规定时间内后端服务器必须传完所有的数据,设置代理服务器转发请求的超时时间,同样指,完成两次握手后的时间,如果超过这个时间代理服务器没有数据转发到后端服务器,nginx讲关闭连接
    proxy_send_timeout 600s;
    # 代理请求缓存区,这个缓存区间会保存用户的头信息来提供nginx 进行规则处理,一般只要能保存下头信息即可。默认值 proxy_buffer_size 4k/8k。设置从后端服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头
    proxy_buffer_size 32k;
    # 设置用于读取应答(来自后端服务器)的缓冲区数目和大小,告诉nginx保存单个用的几个buffer,最大用多大空间
    proxy_buffers 4 32k;
    # 如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐 *2
    proxy_busy_buffers_size 64k;
    # 设置在写入proxy_temp_path时缓存临时文件数据的大小,在预防一个工作进程在传递文件时阻塞太长
    proxy_temp_file_write_size 64k;
    # 类似于http 核心模块中的client_body_temp_path 指令,指定一个目录来缓冲比较大的被代理请求
    proxy_temp_path /dev/shm/proxy_temp;

    server {
		listen       	80;
		server_name	baidu.com;  #这里可以写域名 或者是服务器ip
		#access_log logs/host.access.log  main;

		location / {
		 	root  	/home/www/demo/;
			index  	index.html index.htm;
			try_files $uri $uri/ /index.html;  #vue-router history 模式刷洗页面404 处理 
		}
		location ^~ /api/ {		   	
			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_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "upgrade";
			proxy_max_temp_file_size 0;
			proxy_pass http://127.0.0.1:3001; #要代理的地址
			proxy_redirect off;
			proxy_read_timeout 240s;
		}
		
		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
		  root   html;
		}	
    }
}

参考文章写的很好很全面
https://www.cnblogs.com/chyingp/p/pm2-documentation.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值