先了解下Nginx主要作用:反向代理、负载均衡、HTTP服务器动静分离,正向代理。我们先大概了解下这几种的定义,后面我们用具体实例说明,GO!
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
负载均衡
负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。
HTTP服务器(动静分离)
Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时也可以通过Nginx来实现动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
热启动
Nginx 是支持热启动的,也就是说当我们修改配置文件后,不用关闭 Nginx,就可以实现让配置生效。
Nginx 重新读取配置的命令是:nginx -s reload
Windows 是:nginx.exe -s reload
了解完基础知识后,接下来我们分享静态资源的服务器配置方法。
nginx 静态HTTP服务器配置 {#heading-1}
Nginx本身也是一个静态资源的服务器
,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现。
# nginx 静态资源配置--静态服务器(也是最简单的配置)
server {
listen 80; # 监听端口号
server_name localhost; # 主机名
index index.html index.htm; # 默认页名称
root html; # 静态资源存放目录
location / { # 匹配路径
root html; # 文件根目录
index index.html index.htm; # 默认页名称
}
error_page 500 502 503 504 /50x.html; # 报错编码对应页面
location = /50x.html {
root html;
}
}
● url 和 uri:
网址是url,url=主机:端口+uri
uri 是资源,是location后面的匹配规则,即 location uri
● location uri,当规则匹配上了就到root目录找页面
location / { #匹配路径
root html; #文件根目录
index index.html index.htm; #默认页名称
}
● location 配置方法
location 配置可以有两种配置方法
① 前缀 + uri(字符串/正则表达式)
② @ + name
前缀含义
= :精确匹配(必须全部相等):大小写敏感
~* :忽略大小写
^~ :只需匹配uri部分
@ :内部服务跳转
{#_label2}
nginx HTTP服务器(动静分离--nginx+tomcat实现动静分离) {#heading-2}
静态资源:数据不变,请求不需要后台处理;动态资源:模板,jsp、templates等,数据需要后台处理后渲染到网页,动态网页。
Nginx可以根据一定规则把不变的资源和经常变的资源区分开,对动静资源进行拆分,实现对静态资源的做缓存,从而提高资源响应的速度。这就是网站静态化处理的核心思路。
upstream tomcat{
server localhost:8080;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html;
}
# 所有静态请求都由nginx处理,存放目录为html
location ~* \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root html;
}
# 所有动态请求都转发给tomcat处理
location ~ *jsp$ {
proxy_pass http://tomcat; # 代理转发
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
反向代理----使用proxy_pass {#heading-3}
server {
listen 80;
server_name blog.yilele.site;
index index.html;
location / {
root /shan/blog/;
index index.html;
}
location ~* \.(jpg|jpeg|gif|png|swf|rar|zip|css|js|map|svg|woff|ttf|txt)$ {
root /shan/blog/;
index index.html;
add_header Access-Control-Allow-Origin *;
}
# 反向代理
location /api {
proxy_pass http://ip地址或域名:端口号;
}
}
nginx 配置springboot+vue 前后端分离项目 {#heading-4}
{#_label3_3_0_0}
1、思路:nginx 结合自身特性,本身一个静态资源的服务器
,
(1) 通过nginx实现域名的方式访问网站,以及把对数据的请求通过nginx反向代理转发给后端容器(后端服务),避免了接口暴露的不安全
① 访问网站,首先习惯上访问网站的首页,通常访问路径是/ [location /],然后默认页面是首页;
location / {
root /shan/blog/;
index index.html;
}
② 默认页面,首页需要像css、js、图片等静态资源,才能显示出样式、动态效果等,需要通过匹配规则[location ~*.(jpg|jpeg|gif|png|swf|rar|zip|css|js|map|svg|woff|ttf|txt)$],指定root 到那个目录下获取这些静态资源。
location ~* \.(jpg|jpeg|gif|png|swf|rar|zip|css|js|map|svg|woff|ttf|txt)$ {
root /shan/blog/;
index index.html;
add_header Access-Control-Allow-Origin *;
}
③ 默认首页,需要有数据
在vue中首页实际上编写了很多个接口在请求数据,这些动态数据是来自 springboot项目(api 服务),需要咱通过定义一个匹配接口路径的规则[location /api],然后进行请求转发到 springboot项目(api 服务)
{#_label3_3_0_1}
2、通过dockerCompose+nginx配置实现部署spirngboot+vue前后端分离项目
(1) dockerCompose 主要内容:
version: "3"
services:
api:
image: api
container_name: api
expose:
- "8888"
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /mnt/docker/nginx/:/etc/nginx/
- /mnt/shan/blog:/shan/blog
links:
- api
depends_on:
- api
(2) nginx 主要配置:
upstream apistream{
server api:8888;# 通过dockerCompose编排,服务名相当于域名
}
server {
listen 80;
server_name blog.yilele.site;
index index.html;
location / {
root /shan/blog/;
index index.html;
}
location ~* \.(jpg|jpeg|gif|png|swf|rar|zip|css|js|map|svg|woff|ttf|txt)$ {
root /shan/blog/;
index index.html;
add_header Access-Control-Allow-Origin *;
}
location /api {# 请求https://blog.yilele.site/api 会代理转发到 api:8888
proxy_pass http://apistream;
}
}
OK,分享的内容差不多这些了,希望能帮助到大家