nginx配置vue前端代理

背景:做一个前后端分离的项目,使用vue-cli创建的前端项目,在前端配置跨域请求。
一、开发阶段
在vue.config.js中配置devserver的proxy进行代理请求配置,然后将所有请求改为/api开头的即可。但是这样配置只在开发阶段起作用。所以在nginx上部署的时候,需要再重新配置请求代理。
vue.config.js中代码配置如下:

// 相当于webpack-dev-server,对本地服务器进行配置 
    devServer: {
        port:8089, // 启动端口
        open:true,  // 启动后是否自动打开网页
        proxy: {
            "/api": {
                target: "http://192.168.xx.xx:8083", // 如果访问/api就在其前面加target
                changeOrigin: true, // 跨域
                pathRewrite: {
                    "^/api": '' //再把访问路径中的/api替换掉
                }
            }
        }
    },

二、nginx配置代理
因为第一次自己配置nginx(之前都是打包交给后端配置),所以在网上搜索方案,大致一看很简单。于是在nginx.config中做了如下配置:

server {
        listen       8001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
		
		location /api {
            proxy_pass http://192.168.xx.xxx:8083;
        }

大致一看是没有问题。可是,请求后端接口发送会报404错误。结果百思不得其解,只能百度百度再百度。最后,在 /api 和其代理的路径后面加上一个 / 就好了。虽然说的轻松,但是,在自己试的时候,真的是有点难受。配置文件,不要放过哪怕一个斜杠。
正确配置如下:

    server {
        listen       8001;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
		
		location /api/ {
            proxy_pass http://192.168.31.126:8083/;
        }

三、解决刷新浏览器问题。
配置完上述配置后发现,点击浏览器刷新按钮,会出现无法404页面,无法返回原网页的问题。如图:
在这里插入图片描述
需要进行如下配置:

location / {
            root   html;
            index  index.html index.htm;
			
			# 方便界面文件路径查找
			try_files $uri $uri/ @router; 
            index  index.html ;
        }
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
     location @router {
         rewrite ^.*$ /index.html break;
     }

四、匹配文件路径
1.如果vue-router使用hash模式,则可以在vue.config.js中设置publicPath 为空字符串 (’’) 或是相对路径 (’./’),这样所有的资源都会被链接为相对路径,这样打出来的包可以被部署在任意路径。
2.如果使用history模式,在生产环境静态资源(打包成chunk的js和css)都链接为 '/'绝对路径,此时直接点击index.html找不到资源,需要使用nginx配合。

location / {
            root   html;
            index  index.html index.htm;
			
			# 方便界面文件路径查找
			try_files $uri $uri/ @router; 
            index  index.html ;
        }

其实此时的配置没起作用,因为资源默认在服务器的根目录下。但是当nginx代理多个服务,且html中的文件结构相对复杂的时候需要进行try_files的相对配置。
五、注意
尽管你配置代理了,但是network中显示的始终是配置之前的路由地址(一般是localhost)。所以很容易会误导新手!不过只要下功夫分析,没有处理不了的问题。

PS:vue项目中引入静态资源文件(如打印机的配置文件.lbx),应该放在public目录下的static文件夹下。打包后,也会出现在输出文件夹(dist)中的static文件夹下(默认的,可以使用webpack来配置)。代码中使用location.origin拼接static文件夹下路径,即可引入

配置nginx代理vue前端项目,你可以按照以下步骤进行操作: 1. 首先,你需要从nginx的官网(https://nginx.org/download/)下载nginx软件。 2. 下载并安装nginx后,进入nginx配置文件目录(通常是在/etc/nginx/或/usr/local/nginx/conf/下),找到nginx.conf文件,使用文本编辑器打开该文件。 3. 在nginx.conf文件中,你可以找到一个名为"server"的块,这是nginx的虚拟主机配置。在这个块中,你可以添加一个新的location来代理vue前端项目。 4. 假设你的vue项目已经打包成静态文件,并且存放在"/var/www/vue"目录下。你可以在nginx.conf文件的"server"块中添加以下配置: ``` location / { root /var/www/vue; index index.html; try_files $uri $uri/ /index.html; } ``` 这段配置告诉nginx将所有的请求都代理到/var/www/vue目录下,并尝试查找匹配的文件,如果找不到则返回index.html文件。 5. 保存并退出nginx.conf文件。然后,重新启动nginx服务以使配置生效。 ``` sudo service nginx restart ``` 现在,你的nginx已经配置好了代理vue前端项目的设置。 请注意,以上步骤假设你已经将vue项目打包成静态文件,并将其放置在指定的目录下。如果你的项目还需要与后端服务器进行通信,你还需要配置nginx的反向代理。具体的配置取决于你的项目需求和后端服务器的配置。 希望这个回答能够帮到你,如果还有其他问题,请随时询问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值