Nginx 入门
nginx 可以做什么事情
Nginx 是高性能的 HTTP 和 反向代理服务器 处理高并发能力十分强大 有报告表明支持高达 50000 个并发连接数
占用内存少 并发能力强
Nginx 作为 web 服务器
Nginx 可以作为静态页面的 web 服务器 不支持 java
Nginx 不仅可以做反向代理,实现负载均衡 还能用作正想代理来进行上网等功能
正向代理: 如果把局域网外的 Internet 想象成一个巨大的资源库 则局域网中的客户端要访问 internet 则需要通过代理服务器来访问 这种代理服务器就称之为正向服务器
通过代理服务器来访问服务器的过程就是正向代理
比如 vpn 就是正向代理 大陆用户先通过 vpn 服务器 访问 google 网站
反向代理
反向代理, 其实客户端对代理是无感知的, 因为客户端不需要任何配置就可以访问
我们只需要将请求发送到反向代理服务器 由反向代理服务器去选择目标服务器获取数据后 在返回给客户端 此时反响代理服务器和你表服务器对外就是一个服务器 暴露的是代理服务器的地址 隐藏了真是服务器 IP 地址
负载均衡
增加服务器数量 然后将请求发送到各个服务器上 将原先请求集中到单个服务器上的 情况改为将请求分到多个服务器上 将负载分发到不同的服务器 也就是我们所说的负载均衡 客户端发送多个请求到服务器 服务器处理请求 有一些可能要与数据库进行交互 服务器处理完毕请求后 再将结果返回给客户端
动静分离
为了加快网站的解析速度 可以把动态页面和动态页面由不同的服务器来解析 加快解析速度 降低原来单个服务器的压力
下载Nginx (centos7)
上传到服务器 (我这里下载是 nginx 1.19.10)
cd
tar -zxvf nginx-1.19.10.tar.gz
cd nginx-1.19.10
./configure
make
make install
whereis nginx
# nginx: /usr/local/nginx 配置文件目录
cd /usr/local/nginx
# conf html logs sbin
# sbin 启动文件
访问 nginx
ip (nginx 默认端口80 可直接访问 ip 即可) http://ip/
如果安装正确 没有出现这个页面
检查方向 nginx 的80 是否被占用掉了
Liunx 的防火墙是否没有关闭
阿里云 腾讯云 需要配置 安全组的 端口
# nginx 的常用命令
cd /usr/local/nginx/sbin
./nginx # 启动 Nginx
./nginx -s stop # 停止
./nginx -s quit # 安全退出
./nginx -s reload # 重新加载配置文件
ps aux | grep nginx # 查看 Nginx 的进程
Nginx 反向代理 && 负载均衡
模拟测试环境
需求:
假设我们有俩个
python
Flask
项目 现在随着用户越来越多我们我们的对我们的服务器压力越来越大, 用户体验效果越来越不好这里我们就使用
Nginx
负载均衡来解决这个问题主机 Nginx 120.131 从机 155.76
要求这个俩个项目要在分别的俩台机器上可以正常运行
使用轮询!
怎么可以 了解 iphash redishash ...等等
120.131
安装 Nginx (上面已经安装过Nginx 不在介绍了)
启动程序 (注意:俩台服务器上都启动!)
## 我这里就写了一个 Flaks 小 demo 用来测试
"""
运行条件 这里必须有 Python 环境 并有 Flask 安装包
pip3 install Flask
"""
#/bin/test.py
from flask import Flask
app = Flask(__name__)
# 配置 NGINX 反向代理
nginx 反向代理
示例:
# 注意 ; 结尾!
proxy_pass http://www.xxx.com/;
http://192.168.120.131/uri;
cd /usr/local/nginx/conf
vi nginx.conf
# 修改这个俩个地方 nginx 80 反向代理 5000 端口
server_name 192.168.120.131;
proxy_pass http://192.168.120.131:5000;
# 重新加载 Nginx 的配置文件
cd /usr/local/nginx/sbin/
./nginx -s reload
访问浏览器
http://192.168.120.131/
这里就不需要加 端口号!
nginx 反向代理 配置文件
nginx 负载均衡
Nginx 的负载均衡还是很简单的 (有手就行)
cd /usr/local/nginx/conf
vi nginx.conf
http 节点下配置
cd /usr/local/nginx/sbin
./nginx -s reload
# 访问 http://192.168.120.131/
nginx 负载均衡配置
nginx 的负载均衡配置完毕
nginx 更多操作
操作流程
cd /usr/local/nginx/conf
vi nginx.conf
配置 nginx 的步骤
重新加载 nginx 的配置文档
cd /usr/local/nginx/sbin
./nginx -s reload
到此结束!!!
nginx 负载均衡的更多配置
轮询
nginx upstream 是按照 轮询的(默认) 方式进行负载的, 每个请求按时间循序分配到不同后端的服务器
如果服务器 down 会自动剔除
http {
.....
upstream snake{
server 192.168.120.131:5000;
server 106.xx.xx.76:5000;
}
server {
listen 80;
server_name 192.168.120.131;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://snake;
}
.......
}
}权重
nginx 的权重就是指定轮询的几率。 weight 和访问比率成正比, 用于后端服务器不均的情况
例如 一台服务器性能好一点 一台服务器性能不是很好
我们就可以让好一点的服务器多分配一点权重 让请求多去请求
下面图的配置就是 155.76 服务器比 120.131 接受请求要多!http {
.....
upstream snake{
server 192.168.120.131:5000 weight=2;
server 106.xx.xx.76:5000 weight=6;
}
server {
listen 80;
server_name 192.168.120.131;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://snake;
}
.......
}
}ip_hash
ip_hash 将每个请求去指定一台web服务器 这样一来这个 ip下的客户端就能建立起稳固的
session
http {
.....
upstream snake{
ip_hash;
server 192.168.120.131:5000;
server 106.xx.xx.76:5000;
}
server {
listen 80;
server_name 192.168.120.131;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://snake;
}
.......
}
}