Nginx 是一个 C语言 开发的,高性能的 web 服务器和反向代理服务器,也可以作为邮件代理服务器
占有内存少,并发处理能力强,官方测试可以支撑5万并发请求
免费开源,收费的商业版,提供了性能优化,宕机等紧急问题处理等技术支持和服务
反向代理 代理内网的服务器接收外网的请求,对外公开的是 nginx 的 ip 和 port, 外部请求并不知道内网服务器的 ip 和 port
正向代理 代理用户请求访问外部资源,用户请求知道被代理的域名
nginx 应用场景
虚拟主机 负载均衡 静态网站 静态代理 动静分离
目录
nginx
-conf
//# nginx 配置文件
--nginx.conf
-html
//# nginx 欢迎页面
--index.html
-logs
-sbin
//# nginx 启动程序
--nginx
启动
//# -c 指配置文件
//# cd sbin
./nginx -c /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看
ps -ef | grep nginx
//# master process
//# worker process
master 读配置文件,管理 worker 进程
worker 对请求实际处理
关闭
//# 查 nginx 进程号
ps -ef | grep nginx
//# -QUIT 处理完正在处理的请求,再关闭
//# -TERM 快速关闭
kill -QUIT 主进程 pid
kill -TERM 主进程 pid
重启
./nginx -s reload
检查 nginx 配置文件有没有语法错误,能否正常工作
./nginx -c /usr/local/nginx/conf/nginx.conf -t
查看 nginx 版本
-v 查看 nginx 版本
-V 查看 nginx 版本,编译器版本,配置参数
./nginx -V
----------------------------------------
nginx.conf
----------------------------------------
有3部分组成,基本配置,events 配置,http 配置
---------------------------
基本配置
---------------------------
//# 配置 worker 进程运行用户
user nobody;
//# 配置工作进程数目,一般为 CPU 的数量或2倍
worker_processes 8;
//# 配置全局错误日志及类型
//# 默认为 error
//# [debug | info | notice | warn | error | crit]
#error_log logs/error.log notice;
#error_log logs/error.log info;
//# 配置进程 pid 文件
pid logs/nginx.pid
---------------------------
events 配置
---------------------------
//# 配置工作模式和连接数
events {
//# 配置每个 worker 进程连接数上限,nginx 总连接数等于 worker_processes * worker_connections
worker_connections 1024;
}
---------------------------
http 配置
---------------------------
http {
//# 配置 nginx 支持哪些多媒体类型,可在 conf/mime.types 查看
include mime.types;
//# 默认文件类型
default_type application/octet-stream;
//# 配置日志格式
//# log_format main ...........
//# 配置 access.log 日志及存放路径,并使用上面定义的 main 日志格式
//# access_log logs/access.log main;
//# 长连接超时时间,单位是秒
keepalive_timeout 65;
//# 开启 gzip 压缩输出
gzip on;
//# 配置虚拟主机
server {
//# 配置监听端口
listen 80;
//# 配置服务名
//# 通过任何 ip 都可以访问,通过本地也可以访问
server_name localhost;
//# 配置字符集
charset utf-8;
//# 配置本虚拟主机的访问日志
access_log logs/access.log main;
//# 匹配 / 的请求
location / {
//# 配置服务器默认网站根目录,nginx 安装主目录下的 html 目录
root html;
//# 配置首页文件名称
index index.html index.htm;
}
//# 配置 404 错误页面
error_page 404 /404.html;
//# 配置 50x 错误页面
error_page 500 502 503 504 /50x.html;
//# = 精确匹配 /50x.html 的请求
location = /50x.html {
root html;
}
}
}
----------------------------------------
负载均衡
----------------------------------------
将流量均衡的分摊到集群中的多个节点上
硬件 - 价格昂贵,几十万一台
F5 深信服
软件 - 免费开源
nginx haproxy lvs
----------------------------------------
----------------------------------------
nginx 负载均衡
----------------------------------------
配置 nginx.conf
1.配置 http 模块
//# upstream 能对后端服务器做健康检测,转发前端请求时会过滤后端故障机器
//# weight 权重越大,访问机会越多
//# www.myweb.com 为 upstream 的名字,为方便一般用域名
upstream www.myweb.com{
server 192.168.0.105:9100 weight=3;
server 192.168.0.106:9100 weight=1;
}
2.配置 server 模块
location /myweb {
proxy_pass http://www.myweb.com
}
----------------------------------------
----------------------------------------
nginx 常用负载均衡策略
----------------------------------------
1.轮询 默认
每个请求轮流的分配到不同的后端服务器,自动过滤故障节点
upstream www.myweb.com{
server 192.168.0.105:9100;
server 192.168.0.106:9100;
}
------------------------
2.权重
每个请求按配置比例分发到不同的后端服务器,权值越大,访问比例越大,用于后端服务器性能不均的情况
upstream www.myweb.com{
server 192.168.0.105:9100 weight=3;
server 192.168.0.106:9100 weight=1;
}
------------------------
3.ip_hash
每个请求按访问者 ip 的 hash 值分配,每个客户端固定访问同一台后端服务器,可以解决 session 丢失的问题
upstream www.myweb.com{
ip_hash;
server 192.168.0.105:9100;
server 192.168.0.106:9100;
}
------------------------
4.最少连接
请求被转发到连接数最少的服务器上
upstream www.myweb.com{
least_conn;
server 192.168.0.105:9100;
server 192.168.0.106:9100;
}
----------------------------------------
----------------------------------------
nginx 其他配置
----------------------------------------
配置备用机器,当所有的非 backup 机器 down 的时候,才请求 backup 机器
可用于在访问量低的时间段滚动更新,配置几个节点 backup, 然后 reload 不影响外部请求,更新完再换几个节点
upstream www.myweb.com{
server 192.168.0.105:9100;
server 192.168.0.106:9100 backup;
}
----------------------------------------
----------------------------------------
nginx 静态代理
----------------------------------------
nginx 处理静态资源性能更好,效率更高
配置 nginx.conf
----------------------
方式一
匹配文件扩展名
//# ~ 正则匹配
//# 第一个 . 表示任意字符
//# * 表示一个或多个字符
//# \. 斜杠是转义字符
//# | 表示或者
//# $ 表示结尾
//# location 匹配规则,ip:port = root
//# http://192.168.1.105:9100/myweb/image/001.jpg
//# /opt/static/myweb/image/001.jpg
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
----------------------
方式二
匹配路径
//# xxx/js/xxxx
location ~ .*/(js|css|img|images)$ {
root /opt/static;
}
----------------------------------------
----------------------------------------
nginx 动静分离
----------------------------------------
动态资源,如 jsp 由 tomcat / jboss 服务器处理
静态资源,如 css, js 等由 nginx 服务器处理
----------------------------------------
----------------------------------------
nginx 虚拟主机
----------------------------------------
把一个服务器虚拟成多个服务器来使用,nginx.conf 中的每一个 server 标签对应一个虚拟主机
----------------------
基于域名的虚拟主机
根据域名来区别不同的虚拟主机,常用于对外提供服务的 web 网站
server {
}
----------------------
基于端口的虚拟主机
根据端口来区别不同的虚拟主机,常用于内部网站
----------------------------------------