什么是Nginx
概念:
Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存小,并发能力强。可以支持50000个并发连接数。
1、正向代理和反向代理
- 正向代理:浏览器中配置代理服务器,客户通过访问代理服务器然后访问目标服务的过程就叫正向代理。
- 反向代理:其客户端对代理是无感知的,因为客户端无需任何配置就可以访问,我们只需要降请求发送到反向代理服务器,由反向代理服务器选择目标服务器获取数据后,再返给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的ip地址。
2、负载均衡
单个服务器解决不了,我们增加服务器数量,然后降多个请求分发到各个服务器上,降原先请求集中到单个服务器上的情况改为降请求分发到多个服务器上,降负载分发到多个服务器,也就是我们说的负载均衡。
3、动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器进行解析,加快解析速度。降低原来单个服务器的压力。
Nginx常用命令
// 使用Nginx必须进入到nginx目录中
cd /usr/local/nginx/sbin
查看版本号
./nginx -v
查看当前nginx状态
ps -ef|grep nginx
启动nginx
./nginx
关闭nginx
./nginx-s stop
重新加载nginx
./nginx -s reload
进入文件命令
vi conf
解压命令
tar -xvf (需要解压的文件)
对外开放端口命令
firewall-cmd --add-port=8080/tcp --permanent
重启防火墙
firewall-cmd-reload
查看已经开放的端口号
firewall-cmd --list-all
编辑文件命令
nano nginx.conf # 打开并编辑需要的文件
Ctrl+x # 退出 nano 编辑 此时需要选择Y或者N进行保存或者不保存
touch a.txt # 创建文件
mkdir a #创建文件夹
删除文件
rm -f (文件名)
windows 下nginx命令
// 进入nginx安装目录
D:\nginx\nginx-1.23.1
// 启动
start nginx
// 重启
nginx -s reload
// 查看nginx状态
tasklist /fi "imagename eq nginx.exe"
Nginx 配置文件
配置文件位置:usr/local/nginx/conf/ nginx.conf
配置文件有三部分构成
全局块
从配置文件开始到events块之间的内容,主要会设计一些影响nginx服务器整体运行的配置指令。
**例如:**worker_processes 1 值越大,可以支持的并发处理量也越多。
events块
服务器与用户的网络连接
例如: worker_connections 1024 nginx支持的最大连接数是1024个
http块
nginx服务器配置中最频繁的部分
http块包含http全局块、sever块
反向代理配置一
找到需要配置的地址
usr/local/nginx/nginx.conf
修改svever块
listen 80 # 监听端口
server_name 10.32.27.197 # 监听地址
location块
location / {
root html;
proxy_pass http://127.0.0.01:8080 # 新增转发路径
index index.html index.htm;
}
在本地进行地址映射
地址:C:\Windows\System32\drivers\etc\hosts
在hosts的末尾加入 10.32.27.197 www.123.com 映射
重启nginx 即可。
反向代理配置二
要实现的目标:访问localhost:9001/edu/ 跳转到 localhost:8080 的tomcat
访问localhost:9001/vod/ 跳转到 localhost:8081 的tomcat
实现:
// 在http中新增一个server块
server{
// 监听端口
listen 9001;
server_name 10.32.26.197;
location ~ /edu/{
proxy_pass http://127.1.1.1:8080;
}
location ~ /vod/{
proxy_pass http://127.1.1.1:8081;
}
}
= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理。
~ :用于表示 uri 包含正则表达式,并且区分大小写。
~* :用于表示 uri 包含正则表达式,并且不区分大小写。
^~:用于不含正则表达式的 uri 前,要求nginx服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中正则uri 和请求字符串做匹配
注意:如果 uri 包内正则表达式,则必须要有~ 或者~* 标识。
结果:访问http://localhost:9001/edu/a.html 返回 8081! 页面, 访问http://localhost:9001/vod/a.html 返回 8082! 页面。
负载均衡
要实现的目的:访问localhost/edu/a.html 可以分别跳转到8001和8002两个tomcat中实现负载均衡
在http块中新增配置
// myserver是名称
upstream myserver {
server 10.32.27.197:8081;
server 10.32.27.197:8082;
}
在server中添加配置
server {
listen 80;
server_name 10.32.27.197;
location / {
// myserver 是上面的负载均衡名称
proxy_pass http://myserver;
root html;
}
nginx 分配服务器策略
第一种:轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
第二种:weight (权重)
weight 代表权重默认为1,权重越高被分配的客户端越多。
upstream myserver {
server 10.32.27.197:8081 weight=5;
server 10.32.27.197:8082 weight=10;
}
第三种:ip_hash(ip哈希)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。
upstream myserver {
ip_hash;
server 10.32.27.197:8081;
server 10.32.27.197:8082;
}
第四种:fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver {
server 10.32.27.197:8081;
server 10.32.27.197:8082;
fair;
}
动静分离
要实现的目标:访问 http://localhost/image/a.html 返回在本地磁盘上的静态资源。
一、在本地或者服务器新建两个文件夹
// 在D盘新建一个文件夹:D:\dataTe 里面有两个子文件夹 www 和 image www中放a.html,image中放一个图片0.1png和a.html
二、配置nginx
// 在server 快中新增location
server {
listen 80;
server_name 10.32.27.197;
location /www/ {
alias D:/dataTest/www/;
}
location /image/ {
root D:/dataTest/;
autoindex on; // 如果请求: http://localhost/image/ 会把当前文件中的内容列出来
}
location / {
root html;
index index.html index.htm;
}
}
// alias 和 root 的区别
// root的处理结果是:root路径+location路径
// alias的处理结果是:使用alias路径替换location路径
多个conf配置
在nginx的nginx.conf 的http 块中 # 引入不同的配置文件 include all/*.conf;
必须在nginx的conf的文件夹内
配置内容:
server {
listen 81;
server_name 10.32.26.197;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/webLocal/dist/;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 300;
proxy_pass http://localhost:8081/;
}
}
nginx 的高可用
实现高可用的原因:
nginx 也会因为各种原因宕机,一旦宕机就无法代理网页就无法访问。所以,需要两个或者两个以上的服务器都安装上nginx然后做主从关联。
通过keepalived 来实现两个nginx的主从关联
一、keepalived linux安装步骤
// 安装命令
yum install keepalived -y
// 查看是否安装成功
rpm -q -a keepalived
// 在 etc 中有个 keepalived 进入后有个 keepalived.conf 的文件
vi keepalived.conf
二、修改keepalived配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
sysadmin@fire.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
smtp_server localhost #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # (检测脚本执行的间隔 2秒一次)
weight 2 #权重
}
// 主从配置值需要修改 state 为BACKUP(从),interface 网卡名和priority 的值,小于主的就可以,其他不变,检测脚本放置的位置也不变
vrrp_instance VI_1{
state MASTER #备份服务器上将 MASTER 改为BACKUP
interface ens33 # 网卡名称
virtral_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 每隔1秒发送一个心跳
authentication { #权限校验方式 用的是密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H 虚拟地址
}
}
vi /etc/hosts
// 添加内容
127.0.0.1 LVS_DEVEL
定时脚本:nginx_check.sh
#!/bin/bash
A='ps -C nginx -no-header |WC -1'
if [$A -eq 0];then
/usr/local/nginx/sbin/nginx // nginx的启动路径
sleep 2
if[ 'ps -C nginx --no-header |WC -1' -eq 0];
killall keepalived
fi
fi
检测脚本放在 /usr/local/src 中
三、启动nginx和keepalived
// 启动keepalived
start keepalived.service
// 查看进程
ps -ef | grep keepalived
四、访问虚拟地址192.168.17.50进入nginx欢迎页面
通过 ip a 查看keepalived虚拟ip绑定网卡