1、什么是Nginx?
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,其特点是占用内存少,并发能力强,在同类型的网页服务器中表现优秀 Nginx是由伊戈尔.塞索耶夫开发的,于2004年10月4日公开源码,以类BSD许可证形式发布 Nginx因它的稳定性,丰富的功能,示例配置文件和低系统资源的消耗而闻名 。
2、有人用Nginx吗?
中国大陆使用Nginx的网站: 淘宝,京东,腾讯,百度,新浪,网易...
3、为什么选择Nginx?(优点)
作为Web服务器:
1、相比Apache,Nginx使用资源更少,支持更多的并发连接,体现更高的效率,使Nginx倍受欢迎。
2、Nginx能够支持高达50000个并发连接数的响应。
作为负载均衡服务器:
1、Nginx既可以在内部直接支持Redis和PHP,也可以支持作为HTTP代理服务器对外进行服务,Nginx使用C编写,不论是系统资源开销还是CPU使用效率都处理的非常优秀。
2、Nginx安装非常简单,配置文件非常简洁,Bug非常少:Nginx启动非常容易,并且几乎可以做到7 * 24小时不间断运行,即使运行数个月也不需要重新启动。
4、Nginx怎么安装?
Nginx安装主要有两种方式:
一、源码安装
1. 下载源码压缩包
2. 安装源码编译依赖包 gcc,zlib,make...
3. 配置编译模块
4. make && make test
5. make install
二、包管理工具安装
1. 去官网将所使用依赖添加到包管理工具中
2. 更新包管理工具资源
3. 使用包管理工具安装
5、Nginx怎么控制?
启动Nginx
nginx [ -c configpath]
信息查看
nginx -v
nginx -V
控制Nginx
nginx -s signal
stop 快速关闭
quit 优雅的关闭
reload 重新加载配置
通过系统管理
systemctl status nginx 查看nginx状态
systemctl start nginx 启动nginx服务
systemctl stop nginx 关闭nginx服务
systemctl enable nginx 设置开机自启
systemctl disable nginx 禁止开机自启
6、Nginx配置文件怎么搞?
Nginx配置文件包含指定指令控制的模块。
指令分为简单指令和块指令
一个简单指令由名称和参数组成,以空格分隔,并以分号结尾。
一个块指令和简单指令具有相同的结构,但不是以分号结束,而是以一个大括号包围的一堆附。
加指令结束
如果一个大括号内可以有其他的指令,它就被称为一个上下文,比如(events,http,server,location)
指令如下:
nginx -t 不运行,仅测试配置文件
nginx -c configpath 从指定路径加载配置文件
nginx -t -c configpath 测试指定配置文件
7、Nginx配置文件结构怎么搞?
main 全局设置
events{ 工作模式,连接配置
...
}
http{ http的配置
...
upstream xxx{ 负载均衡配置
...
}
server{ 主机设置
...
location xxx{ URL匹配
...
}
}
}
#main
user nginx; worker进程运行的用户和组
worker_processes 1; 指定Nginx开启的子进程数,多核CPU建议设置和CPU数量一样的进程数
error_log xxx level;用来定义全局错误日志文件,通常放在var中,level有 debug,info,notice, warn,error,crit
pid xxx; 指定进程id的存储文件位置
#events
指定工作模式和以及连接上限
events{
use epoll;
worker_connections 1024;
}
use 指定nginx工作模式
epoll 高效工作模式,linux
kqueue 高效工作模式, bsd
poll 标准模式
select 标准模式
worker_connections 定义nginx每个进程的最大连接数
正向代理 连接数 * 进程数
反向代理 连接数 * 进程数 / 4
linux系统限制最多能同时打开65535个文件,默认上限就是65535,可解除 ulimit -n 65535
#http
最核心的模块,主要负责http服务器相关配置,包含server,upstream子模块
include mime.types;设置文件的mime类型
include xxxconfig; 包含其它配置文件,分开规划解耦
default_type xxx; 设置默认类型为二进制流,文件类型未知时就会使用默认
log_format 设置日志格式
sendfile 设置高效文件传输模式
keepalive_timeout 设置客户端连接活跃超时
gzip gzip压缩
#server
用来指定虚拟主机
listen 80; 指定虚拟主机监听的端口
server_name localhost; 指定ip地址或域名,多个域名使用空格隔开
charset utf-8; 指定网页的默认编码格式
error_page 500 502 /50x.html 指定错误页面
access_log xxx main; 指定虚拟主机的访问日志存放路径
error_log xxx main; 指定虚拟主机的错误日志存放路径
root xxx; 指定这个虚拟主机的根目录
index xxx; 指定默认首页
#location
核心中的核心,以后的主要配置都在这
主要功能:定位url,解析url,支持正则匹配,还能支持条件,实现动静分离
语法
location [modifier] uri{
...
}
modifier 修饰符
= 使用精确匹配并且终止搜索
~ 区分大小写的正则表达式
~* 不区分大小写的正则表达式
^~ 最佳匹配,不是正则匹配,通常用来匹配目录
常用指令
alias 别名,定义location的其他名字,在文件系统中能够找到,如果location指定了正则表达式,alias将会引用正则表达式中的捕获,alias替代lication中匹配的部分,没有匹配的部分将会在文件系统中搜索
8、用Nginx部署项目怎么搞?(Django为例):
django 服务器
runserver
wsgi
uwsgi : web服务器,多线程处理的不错
1. pip install uwsgi
2. 工程目录下创建uwsgi.ini 配置文件
3. 书写配置信息
4. 使用uwsgi服务器
- 启动 uwsgi --ini uwsgi.ini
- 停止 uwsgi --stop uwsgi.pid
nginx配置
location /static{
alias xxx/static/;
}
location / {
include uwsgi_params;
uwsgi_pass localhost:8000;
}
反向代理
proxy_pass URL; #反向代理转发地址,默认不转发header
proxy_set_header HOST $host; #需要转发header则设置
proxy_method POST; #转发的方法名
proxy_hide_header Cache-Control; #指定头部不被转发
proxy_pass_header Cache-Control; #设置哪些头部转发
proxy_pass_request_header on; #设置转发http请求头
proxy_pass_request_body on; #设置转发请求体
upstream
负载均衡模块,通过一个简单的调度算法来实现客户ip到后端服务器的负载平衡
#写法
upstream myproject{
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001 down;
server 127.0.0.1:8002 weight=3;
server 127.0.0.1:8003 backup;
fair;
}
#负载均衡算法
weight #负载权重
down #当前server不参与负载均衡
backup #其它机器全down掉或满载使用此服务
ip_hash #按每个请求的hash结果分配
fair #按后端响应时间来分(第三方的)