react配置跨域,用nginx反向代理方式,nginx没有转发请求

开发环境:
前端react: localhost:3000
后端restful api:192.168.33.3:8080

浏览器可以正常访问后端restful api:

clipboard.png

react使用axios访问后端api:

    function fetchArticleList() {
        axios.get('/api/articles').then((response) => {
            return response.data;
        }).catch(function (error) {
            //...
        }).then(function () {
            //...
        });

    }

localhost机器上安装nginx,配置如下:

    server {
        listen       3000;
        server_name  localhost;


        location /api { 
            proxy_pass  http://192.168.33.3:8080/;    
        }  

        location /= {
            root html;
            index  index.htm  index.html;
        }

        location ~ \.(htm|html|js|css|jpg|png|gif|eot|svg|ttf|woff|woff2)$ {  
            root    html;     
        }    
                
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

问题:
在浏览器中访问localhost:3000/api/articles,出现如下错误:

clipboard.png

是哪里没有配置正确?

阅读 10.9k
5 个回答

你的react用什么启动的?没配合webpack,所以要用Nginx?

端口占用了,让其中一个换一个不就好了么?比如启动react的服务端口换成3001

Nginx是作为web服务器的,你在用crate-react-app启动的时候或者webpack,是使用node的web服务器,这两者肯定会发生冲突。代理,建议采用webpack-dev-server的proxy,具体使用可以百度,不需要额外借助Nginx。

首先应该明白一个问题,在比如vue或者react项目开发完成之后,不是把代码丢在服务器上面npm run start.应该是通过npm run build先把代码进行build,然后你就会发现多了一个build的文件夹,文件夹里面就是我们需要放在服务器上面的代码,把这个压缩过后的文件夹拖到服务器上面,假如你用nginx的话,那么就只需要配置静态文件就行,然后其他的配置和你一样,当然你哪里配置文件哪里/api后面还需要有一个/.
这是开发上线的步骤,如果你需要在本地开发的时候也去访问服务器资源,你只需要在package.json文件夹里面添加:

"proxy": "192.168.33.3:8080" // 你的后台接口地址
server {
        listen       3000;
        server_name  localhost;

        // /api后面少了一个/  试一下吧
        location /api/ { 
            proxy_pass  http://192.168.33.3:8080/;    
        }  

        location /= {
            root html;
            index  index.htm  index.html;
        }

        location ~ \.(htm|html|js|css|jpg|png|gif|eot|svg|ttf|woff|woff2)$ {  
            root    html;     
        }    
                
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题