Nginx配置Web项目(多页面应用,单页面应用)
目前前端项目 可分两种: 多页面应用,单页面应用。
单页面应用 入口是一个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项目(多页面应用,单页面应用)的更多相关文章
- IDEA如何创建及配置Web项目(多图)
正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...
- linux nginx配置新项目加域名(设置绑定域名)
转自:linux nginx配置新项目加域名 找到nginx的配置文件 nginx/nginx.conf 第一种方,法直接在nginx.com里面配置 user www www; worker_pro ...
- 【Java Web】IDEA如何创建及配置Web项目(多图)
正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...
- Maven web项目(简单的表单提交) 搭建(eclipse)
我们将会搭建一个,基于Maven管理的,具有简单的表单提交功能的web项目,使用DAO--service--WEB三层结构,服务器使用Tomcat 1 项目基本结构的搭建 左上角File---> ...
- 02 eclipse中配置Web项目(含eclipse基本配置和Tomcat的配置)
eclipse搭建web项目 一.Eclipse基本配置 找到首选项: (一)配置编码 (二)配置字体 (三)配置jdk (四)配置Tomcat 二.Tomcat配置 三.切换视图,检查Tomcat ...
- nginx配置vue项目部署访问无问题,刷新出现404问题
现象: 在浏览器中直接访问www.test.com/api1/login会404.但如果你先访问www.test.com后再点“登录" 跳转到www.test.com/api1/login是 ...
- react_app 项目开发 (3)_单页面设计_react-router4
(web) 利用 react-router4 实现 单页面 开发 SPA 应用 ---- (Single Page Web Application) 整个应用只有 一个完整的页面 单击链接不会刷新页面 ...
- idea配置web项目启动的详细说明
每次用完一个编辑器以后 ,再换另一个编辑器使用 过段时间再回来使用idea,总是会忘记些什么 ,毕竟每个编辑器的风格和结构都有所区别 特此记下笔记 方便以后查看 图片文字看不清的 请在图片上 ...
- 修改tomcat的server.xml配置web项目
<!-- VideoWeb:自己编写的web项目名 path:表示当输入访问项目.. 如果path="" URL=localhost:8080就可以访问项目了 如果path= ...
随机推荐
- LeetCode Day 10
LeetCode0020 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序 ...
- python读取配置文件报keyerror-文件路径不正确导致的错误
- 在其他模块使用反射读取配置文件报错,但是在反射模块中读取GetData.check_list又是正确的 反射模块如下: # get_data.py from API_AUTO.p2p_projec ...
- php--ip的处理
1.获取ip /**获取请求ip**/ function _get_request_ip(){ //strcasecmp 比较两个字符,不区分大小写.返回0,>0,<0. if(geten ...
- Typescript - 联合类型
原文:TypeScript基本知识点整理 零.序言 联合类型表示一个变量值可以是几种类型之一,我们可以使用 “|” 来分割每个类型: 联合类型的变量在被赋值时,会根据类型推断的规则推断出一个类型: 如 ...
- git pull 显示的冲突---解决办法git stash
git pull:显示本地仓库与远程仓库有冲突 Please, commit your changes or stash them before you can merge. Aborting 解决办 ...
- PHP生成word文档的三种实现方式
PHP生成word原理 利用windows下面的 com组件 利用PHP将内容写入doc文件之中 具体实现: 利用windows下面的 com组件 原理:com作为PHP的一个扩展类,安装过offic ...
- win7图片只显示图标不显示预览图解决方案
问题描述: win7上图片只显示图标,不显示缩略图:不管是调节小图.中图还是大图或者其他均不显示:而且这种情况下使用截图工具截下来的图片都不自动带上扩展名:情况如下图: 解决方案: 打开计算机-> ...
- 监控Linux系统所选的服务所占进程内存占用
[代码] #!/bin/bash #程序功能描述: # 监控系统所选的服务所占进程内存占用 #作者:孤舟点点 #版本:1.0 #创建时间:-- :: PATH=/bin:/sbin:/usr/bin: ...
- ERROR 1176 (42000): Key 'XXX' doesn't exist in table 'XXX'报错处理
MySQL5.7对sql语句强制使用索引查询时报错如下: 解决:这里的id字段是表的主键,查看别人的经验贴得知是语法错误,参考链接https://stackoverflow.com/questions ...
- hexo创建新文章的正确方法
起因 之前我一直是通过复制以前的文章的形式来创建一个新的文档,但是这一次似乎遇到了一些问题.我将文章写完之后,准备进行预览,输入hexo s命令.在预览页面却没有显示出新的文章,还是和之前的页面是一样 ...