全国房地产网站,长春网站建设公司哪家好,技术支持 优府网络太原网站建设,广州有哪几个区1. Nginx简介
Nginx 是一个高性能的Http和反向代理服务器。也是一个IMAP/POP3/SMTP等邮件代理服务器。
特点#xff1a;
占有内存少并发能力强安装非常的简单配置文件非常简洁#xff08;还能够支持perl语法#xff09;Bug非常少启动特别容易#xff0c;并且几乎可以做到…1. Nginx简介
Nginx 是一个高性能的Http和反向代理服务器。也是一个IMAP/POP3/SMTP等邮件代理服务器。
特点
占有内存少并发能力强安装非常的简单配置文件非常简洁还能够支持perl语法Bug非常少启动特别容易并且几乎可以做到7*24不间断运行即使运行数个月也不需要重新启动。还能够不间断服务的情况下进行软件版本的升级。Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。
提供的服务
动静分离web 服务负载均衡 反向代理web 缓存内存少并发能力强支持50,000 个并发
2. Nginx 安装Linux 环境 nginx官网 https://nginx.org/en/download.html nginx下载地址 https://nginx.org/download/nginx-1.22.1.tar.gz # 在/root目录建立service文件夹
mkdir service# 进入service目录
cd service# 在服务器上进行下载
curl -o nginx-1.22.1.tar.gz https://nginx.org/download/nginx-1.22.1.tar.gz# 解压
tar -zxvf nginx-1.22.1.tar.gz# 进入nginx目录
cd nginx-1.22.1# 安装nginx需要的环境
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y
yum -y install gcc-c# 检查配置文件
#配置HTTPS时使用
./configure --with-http_ssl_module
#配置GOLANG语言时使用
./configure --with-http_v2_module
#启用TCP/UDP代理时使用
./configure --with-stream# 编译
make# 安装
make install# 配置全局环境变量
vim /etc/profile
#在最后一行添加:(shiftg 定位到最后一行按 o 在最后一行插入
export PATH$PATH:/usr/local/nginx/sbin
#按esc进入命令模式:wq保存文件退出vim# 使文件生效
source /etc/profile# 启动 nginx
nginx# 查看启动情况
netstat -ntlp# 如果修改了nginx的配置需要执行以下指令才能生效
nginx -s reload
启动后进程id存放位置 /usr/local/nginx/nginx.pid
查看文件 cat nginx.pid
关闭方式 ./nginx -s stop 原生命令
杀死进程 kill 参数 pid 形式 如 kill -9 pid 强制停止服务 kill -TERM pid 快速停止服务 kill -QUIT pid 平缓停止服务
信号处理命令 ./nginx -s stop, quit, reopen, reload)
注意事项nginx服务器需要虚拟机开放80端口的访问 防火墙配置 同样适用于开放8080 8081端口 firewall-cmd --list-all 查看当前配置 firewall-cmd --add-servicehttp --permanent 开放http访问 firewall-cmd --add-port80/tcp --permanent 开放80端口 firewall-cmd --reload 重启防火墙保存
3. Nginx配置
分为三部分全局块、events块、http块。
3.1 全局块
全局指令指定运行时的用户组、进程id存放位置、日志存放位置、worker process数量等等。
# 配置用户或者用户组
#user nobody;# 允许生成的进程数
worker_processes 1;# 日志路径设置 可以配置级别
# debug | info | notice | warn | error | crit
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;# 存储进程id的文件地址
#pid logs/nginx.pid;3.2 events块
影响nginx服务器和用户网络连接的配置比如每个进程的最大连接数选取哪种事件驱动模型以及在网络连接过程中是否开启多个是否序列化等等。
events {# 每个进程的最大连接数worker_connections 1024;
}3.3 http块
配置代理、缓存、日志等绝大部分功能的地方可以嵌套多个server块而不同的server可以对应不同的域名虚拟主机
4. 虚拟主机的配置
虚拟主机同一台nginx服务器可以支持多个网站的运行每个虚拟主机之间都相互独立具有完整功能。
http {# 对应虚拟主机的配置server{# 监听端口listen 80;# 监听域名server_name localhost;# 定位出路径或文件地址location / {# 相对路径root html;# 默认跳转的首页地址index index.html index.htm;}}server{}
}配置指定域名(www.test123.com)访问到虚拟机上的页面
1在安装目录下创建文件夹如: mkdir test123
创建页面 index.html更改配置
http {# 对应虚拟主机的配置server{# 监听端口listen 80;# 监听域名server_name test123.com;# 定位出路径或文件地址location / {# 相对路径root test123;# 默认跳转的首页地址index index.html;}}}给域名配置ip地址的映射 更改hosts文件 C:\Windows\System32\drivers\etc
5浏览器输入虚拟机地址或者域名 duyi123.com 均能返回自定义页面
5. 日志配置
通过日志可以获取到用户地址信息、跳转来源、终端、以及url访问量等等。 #log_format main $remote_addr - $remote_user [$time_local] $request # $status $body_bytes_sent $http_referer # $http_user_agent $http_x_forwarded_for;# 配置日志文件地址 声明日志格式 #access_log logs/access.log main;日志demo
192.168.1.11 - - [04/Mar/2020:13:03:39 0800] GET / HTTP/1.1 200 612 - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36用途remote_addr客户端的ip地址remote_user客户端的用户名称time_local访问时间和时区request请求方法status响应状态码 如200body_bytes_sent主体内容字节数 如612http_referer记录是从哪个链接访问过来的http_user_agent用户使用的代理浏览器http_x_forwarded_for通过代理服务器来记录客户端的ip地址
可以通过脚本实现日志切割每天生成一份日志 重命名日志文件让nginx重新从配置中读取日志文件名在新的日志文件中记录日志
6. 正向代理和反向代理
正向代理客户端client知道服务器地址但不能直接访问需要通过代理服务器proxy去访问远程服务器server。
使用场景
可以访问原来无法访问的资源做缓存使用加快访问速度对客户端授权或记录访问信息等
反向代理代理服务器接收用户发送的请求然后再转发给内部网络的服务器将服务器的结果返回给客户端这个过程用户是感受不到的。
使用场景
1保证内网的安全阻止web攻击。 2负载均衡优化网站的负载处理能力
7. 反向代理配置
前提系统中安装好jdk和tomcat配置好环境变量
已安装的目录地址 1 jdk路径 /usr/local/java/ 2 tomcat路径 /usr/local/tomcat/ 启动方式 /usr/local/tomcat/bin 执行 ./startup.sh 关闭方式 执行./shutdown.sh 验证方式 虚拟机ip:8080 可以看到tomcat页面 原需求 访问域名test123.com 显示 nginx路径/test123/index.html页面 现需求 访问域名test123.com 显示 tomcat 首页
实现方式 location / {#root test123;proxy_pass http://127.0.0.1:8080;#index index.html;}注意更改配置文件nginx.conf后执行重加载命令 ./nginx -s reload
进阶需求 一台nginx连接多台tomcat当域名下对应不同路径时分发给不同的tomcat处理
实现方式
a) 拷贝一个tomcat安装目录修改server.xml配置中的三处端口 b) 分别在webapps目录下创建tomcat1和tomcat2目录放置index.html显示不同的tomcat以及其端口启动两个tomcat c) 通过浏览器访问 ip:8080/tomcat1/index.html ip:8081/tomcat2/index.html 这两个地址都可以展示出内容 d) 修改nginx配置文件并重加载 location ~ /tomcat1/ {proxy_pass http://127.0.0.1:8080;}location ~ /tomcat2/ {proxy_pass http://127.0.0.1:8081;}e) 浏览器验证访问 http://duyi123.com/tomcat1/index.html http://duyi123.com/tomcat2/index.html 均能找到对应页面。
最终实现通过不同的路径映射到不同的tomcat目录下
8. 负载均衡
什么是负载均衡
当客户端发送请求时会先到Nginx然后Nginx会将请求分发到后台不同的服务器上。如果后台的服务器群中有一个宕机了那么Nginx会自动忽略这台服务器不会将请求再次分发到这台服务器上。如果有新加入的服务器Nginx也会将请求分发到这台服务器上。
早期使用DNS域名解析系统做负载具体而言给客户端解析不同的ip地址让流量直接到达服务器。
clientN - 负载均衡器(load balancer) - 调度算法 - serverN
优点 1 通过健康检查避免单点故障 2 当发现节点故障时从集群中移除保证应用的高可用
四层负载均衡在OSI模型的传输层主要是转发。 七层负载均衡在OSI模型的应用层主要是代理。
负载均衡器可以处理四大类型的请求HTTP/HTTPS/TCP/UDP等。
负载均衡的调度算法
1 轮询 相当于将服务器从第1台到最后1台行成一个环状每接收一笔请求则从1台开始循环遍历。 2最小连接优先选择连接数最少的服务器适用于会话时间较长的业务处理。 3ip映射根据请求的ip地址进行散列让同一ip下的请求都映射到同一服务器上可以解决session问题。粘性会话
实现
当访问 192.168.1.20/lb/index.html时通过负载均衡让请求平均分配到8080和8081端口中
1 分别找到两个tomcat的安装目录如/usr/local/tomcat/webapps 创建lb目录 mkdir lb 创建访问页面 cp tomcat1/index.html lb 查看页面内容 cat lb/index.html
2 nginx.conf配置的修改 # http块的层级下upstream myserver{# server列表的地址和端口server 192.168.1.20:8080;server 192.168.1.20:8081;}server {listen 80;server_name 192.168.1.20;#charset koi8-r;#access_log logs/host.access.log main;location / {# 将请求映射到负载均衡器中 参数为配置的upstream名称proxy_pass http://myserver;}}3 浏览器访问 http://192.168.1.20/lb/index.html
以上是默认的轮询调度算法。
如果需要额外设置权重某个服务器处理的更多些使用weight默认值是1。 upstream myserver{# server列表的地址和端口server 192.168.1.20:8080 weight2;server 192.168.1.20:8081 weight1;}如果需要根据ip地址固定server处理可以使用ip_hash。 upstream myserver{server 192.168.1.20:8080 weight2;server 192.168.1.20:8081 weight1;ip_hash;}9. 动静分离
将动态和静态请求分离开不能单纯的理解为动态页面和静态页面的物理分离。
如果是静态资源请求直接查找nginx上的静态资源地址。 如果是动态资源请求通过反向代理映射到tomcat路径下的资源。
实现方式 1 单独把静态文件放在独立的服务器及独立的域名下推荐方案 2 将动态资源和静态资源混合在一起通过nginx来分开。
需求 访问图片等静态资源时可以直接从nginx中获取 访问jsp等动态资源时通过tomcat返回结果
处理流程 1 准备动态资源来到/usr/local/tomcat/webapps 通过rz命令上传本地的index.jsp 2 准备静态资源来到/usr/local/nginx/image 通过rz命令上传本地的test.png
nginx.conf配置 # 动态资源配置location ~ .*.jsp$ {proxy_pass http://myserver;}# 静态资源配置location ~ .*\.(gif|jpg|png|css)$ {root /usr/local/nginx/image;# 在浏览器端使用缓存 设置过期时间expires 3d;}
4 浏览器验证分别访问 http://192.168.1.20/jsp/index.jsp http://192.168.1.20/test.png
10. location块
匹配规则
1location /uri 精确匹配
2location ^~ /uri 前缀匹配顺序在正则之前 location /uri 前缀匹配顺序在正则匹配之后
注意两种前缀匹配不能同时出现 否则启动会报错
3location ~ pattern 区分大小写的正则匹配 location ~* pattern 不区分大小写的正则匹配
4location / 通用匹配接收未匹配到其他location的请求
匹配顺序 首先会进行精确匹配然后会进行前缀匹配具体顺序按照指令长度从长到短的顺序依次匹配但是在正则匹配时是按照配置文件的顺序依次匹配的如果不希望前缀匹配后进行正则匹配那么使用^~
情况一
# 前缀匹配 前缀匹配顺序在正则之前
location ^~ /helloworld {return 601;
}
访问 test123.com/helloworld/test 返回601
情况二
# 前缀匹配顺序在正则匹配之后
location /helloworld {return 602;
}
# 区分大小写的正则匹配
location ~ /helloworld {return 603;
}访问 test123.com/helloworld/test 返回603
情况三
# 前缀匹配顺序在正则匹配之后
location /helloworld {return 602;
}
# 区分大小写的正则匹配
location ~ /helloworld {return 603;
}
# 区分大小写的正则匹配
location ~ /helloworld/test {return 604;
}访问 test123.com/helloworld/test/a.html 返回603
情况四
# 前缀匹配顺序在正则匹配之后
location /helloworld {return 602;
}
# 区分大小写的正则匹配
location ~ /helloworld/test {return 604;
}
# 区分大小写的正则匹配
location ~ /helloworld {return 603;
}访问 test123.com/helloworld/test/a.html 返回604
11. URL重写
对url的规范化处理域名更换时的新旧跳转一些额外的参数调整等等
server{listen 80;server_name test123.com;rewrite ^/(.*) http://www.test123.com/$1 permanent;
}
# 访问 test123.com 地址栏会变成www.test123.com