一、 Nginx简介
Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。轻量级高并发服务器Nginx
Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上,有极大的稳定性
Nginx的用武之地
Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能 力强,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
nginx作为服务器
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。
关于代理
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;
此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。
正向代理
正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
正向代理,"它代理的是客户端,代客户端发出请求",客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题
反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
二者区别
在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;
在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;
二、Nginx的安装与配置
2.1安装依赖环境
执行如下命令
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.2安装nginx
1. 上传压缩包
上传到目录 /usr/soft/nginx里面
2. 解压文件
tar -zxvf nginx-1.15.10.tar.gz
3. 配置
进入目录
使用默认配置
[root@hostM1 nginx-1.15.10]# ./configure
4. 编译:
make
5. 安装
make install
6. 查看安装位置
whereis nginx
7. 启动、停止nginx
[root@hostM1 nginx-1.15.10]# cd /usr/local/nginx/sbin/
[root@hostM1 sbin]# ./nginx
[root@hostM1 sbin]# ./nginx -s reload 重新加载
[root@hostM1 sbin]# ./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。
[root@hostM1 sbin]# ./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
8. 查询nginx进程:
ps aux|grep -v grep|grep nginx
ps -ef|grep -v grep|grep nginx
9. 访问nginx
192.168.159.34
此时nginx就安装成功了
nginx配置文件 (nginx.conf)
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令
第二部分:events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接
表示每个 work process 支持的最大连接数为 1024.
第三部分:http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
nginx 使用的端口号是80
localhost(192.168.58.33)
location 指令说明 该指令用于匹配 URL。
location [ = | ~ |~* |^~] uri{ }
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
反向代理实例1:
访问 192.168.158.33的时候直接指向的是 http://192.168.58.33:8080
反向代理实例2:
根据访问的路径跳转到不同端口的服务器中
edu http://192.168.58.33:8081
vod http://192.168.58.33:8082
Nginx配置负载均衡
准备工作:
- 两个tomcat服务器
- 将服务器中的页面改成不一样的用于区分
- 验证两个tomcat是否能够正常的启动
- 配置nginx
修改nginx.conf文件
upstream 上游
http { ...... upstream group { #添加服务器到负载均衡 server 192.168.58.33:8080 ; server 192.168.58.34:8080 ; } ..... server { listen 80; server_name 192.168.58.33; location /a/ { root html; index index.html index.htm; #反向代理的地址 proxy_pass http://group/; } ... } }
负载均衡的策略配置
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况
upstream aaa{ server 192.168.159.33:8080 weight=1; server 192.168.159.34:8080 weight=10; }
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream aaa{
ip_hash;
server 192.168.159.33:8080 ;
server 192.168.159.34:8080 ;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream aaa{
fair;
server 192.168.159.34:8080 ;
server 192.168.159.34:8081 ;
}
动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
配置静态资源:
约定:静态资源 location / {}
location /dist/ { root /usr/pro; index index.html index.htm; } // location 路径 路径一定要包含root里面 访问dist的时候 ip:80/root目录/dist location /aaa/ { alias /usr/pro/dist; index index.html index.htm; } alias 访问aaa的时候 其实访问的是 /usr/pro/dist
部署项目到nginx(vue项目和springboot项目)
部署vue项目的时候注意编译时候的路径问题否则可能文件显示不成功
执行命令为:npm run build
部署到nginx的时候
需要在安装nginx的目录下面修改文件 /usr/local/nginx/conf/nginx.conf文件的http里面添加以下代码:
server { listen 80; server_name 192.168.159.35; location / { root /usr/tmp/dist; # vue项目所在的文件夹的路径 try_files $uri $uri/ /index.html;#解决刷新报404的问题 index index.html index.htm; } }
11. 部署vue项目到nginx里面代理
12.将springboot项目部署到nginx里面
a.启动springboot项目
启动命令给 nohup java -jar 名字 --server.port=8088 & server { #监听的端口号 listen 80; #设置访问的二级域名 server_name 192.168.159.35; location /{ #配置访问的项目路径(注:这里重点) proxy_pass http://192.168.58.33:8088/; # root html; # index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 100m; root html; index index.html index.htm; } }
三、配置nginx开机启动
切换到/lib/systemd/system/目录,创建nginx.service文件vim nginx.service
cd /lib/systemd/system/
vi nginx.service
添加内容如下:
配置之后需要使文件生效 systemctl daemon-reload 退出并保存文件,执行systemctl enable nginx.service使nginx开机启动 #开机自启动 systemctl enable nginx.service #停止开机自启动 systemctl disable nginx.service #查询当前状态 systemctl status nginx.service #启动服务 systemctl start nginx.service #重新启动服务 systemctl restart nginx.service #停止服务 systemctl stop nginx.service #重新加载配置 systemctl reload nginx.service
测试 nginx启动、关闭、重启
ps -ef|grep -w tomcat|grep -v grep|awk '{print $2}'