React 打包部署服务器踩坑记录

公司项目前端开发用的是React,所以自己一直在本地测试开发,最后终于开始打包上线了

项目中用axios封装了工具类来请求,自动匹配开发和测试api

if (process.env.NODE_ENV === 'development') {
      axiosIns.defaults.baseURL = '/dapi';
} else if (process.env.NODE_ENV === 'debug') {
    axiosIns.defaults.baseURL = '/dapi';
} else if (process.env.NODE_ENV === 'production') {
    axiosIns.defaults.baseURL = '/papi';
}

package.json中配置代理转发处理,访问后台接口

  "proxy": {
    "/dapi": {
      "target": "http://localhost:7***",
      "pathRewrite": {
        "^/dapi": ""
      },
      "changeOrigin": true
    },
    "/papi": {
      "target": "http://118.***.**.1**:7***",
      "pathRewrite": {
        "^/papi": ""
      },
      "changeOrigin": true
    }
  },

打包 build    npm run build  目录如下:

打包后,本地先自测

于是  serve -s build       serve -h   

访问 http://localhost:5000 没问题

服务器部署

普遍做法是用nginx 或者tomcat,当然其他的比如jetty也可以,本文常规采用nginx来部署

把打包后的build文件夹,放到服务器上的对应目录下,

修改nignx.conf 或者另外新建conf文件,include进去也行,

 server {
           listen       80;
           server_name  ma****.**.cn;
   
           access_log  logs/svi.access.log;
   
          location / {
              root   /opt/***/html/build;
              index  index.html index.htm;
          }
 
 
         location ~ /papi/ {
              proxy_pass   http://******:7***9;
            }
  
  
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          }
      }

测试nginx    ./nginx -t 没问题, ./nginx -s reload 重新启动ngxin

然后浏览器访问登录没反应,F12查看请求的详情

http://m*****ds.cn/papi/login 404 

既然能请求道后台接口,说明请求时通了,继续排查

后台登录路径为 /login    /pai/login 肯定404, 说明nginx转发没有替换路径。

nginx 代理知识充电:

proxy_pass 的路径,如果不带uri的话,就是直接原路径代理匹配,带有uri的话,就去掉匹配项再匹配,

实例如下:

    (1)
     访问 http://www.test.com/testa/aaaa
     后端的request_uri为: /testa/aaaa
    location ^~ /testa/ {
        proxy_pass http://127.0.0.1:8801;
    }
    
    (2)
     访问 http://www.test.com/testb/bbbb
     后端的request_uri为: /bbbb
    location ^~ /testb/ {
        proxy_pass http://127.0.0.1:8801/;
    }

于是修改nginx配置,

proxy_pass   http://******:7***9;  
改成    proxy_pass   http://******:7***9/;

重启nginx,提示如下:

“proxy_pass” cannot have URI part in location given by regular expression,
 or inside named location, or inside “if” statement, or inside “limit_except” block

nginx知识充电:proxy_pass指令不能包含URI,相关情况分别是:正则表达式location;命名location;if;limit_except。

检查 location 配置,

 #这里用了~来匹配,所以不能加uri 
 location ~ /papi/ {
    proxy_pass   http://******:7***9;
 }
 #修改如下:
 location ^~ /papi/ {
    proxy_pass   http://******:7***9/;
 }

继续重启nginx, 没问题,访问登录页面  进入主页面,终于部署完成

 


            

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值