当前位置:首页 » 网页前端 » nginx前端部署
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

nginx前端部署

发布时间: 2023-03-01 17:23:30

1. 利用nginx部署站点,前端资源默认放在

部署springboot+vue项目的时候,我们一般是将打包好的前端项目放在我们后端的resources目录下,然后前后端一起打包成jar包或者war包部署上服务器的。也就是说,如果前端项目发生修改的话,那么即使后端不用修改,前后端项目也要重新放在一起重新打包、重新部署。但是,前端项目打包往往是几mb大小,而后端项目打包却要几十mb。因此,为了方便,我们可以使用Nginx独立部署前端项目。

一、 Nginx安装步骤

1、安装GCC、automake、pcre、zlib和openssl

用rpm -qa 命令查看是否安装

如果没有安装,执行以下命令

yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel
1
2、下载Nginx

我是安装在 /www/server目录的

cd /www/server
1
weget命令下载

wget http://nginx.org/download/nginx-1.16.1.tar.gz
1
tar zxvf 解压

tar zxvf nginx-1.16.1.tar.gz
1
重命名 nginx-1.16.1文件夹

mv nginx-1.16.1 nginx
1

3、安装Nginx,默认安装目录:/usr/local/nginx

进入nginx文件夹,运行configure脚本

cd nginx
./configure
1
2
编译、安装

make
make install
1
2
切换到安装目录

cd /usr/local/nginx
1

注意:html:存放了两个后缀名为.html的静态文件,前端项目打包后的文件放在此处,编辑好配置文件,启动Nginx服务器即可成功部署前端项目。

4、修改配置文件、开放端口

vim /usr/local/nginx/conf/nginx.conf
1
端口改为 8051

5、启动Nginx

cd /usr/local/nginx
./sbin/nginx
1
2
6、其他命令

查看进程

ps -ef|grep nginx
1
重启Nginx

/usr/local/nginx/sbin/nginx -s reopen
1
停止Nginx

/usr/local/nginx/sbin/nginx -s stop
1
重载Nginx配置文件

/usr/local/nginx/sbin/nginx -s reload
1
7、访问

curl 127.0.0.1:8051
1

如果访问不了,服务器安全组开放端口以及防火墙放行端口

firewall-cmd --zone=public --add-port=8051/tcp --permanent
1
firewall-cmd --reload
1
二、前端项目独立部署

1、将打包的前端项目上传到/usr/local/nginx/html目录

2、 重新启动即可成功访问到前端项目

/usr/local/nginx/sbin/nginx -s reopen
1
可能遇到的问题

1、刷新页面查询404的情况,也就是页面找不到

修改Nginx配置文件

try_files $uri $uri/ /index.html;
1

重新加载配置文件重启Nginx

2. nginx 在前端中的简单应用

Web 服务实际上又称静态资源服务,自从前后端分离后,前端的输出趋向于静态资源的形式,什么是静态资源:就是我们通常用webpack构建输出的结果,比如:

而为了提供文件在互联网中的可访问性,前端还是需要依赖 静态资源服务 ;最常用的做法就是Node服务和Nginx服务。

Node服务最常见的,就是WebpackServer, 在前端开发联调时经常用到, 启动后我们就可以通过 http://localhost:8907/bundle.05a01f6e.js 的形式来访问构建资源;除此之外,我给大家安利另一款Node服务库: serve , 它也能快速启动一个静态资源服务。

但在生产环境,我们一般用Nginx来处理,不是Node不好,而是Nginx已经够好了。通常整个大前端会有很多前端项目,我们都将构建结果放在一台服务器上(一般有备份机器)的某个文件夹下,然后通过安装Nginx来创建一个静态资源服务供所有前端资源的访问;比如文件夹static下有A,B,C,D四个前端项目资源, 我们通过nginx配置:

我们即可通过 http://static.closertb.site/A 访问A项目,通过 http://static.closertb.site/C 访问C项目, 从而做到一鸡多吃,这种玩法在HTTPS与HTTP2的时代特别常见。

以上就是Nginx作为Web服务的简单用法,接下来我们了解一下反向代理服务

作为一个开发者,可能经常听到 代理 两字,但很多人区分不清楚正向和反向的区别:

如上图左侧所示,正向代理是用户的主动行为,如我们fq时访问goggle所做的;右侧反向代理是我们访问的服务器行为,作为用户的我们是不能控制也无需关注的。

反向代理在服务部署中,是一种非常常见的技术,比如负载均衡、容灾、缓存

而对于前端开发来说,反向代理多用于请求转发,来处理 跨域 问题。当我们把前端静态资源服务都指向一个域名(static.closertb.site)时,与服务端请求域名(server.closertb.site)不一致,就会造成跨域。如果服务端不配合的话,那通过nginx,前端也是可以轻松做到的,在前面的配置上,我们添加:

所以当网页发出一个请求: http://static.closertb.site/a 时,实际请求地址是: http://server.closertb.site/a ,这就简单实现了一个服务代理。其原理与WebpackServer的proxy相似.

以上就是Nginx的web服务和代理服务在前端开发中的两个典型使用场景, 接下来我们说点零碎又有用的

