项目部署到nginx的html子目录下,无法加载静态资源,一直显示空白页面
vue项目部署到nginx的html目录下子路径,在nginx配置好子路径后,使用子路径一直无法放到到静态资源,本文中nginx的配置都是在监听80端口下
#nginx配置监听80端口的部分配置
server {
listen 80;
server_name localhost;
#charset koi8-r;
client_max_body_size 1024M;
charset utf-8;
#access_log logs/host.access.log main;
location /gz/ {
root html;
index index.html index.htm;
}
location /prod/ {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/;
}
}
使用ip地址加gz路径:http:127.0.0.1/gz,进入后一直打开的是空白页面,无法加载静态资源,打开F12发现无法访问是因为静态资源都在http://127.0.0.1/static下了,但是配置的项目路径是gz,导致很奇怪,无法自动加载在gz目录下。
别急!!!!再看看
打开vue的vue.config.js文件,发现打开时,有个加载静态资源路径是:
# 原先的版本
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
修改成:指定在加载静态资源的路径
publicPath: process.env.NODE_ENV === "production" ? "/gz/" : "/",
当然前端大佬可以配置成,自动根据nginx的配置加载到gz目录下,目前没研究出来,先写死吧
配置好,肯定得打包部署下测试环境,发现可以加载静态资源,但是由于未登录访问的路径,被重定向会到127.0.0.1/login页面了。因为之前在nginx的html目录下已经存放过项目,所以被自动重定向回到了html内的项目,这个项目不是部署到gz目录下,所以肯定还有那个地方需要修改。这里应该跟vue的路由有关。。对就是路由,需要vue访问的路径携带有#
vue项目访问携带有#
在路由router.js中将history给去掉,参考如下:其他项目可能有所不同
export default new Router({
//mode: 'history', // 去掉url中的 #
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes
})
再来试试。。。。。。。。。。。
部署到gz目录下,部署完成,开始访问,结果发现登录成功,静态资源正确加载
http://120.0.0.1/gz/#/login
之后项目的访问都是在http://120.0.0.1/gz/#下进行访问,到目前为止vue项目部署到nginx的html目录下子路径,在nginx配置好子路径后,使用子路径一直无法放到到静态资源的问题已经搞定。
nginx跨域配置
# 跨域配置放到上面的监听80的server{}中
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root html;
expires 30d;
}
location ~ .*\.(js|css)?$ {
root html;
expires 12h;
}
验证是否成功
在vue项目中页面写几个标识符号,然后登录页面进入对应页面是否存在标识符号,如果存在说明是成功。。。。