vue部署docker下的nginx刷新404问题及解决方案

环境描述

本次环境是通过jenkins编译npm run build 或者UMI_ENV=dev umi build 生成dist目录通过Dockerfile build一个新镜像上传私服通过swarm集群service运行镜像,使用与swarm一个net下的nginx代理访问的。

[[email protected] DEV-sk_platform_brand_common]# cat Dockerfile
FROM basic-registry.xxxx.com/skong/nginx
###继承自centos镜像

MAINTAINER waitfish from litx_sean
####创建者信息

COPY publish/ /data/web/
COPY web.conf /data/conf/
COPY run.sh /run.sh

RUN chmod u+x /run.sh
########
########
[[email protected] DEV-sk_platform_brand_common]# cat web.conf
server {
listen 80;
server_name 127.0.0.1;
index index.html;
root /data/web;
access_log logs/web.log;

    location / {
         try_files $uri $uri/ @router;
         index index.html;
     }

    location @router {
        rewrite ^.*$ /index.html last;
    }

}
########
########
[[email protected] DEV-sk_platform_brand_common]# cat run.sh
#!/bin/bash
source /etc/profile
if [ -n "$ENV" ]
then
sed -i s/^global.serverCd.*/"global.serverCd = ‘$ENV‘"/g /data/web/config.js
fi
/data/nginx/sbin/nginx && tail -f /data/nginx/logs/error.log
[[email protected] DEV-sk_platform_brand_common]#

########
#
#
docker build -t registry.xxxx.com/sk_platform_brand_common_dev:master .
#
#
docker service create --name sk_platform_brand_common_dev --hostname sk_platform_brand_common_dev --network sk-net registry.xxxx.com/sk_platform_brand_common_dev:masterr
#
#

########
swarm集群对外开放的nginx配置

server {
listen 80;
server_name dev-brand2.xxxx.com;
location / {
proxy_pass http://sk_platform_brand_common_dev;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log logs/sk_platform_brand_common_dev.log;
}
#
#
docker restart nginx``

1.问题:

使用Vue.js框架,利用vue-route结合webpack编写了一个单页路由项目,运维协助在服务器端配置nginx。部署完成后,访问首页没问题,从首页里打开二级页面没问题,但是所有的二级页面打开后,再次刷新,就会出现404现象。

2.原因:

刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径。如上的404现象,是因为在nginx配置的根目录/Data/app/xqsj_wx/dist下面压根没有loading这个真实资源存在,这些访问资源都是在js里渲染的。
服务端nginx的一开始配置如下(假设域名为:flymoth.com):
server {
listen 80;
server_name 127.0.0.1;
index index.html;
root /data/web;
access_log logs/web.log;

如上出现404的原因是由于在这个域名根目录/Data/app/xqsj_wx/dist下面压根就没有loading这个真实目录存在。

3.解决方案

在nginx配置里添加vue-route的跳转设置(这里首页是index.html,如果是index.php就在下面对应位置替换),正确配置如下:
server {
listen 80;
server_name 127.0.0.1;
index index.html;
root /data/web;
access_log logs/web.log;

            //以下为新添加的

    location / {
         try_files $uri $uri/ @router;
         index index.html;
     }

    location @router {
        rewrite ^.*$ /index.html last;
    }

}

原文地址:http://blog.51cto.com/13386520/2331631

时间: 2024-07-29 18:06:51

vue部署docker下的nginx刷新404问题及解决方案的相关文章

宝塔服务器配置nginx刷新404的问题汇总

我们在本地使用vue测试和切换页面没有任何问题.于是打包好文件并上传到服务器,页面可以正常打开,但是一刷新就会出现页面404,这种情况我们该怎么办呢? 首先分析问题 这种原因多数情况是因为vue中的router模式设置为history模式,页面url切换的跟随着路由切换, 但刷新时浏览器并不知道你的网页输入的参数地址是想要访问什么,并没有找到你想要访问的文件目录,所以会报错404: 分析清楚问题之后我们应该怎么办呢? 一.切换hash模式 直接在进入route路由请求也,把route模式改为ha

docker下PHP+Nginx+HHVM运行环境

Dockerfile 准备开始,我们创建一个 Dockerfile —— Dockerfile 包含如何创建所需镜像的指令. FROM    centos:centos6MAINTAINER Mike Ebinum, [email protected] 使用 Cent OS 6.x 告知 Docker 使用官方社区最新版本的 CentOS 6.x 可用镜像. 更新镜像 安装所有最新版本的包更新,并且把 Red Hat EPEL 的仓库加入可用的仓库列表. RUN yum update -y >/

部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)

部署spring boot + Vue遇到的坑(权限.刷新404.跨域.内存) 项目背景是采用前后端分离,前端使用vue,后端使用springboot. 工具 工欲善其事必先利其器,我们先找一个操作Linux系统的工具极力推荐FinalShell. 一眼看过去是不是感觉很方便,对内存.CPU的监控也可以实时看到,访问目录更是方便,对于Linux小白来说简直是神兵利器. 好了,我要开始入坑了. 问题一:权限不够 把vue包放到tomcat->webapps->ROOT目录下. 启动tomcat:

在Docker下部署Nginx

在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_pass将HTTP请求反向代理到nodejs Web App 设置HTTPS 如果你还没有安装Docker环境,可参考在Docker中运行Node.js的Web应用. 最简单的命令,让Nginx跑起来 命令如下: 1 $ sudo docker run -it -p 80:80 dockerfile/

Centos 7部署docker+nginx+keepalived实现高可用web集群

一.体系架构 在Keepalived + Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务器可以瞬间将VIP自动切换过来,实际运行中体验只有2秒钟切换时间,DNS服务可以负责前端VIP的负载均衡.nginx负责控制后端web服务器的负载均衡,将客户端的请求按照一定的算法转发给后端Real Server处理,而Real Server将响应直接返回给客户端. 二.简单原理 NG

Vue路由History模式打包后页面空白,刷新404

项目的入口文件index.html直接在服务器访问地址的根目录下,即项目独占一个端口 vue中配置保持不变 nginx中配置如下: server { listen 8899; server_name localhost; location / { try_files $uri $uri/ /index.html; } } 第二种就是 # 打包配置 config-index.js 修改路径: assetsPublicPath: './'; # 前端路由配置 router.js: const rou

Docker + node(koa) + nginx + mysql 线上环境部署

在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建

Linux下部署docker记录(1)-Volume使用

之前部署了Linux下部署docker记录(0)-基础环境安装,接下来看看Docker Volume的使用. Docker volume使用1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享.数据卷可以在多个容器之间共享.2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过--volumes-froms参数来挂载该数

Ubuntu 16.04下配置nginx与nodejs以及服务的部署

title: Ubuntu 16.04下配置nginx与nodejs以及服务的部署 date: 2019-05-05 22:45:49 tags: Linux --- 第一步:安装nginx sudo apt-get update sudo apt-get install nginx 如果遇到依赖问题,尝试执行sudo apt-get -f install命令 第二步:配置nginx 首先备份原先的配置文件:sudo cp /etc/nginx/sites-available/default /