目前前端项目 可分两种: 多页面应用,单页面应用。

单页面应用 入口是一个html文件,页面路由由js控制,动态往html页面插入DOM。

多页面应用 是由多个html文件组成,浏览器访问的是对应服务器的html文件。

多页面应用

目录结构

.
├── README.md
├── html
├── index.html
└── project.html
└── img
└── bg.jpg

上面这种情况 index.html 不在根目录下,nginx.conf 需要配置更加准确。

nginx配置

先来看一个有问题的nginx配置,因为做了太多的资源适配,会导致页面内资源访问或页面跳转有问题。

有问题的nginx配置

server {
listen 443 ssl;
server_name www.whosmeya.com;
ssl on;
ssl_certificate 1_www.whosmeya.com_bundle.crt;
ssl_certificate_key 2_www.whosmeya.com.key; location / {
root /root/libs/landing-page/;
try_files $uri $uri/index.html $uri.html @fallback;
} location @fallback {
root /root/libs/landing-page/;
rewrite .* /html/index.html break;
}
}

问题解析:

如果路径正确,没问题。

如果路径错误,会将资源定位到/html/index.html,且路径不跳转。

问题是如果/html/index.html用了相对路径获取资源或跳转,就会获取不到或跳转不过去。

例如:

访问 https://www.whosmeya.com/a/b 也能定位到资源 /html/index.html

页面内有个a链接 href="./project.html", 愿意是跳转/html/project.html,但在https://www.whosmeya.com/a/b下,会被跳转到https://www.whosmeya.com/a/project.html,然后没有对应资源,也会被定位到 /html/index.html

调整后的nginx配置

针对上面问题,需要针对多页面应用对nginx配置做修改:

server {
listen 443 ssl;
server_name www.whosmeya.com;
ssl on;
ssl_certificate 1_www.whosmeya.com_bundle.crt;
ssl_certificate_key 2_www.whosmeya.com.key; location / {
root /root/libs/landing-page/;
try_files $uri $uri.html @fallback;
} location @fallback {
root /root/libs/landing-page/;
rewrite .* /html/index.html redirect;
}
}

改动点

try_files $uri $uri/index.html $uri.html @fallback; -> try_files $uri $uri.html @fallback;

rewrite .* /html/index.html break; -> rewrite .* /html/index.html redirect;

这样会 直接找 $uri 或者 $uri.html, 找不到会重定向到 首页/html/index.html

补充:

rewrite最后一项参数

参数 说明
last 本条规则匹配完成后继续向下匹配新的location URI规则
break 本条规则匹配完成后终止,不在匹配任何规则
redirect 返回302临时重定向
permanent 返回301永久重定向

单页面应用

目录结构

.
├── asset-manifest.json
├── favicon.ico
├── index.html
├── manifest.json
├── precache-manifest.e641bb60bd40b24c7a13e1d60c2a5baa.js
├── service-worker.js
└── static
├── css
│   ├── main.2cce8147.chunk.css
│   └── main.2cce8147.chunk.css.map
├── js
│   ├── 2.b41502e9.chunk.js
│   ├── 2.b41502e9.chunk.js.map
│   ├── main.05bebd98.chunk.js
│   ├── main.05bebd98.chunk.js.map
│   ├── runtime~main.a8a9905a.js
│   └── runtime~main.a8a9905a.js.map
└── media
└── logo.5d5d9eef.svg

nginx配置

server {
listen 80;
server_name react.whosmeya.com; location / {
root /root/libs/whosmeya-react/;
try_files $uri @fallback;
} location @fallback {
root /root/libs/whosmeya-react/;
rewrite .* /index.html break;
}
}

单页面应用 配置思路是:

服务器收到的所有访问,能访问到就返回资源,访问不到就返回index.html。

fallback必须要设置,不然刷新页面会404。

rewrite要使用break,不需要redirect路由重定向,因为访问资源都是基于根目录 / 。