当请求 http://static.closertb.site/site/a/logo.png )时,将会返回服务器上的/home/static/static/a/logo.png文件,即'/home/static'+'/static/a/logo.png',其 拼接的地址是匹配字符串及其以后的

而对于alias:

当请求 http://static.closertb.site/static/a/logo.png )时,将会返回服务器上的/home/static/a/logo.png文件,即'/home/static'+'/a/logo.png',其 拼接的地址是除了匹配字符串以后的地址

你可能见过A这种:

也可能见过B这种

有什么区别?

两者与root 和 alias有相似之处,只不过这种差别,只适用于:

所以当收到一个请求: http://static.closertb.site/api/user/get ) 时,配置A将会把请求代理到: http://server.closertb.site/api/user/get ); 配置B将会把请求代理到: http://server.closertb.site/user/get )

这个知识,在代理配置中真的相当重要

当我们下架一个前端服务,或者用户访问了某个根本不存在的页面,我们不希望用户看到的是404,而是将其引导到一个模糊正确的页面,这时候我可以用rewrite服务;反手一个配置,直接就将流量打到了网站首页;

另一个比较常用的,就是网站开启https,我们需要将所有http请求重定向到https:

上面同是rewrite,但还是有不一样的 ,一个是redirect(302), 另一个是permanent(301),这两个还是有很大区别的;

web 性能优化是前端的一门学问,好的静态资源加载速度,会显着提升用户体验,而nginx作为最常用的静态资源服务器,也是有诸多渠道来帮助我们来提升静态资源加载速度,简单来讲,可以三个方面,直接上配置:

``if ( ) {
expires 365d;
add_header Cache-Control max-age=31536000;
}</pre>

expires与max-age两种配置方式都可以达到告诉浏览器资源一年以后过期的目的,更多关于http缓存的可以 看这一篇文章 ;

3. 前端必须用nginx部署吗

是的。根据查询相关资料显示:前后端分别部署,前端使用Nginx部署,后端直接运行jar.

4. Nginx部署前后端项目时的跨域问题

最近在准备一个小项目来着,使用tomcat部署后端的SpringBoot项目,然后使用Nginx部署前端界面并转发后端请求到相应的tomcat集群时,发生了跨域问题,解决过程欲仙欲死,特在此记录一下。

Nginx跨域配置方法一

严格说来,这种方式并不算是跨域请求,因为这种配置要求后端请求的url必须为 http://shop.mk-shop.com/mk-shop-api/xxxx 的形式,也就是说前端项目的请求地址必须进行更改为和客户端页面访问时的url地址一样,这样貌似也就没有跨域问题了。如果前端项目不同模块的请求地址不一样,则都需要进行更改。
Nginx跨域配置方法二

注意: api.mk-shop.com 是后端api的请求前缀,也就是客户端异步加载时的请求地址,以我的项目的后端请求地址为例:

SpringBoot后端处理跨域时可以配置过滤器来实现

注意: 使用过程中,新版本的springboot可能会报错不允许在setAllowedOrigins包含 * ,此时需要使用setAllowedOriginPatterns代替。

5. nginx 部署多个前端vue项目的3种方式,一篇文章搞定

首先我们看一下nginx.conf配置文件

为了方便管理,在/usr/local/nginx/conf.d/ 创建自己的*.conf配置文件。没有conf.d目录,直接mkdir 创建conf.d
*.conf 详细可参考:

这种方式只需要开放80端口,然后访问二级域名。

这种方式的好处是只有一个server ,而且不需要二级域名、用路径location就能实现。

但是这种方式的一个缺点,就是vue项目前端需要改配置。修改地方如下:

react 配置请参考: https://blog.csdn.net/mollerlala/article/details/96427751?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBai-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBai-2

vue 配置请参考: https://blog.csdn.net/weixin_33868027/article/details/92139392

6. nginx部署多个前端项目

这里就不介绍同一端口和同一nginx.conf,有需要的童鞋自行网络。
这里介绍不同项目的不同配置。
服务器中已经部署了其他项目,这里做一个简单的页面做测试:

1、新建目录:
/root/nginx/8571/
/root/nginx/8571/html/
/root/nginx/8571/log/

2、将文件:/usr/sbin/nginx 拷贝至 /root/nginx/8571/
3、新建index.html:/root/nginx/8571/html/index.html

4、新建配置文件:/root/nginx/8571/nginx.conf

5、启动 nginx
./nginx -c /root/nginx/8571/nginx.conf

注意:
若 nginx.conf 配置 location 后,重启 nginx 再访问,如果访问提示:Nginx 403 Forbidden,则需要在 nginx.conf 头部加入一行:

user root;

查看nginx端口使用情况:netstat -apn
启动成功后输入ip和端口8571访问:

7. 使用Tomcat和Nginx部署前端项目

第一种方式,将我们的前端项目放置在webapps目录下

进入tomcat安装路径下的conf目录,在server.xml文件中<Host>标签内配置虚拟路径

