一、什么是Nginx?html
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,其特色是占用内存少,并发能力强,在同类型的网页服务器中表现优秀 Nginx是由伊戈尔.塞索耶夫开发的,于2004年10月4日公开源码,以类BSD许可证形式发布 Nginx因它的稳定性,丰富的功能,示例配置文件和低系统资源的消耗而闻名 。python
二、有人用Nginx吗?linux
中国大陆使用Nginx的网站: 淘宝,京东,腾讯,百度,新浪,网易...nginx
三、为何选择Nginx?(优势)web
做为Web服务器:正则表达式
一、相比Apache,Nginx使用资源更少,支持更多的并发链接,体现更高的效率,使Nginx倍受欢迎。算法
二、Nginx可以支持高达50000个并发链接数的响应。 django
做为负载均衡服务器:后端
一、Nginx既能够在内部直接支持Redis和PHP,也能够支持做为HTTP代理服务器对外进行服务,Nginx使用C编写,不管是系统资源开销仍是CPU使用效率都处理的很是优秀。 数组
二、Nginx安装很是简单,配置文件很是简洁,Bug很是少:Nginx启动很是容易,而且几乎能够作到7 * 24小时不间断运行,即便运行数个月也不须要从新启动。
四、Nginx怎么安装?
Nginx安装主要有两种方式:
1、源码安装
1. 下载源码压缩包
2. 安装源码编译依赖包 gcc,zlib,make...
3. 配置编译模块
4. make && make test
5. make install
2、包管理工具安装
1. 去官网将所使用依赖添加到包管理工具中
2. 更新包管理工具资源
3. 使用包管理工具安装
五、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 禁止开机自启
六、Nginx配置文件怎么搞?
Nginx配置文件包含指定指令控制的模块。
指令分为简单指令和块指令
一个简单指令由名称和参数组成,以空格分隔,并以分号结尾。
一个块指令和简单指令具备相同的结构,但不是以分号结束,而是以一个大括号包围的一堆附。
加指令结束
若是一个大括号内能够有其余的指令,它就被称为一个上下文,好比(events,http,server,location)
指令以下:
nginx -t 不运行,仅测试配置文件 nginx -c configpath 从指定路径加载配置文件 nginx -t -c configpath 测试指定配置文件
七、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中匹配的部分,没有匹配的部分将会在文件系统中搜索
八、用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 #按后端响应时间来分(第三方的)