Nginx配置Web项目(多页面应用,单页面应用)的更多相关文章

  1. IDEA如何创建及配置Web项目(多图)

    正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...

  2. linux nginx配置新项目加域名(设置绑定域名)

    转自:linux nginx配置新项目加域名 找到nginx的配置文件 nginx/nginx.conf 第一种方,法直接在nginx.com里面配置 user www www; worker_pro ...

  3. 【Java Web】IDEA如何创建及配置Web项目(多图)

    正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...

  4. Maven web项目(简单的表单提交) 搭建(eclipse)

    我们将会搭建一个,基于Maven管理的,具有简单的表单提交功能的web项目,使用DAO--service--WEB三层结构,服务器使用Tomcat 1 项目基本结构的搭建 左上角File---> ...

  5. 02 eclipse中配置Web项目(含eclipse基本配置和Tomcat的配置)

    eclipse搭建web项目 一.Eclipse基本配置 找到首选项: (一)配置编码 (二)配置字体 (三)配置jdk (四)配置Tomcat 二.Tomcat配置 三.切换视图,检查Tomcat ...

  6. nginx配置vue项目部署访问无问题,刷新出现404问题

    现象: 在浏览器中直接访问www.test.com/api1/login会404.但如果你先访问www.test.com后再点“登录" 跳转到www.test.com/api1/login是 ...

  7. react_app 项目开发 (3)_单页面设计_react-router4

    (web) 利用 react-router4 实现 单页面 开发 SPA 应用 ---- (Single Page Web Application) 整个应用只有 一个完整的页面 单击链接不会刷新页面 ...

  8. idea配置web项目启动的详细说明

    每次用完一个编辑器以后 ,再换另一个编辑器使用 过段时间再回来使用idea,总是会忘记些什么  ,毕竟每个编辑器的风格和结构都有所区别 特此记下笔记   方便以后查看 图片文字看不清的   请在图片上 ...

  9. 修改tomcat的server.xml配置web项目

    <!-- VideoWeb:自己编写的web项目名 path:表示当输入访问项目.. 如果path="" URL=localhost:8080就可以访问项目了 如果path= ...

随机推荐

  1. Eclipse中项目过大引起的 IDE 加载缓慢,JVM 内存不足的情况解决

    如果 IDE 加载项目非常缓慢,甚至常常出现卡死的情况,有可能是开发工具设置的 JVM 内存不够引起的.解决办法:找到 Eclipse 的安装目录,修改 Eclipse.ini 配置文件.修改此配置文 ...

  2. LeetCode Day 2

    LeetCode0004 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...

  3. Qt static关键字全局变量

    创建全局变量.h文件 globalvariable.h #ifndef GLOBALVARIABLE_H #define GLOBALVARIABLE_H #include <QImage> ...

  4. 使用jxl操作之一: 实现对Excel简单读写操作

    项目目录树 对象类UserObject UserObject.java package com.dlab.jxl; public class UserObject { private String u ...

  5. 德国、日本的制造业为什么不能完全执行SOP?

    在过去几十年,德国.日本的制造企业简直就是"以质取胜"的代名词,一些制造业的CEO非常自豪,甚至在公开场合调侃:大家好,我就是"保质保量"本人,也正因如此,德国 ...

  6. python3多进程爬虫(第二卷)

    上卷中讲到,我有4个进程,可是我要同时爬取20+数据怎么办,很明显上卷的语法公式不可以,所以现在我引入线程池 现在看一下线程池的语法 看一下爬虫: 注意圈中重点

  7. byte的取值范围是-128~127,那么包含-128和127吗?

    本帖最后由 王德升老师 于 2019-12-27 17:56 编辑 byte的取值范围为什么是-128~127?如果面试官问你取值范围包含127吗?1. 首先我们知道Java中byte类型是1个字节占 ...

  8. 仿射密码Python实现

    算法分析 仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合. 仿射密码的加密算法就是一个线性变化,即对明文字符x,对应的密文字符为y=ax+b(mod26)其中,a, b属于Z26且 ...

  9. python 有关堡垒机的那些事

    堡垒机为了保证系统或服务器的安全性,防止运维和开发人员胡乱操作服务器,导致不必要的损失,使用堡垒机来完成对运维和开发人员的授权.用户统一登录堡垒机账号来操作系统或服务器.堡垒机等于成了生产系统的SSO ...

  10. 吴裕雄--天生自然 R语言开发学习:分类(续二)

    #-----------------------------------------------------------------------------# # R in Action (2nd e ...