简单的解释一下参数
path 对应用户请求过来的url路径, /static 匹配所有以 /static 开头的请求
docBase 表示实际匹配到的路径,这里可以使用绝对路径,也可以使用相对路径
reloadable 如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化。(对于静态资源来说,个人觉得这个配置用处不大)
总结起来就是,对于ip:8080/static的资源请求,会通过虚拟路径匹配到我们实际的资源路径music_client/static。
配置好后重启,我们可以发现已经能够看到我们的前端项目了

对于ROOT目录下的资源,tomcat可以直接在根目录下进行访问。通过这种方式,我们可以让项目的路径去适配tomcat访问的路径。
但是这种方式不是特别推荐,当有多个项目在同一个tomcat服务器上的时候,会不方便管理。

Nginx是当下热门的服务器,使用起来只需要进行简单的配置即可。对于Nginx的安装大家可以自行网络解决。
我们先进入到usr/local/nginx(具体以实际nginx安装目录为准)下的conf目录,vim编辑nginx.xml。主要进行下面的配置

简单的解释一下
listen 表示nginx监听的端口号,也就是你希望暴露哪个端口给用户进行访问
server_name 表示nginx接受请求的域名,一般默认localhost就行
location 模块用于响应请求,这里的 / 表示匹配8082端口的所有请求
root 表示静态资源/项目的路径
index 表示默认的访问资源
配置完成后,进入 sbin 目录下,通过 ./nginx -t 检查配置文件的格式是否正确
如正确 ./nginx 进行启动或者 ./nginx -s reload 进行重启
启动完,我们就可以直接ip:8082直接访问我们的前端项目啦

开启nginx的反向代理也比较简单,只需要加上proxy_pass 配置即可

出现这个问题的原因是: 在history模式下,只是动态的通过js操作window.history来改变浏览器地址栏里的路径,并没有发起http请求,但是当我们直接在浏览器输入这个地址的时候,就会对服务器发起http请求,但是这个目标在服务器上又不存在,所以会返回404。
我们可以通过把所有请求都转发到首页上来解决这个问题。只需要在 Nignx 中的配置文件加入如下配置:

事实上,上面的解决方式也是Vue-Router官方推荐的解决方式( https://router.vuejs.org/zh/guide/essentials/history-mode.html#nginx )。
那上面的 try_files 为什么能帮助我们解决这个问题呢?我们可以看一下这个属性的作用

try_files :按选项所指定的顺序去检查用户请求的文件是否存在,如果本地存在的话则返回该请求;不存在的话将该请求转发到指定的其它路径。也就是说,比如我们当前的前端项目部署在 /usr/myproj 目录下,现在我们在浏览器发起 ip:port/testApi 请求,那么此时 uri 为testApi,nginx会先去 $root/testApi (即/usr/local/myproj/testApi)找是否存在该静态资源,若不存在,则继续寻找 $root/testApi/index (即/usr/local/myproj/testApi/index)文件是否存在,如果还是不存在,则会把请求转发到首页。

而我们的项目本事就是由Vue-Cli创建的 单页面应用 ,当index页面接收到请求的时候,对应的history模式路由就可以发挥作用了,根据浏览器的路由跳转到对应的页面,这也就保证了我们的路由请求都能够转发给index页面来进行处理。

这种问题一般是出现在服务器一开始安装Nginx的时候,没有安装SSL模块。在不重装Nignx的情况下,可以安装如下方式进行操作:

执行如下命令

这一步只是以防万一,可以省略

也可以直接执行 ./usr/local/nginx/sbin/nginx -t 看还会不会报错就行

nginx报错: [emerg] https protocol requires SSL support in /usr/local/nginx/conf/nginx.conf:50

8. nginx部署前端纯页面

1.进入nginx配置文件vim .../nginx-1.9.12/conf/nginx.conf。

如上图所示:第一个红框中的内容就是应用服务器的地址;第二个红框中的内容就是前端包的位置。

此时,配置文件已经准备完毕。这个包和端口可以存在多个。

2.进入.../nginx-1.9.12/sbin 找到nginx的启动程序。

nginx -c ../nginx-1.9.12/conf/nginx.conf    启动nginx程序,并指定配置文件。

3.如果要替换包,则直接替换就行,nginx为热加载自动更新的。但是以防有缓存之类的存在,可以使用nginx -s reload命令进行重载一次。

追加 一 :

如果前端包的构造如下图

则location配置依然如下图

但是访问地址则需要指定到具体的html文件上。。

绑定: http://127.0.0.1:48110/binding.html

成功: http://127.0.0.1:48110/success.html

失败: http://127.0.0.1:48110/error.html

追加 二:

同一个端口部署多个页面:

一个server下,多个 location。

location的作用就是是否有后缀,并且这个后缀会去拼接root后的地址。

比如第二个location /sis/。

则在访问127.0.0.1:8080/sis时,会去自动寻找/apps/svr/nginx-1.9.12/pagefile/0921/sis这个包。   (Ps:location后的地址一定要用 / 关闭,比如 location /sis/,不然访问127.0.0.1:8080/sis时,会报错,只有用127.0.0.1:8080/sis/才行。)

这样就部署好了一个 端口支持多个页面。