二Nginx的安装与配置
安装依赖环境:
gcc安装
yum install -y gcc-c++
PCRE安装:
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
安装命令:
yum install -y pcre pcre-devel
zlib安装:
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
安装命令:
yum install -y zlib zlib-devel
OpenSSL安装:
penssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔,所以需要安装
安装命令:
yum install -y openssl openssl-devel
如果以上命令执行比较麻烦可以执行如下命令
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
安装nginx
1. 上传压缩包
上传到目录 /usr/nginx里面
或者联网直接下载:
yum
wget 下载安装包
rpm
wget -c https://nginx.org/download/nginx-1.15.10.tar.gz
2. 解压文件
tar -zxvf nginx-1.15.10.tar.gz
3. 配置
进入目录nginx-1.15.10
使用默认配置
[root@hostM1 nginx-1.15.10]# ./configure
4. 编译:
make
5. 安装
make install
4、5可以一块运行
make&&make install
6. 查看安装位置
whereis nginx
7. 启动、停止nginx
[root@localhost nginx-1.15.10]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx
[root@localhost sbin]# ./nginx -s reload 重新加载
[root@localhost sbin]# ./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。
[root@localhost 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.241.33
此时nginx就安装成功了
nginx配置文件 (nginx.conf)
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如第一行
worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
第二部分:events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
events {
worker_connections 1024;
}
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
server{
listen 80; nginx 使用的端口号是80
server_name localhost; (192.168.221.32)
}
反向代理实例1:
访问 192.168.241.33 的时候直接指向的是 http://192.168.241.33:8080
配置 /usr/local/nginx/conf 目录下的文件 nginx.conf
换成本地地址
启动本地程序,并清空日志以方便查看
此时再通过虚拟机路径访问时会自动调用本地路径
反向代理实例2:
根据访问的路径跳转到不同端口的服务器中
student http://192.168.159.34:8080
admin http://192.168.159.34:8081
location 指令说明 该指令用于匹配 URL。 语法如下:
location [ = | ~ |~* |^~] uri{
}
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。 注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
Nginx配置负载均衡
准备工作:
- 两个tomcat服务器
- 将服务器中的页面改成不一样的用于区分
- 验证两个tomcat是否能够正常的启动
- 配置nginx
修改nginx.conf文件
upstream 上游
http {
......
upstream aaa
{
#添加服务器到负载均衡
server 192.168.241.34:8080 ;
server 192.168.241.35:8080 ;
}
.....
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
#反向代理的地址
proxy_pass http://aaa/;
}
...
}
}
负载均衡的策略配置
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况
upstream aaa{
server 192.168.241.34:8080 weight=1;
server 192.168.241.35:8080 weight=2;
}
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream aaa{
ip_hash;
server 192.168.241.34:8080 ;
server 192.168.241.34:8080 ;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream aaa{
fair;
server 192.168.241.34:8080 ;
server 192.168.241.34:8080 ;
}
动静分离
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.159.35: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
添加内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置之后需要使文件生效
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 -efgrep -w tomcatgrep -v grepawk '{print $2}'