一、nginx是什么
Nginx是一款高性能的HTTP和反向代理服务器,在高连接并发的情况下,它能够支持高达50000个并发连接数的响应,内存、CPU等系统资源消耗却很低,运行很稳定
二、nginx的作用
1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器
2、负载功能(与高并发高可用对应):对后台服务器集群进行负载
3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责
三、相关概念
正向代理与反向代理
1、代理:客户端自己请求出现困难。客户请了一个代理,来代自己做事,就叫代理
2、反向代理:多个服务端推出来的一个代理
四、源码安装nginx
先去https://github.com/openresty/echo-nginx-module/tags下载echo的源码包echo-nginx-module-0.62.tar.gz
或者链接:https://pan.baidu.com/s/1VOIO5SXUkwirG0_1EGBGCA 提取码:085p
放到之前的共享文件夹(D:\zc\tools\docker\docker_study)中,这个共享文件夹是在Nginx基础(1)—— win7上配置环境 中设置的
echo命令,是为了后面学习location方便测试,根据自己需要安装
进入正题
nginx有多种安装方式,比如源码安装,yum安装
一般使用源码安装,好处是可以指定安装位置
安装步骤:
注:一般系统中已经装了了make和g++,无须再装,我们这里不需要装g++,但需要装make
安装make:
yum -y install autoconf automake make
安装g++:
yum -y install gcc gcc-c++
注:安装nginx依赖的库
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum install -y openssl openssl-devel
注:安装相关命令
yum -y install wget
yum -y install tar
注:进入共享文件夹,解压echo的源码,echo是为了后面测试,根据自身需要选择是否安装
cd /docker_study
tar -zxvf echo-nginx-module-0.62.tar.gz
注:下载nginx源码
wget http://nginx.org/download/nginx-1.9.15.tar.gz
tar -zxvf nginx-1.9.15.tar.gz
cd nginx-1.9.15
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/docker_study/echo-nginx-module-0.62
注:--prefix指定安装目录。
注:--with-http_ssl_module安装https模块。
注:如果不安装echo,可以不加--add-module=/docker_study/echo-nginx-module-0.62
注:最后安装并且编译
make && make install
我们这里指定了安装路径为/usr/local/nginx,然后进入该目录,启动nginx
./sbin/nginx
在页面浏览器中输入http://172.17.0.2/,看到如下页面,表示nginx启动成功
五、目录结构
我们进入/usr/local/ngnx目录下
Conf | 配置文件,最主要的配置文件nginx.con |
Html | 网页文件,放静态文件的 |
Logs | 日志文件 |
Sbin | 二进制程序, 启动程序 |
这里顺便介绍一下常用命令
启停命令
./nginx -c nginx.conf 指定nginx配置文件,如果不指定,默认为NGINX_HOME/conf/nginx.conf
./nginx -s stop 停止
./nginx -s quit 退出
./nginx -s reload 重新加载nginx.conf
发送信号的方式
kill -QUIT 进程号 安全停止
kill -TERM 进程号 立即停止
六、Nginx模型
Nginx会按需同时运行多个进程:
一个主进程(master)和几个工作进程(worker),配置了缓存时,还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等
所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。
主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份(user配置项)运行。
主进程主要完成如下工作:
1. 读取并验正配置信息
2. 创建、绑定及关闭套接字
3. 启动、终止及维护worker进程的个数
4. 无须中止服务而重新配置工作特性
5. 重新打开日志文件
worker进程主要完成的任务包括:
1. 接收、传入并处理来自客户端的连接
2. 提供反向代理及过滤功能
3. nginx任何能完成的其它任务
七、nginx.conf配置文件解析
首先大致了解一下配置文件的结构
7.1 全局配置
#user nobody;
worker_processes 1;
worker_rlimit_nofile 100000;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
下面解析每行配置的作用:
user:主模块命令,指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行
worker_processes:指定Nginx要开启的进程数,一般设置为CPU核心数
error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,而crit(严重)输出日志最少,默认是error
pid: 用来指定进程id的存储文件位置
Event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。
其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选
worker_connection是设置nginx每个进程最大的连接数,默认是1024,所以nginx最大的连接数 max_client = worker_processes * worker_connections
进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit
7.2 应用配置
#nginx对http服务器相关属性的设置
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
#gzip on;
#下面是server段虚拟主机的配置(可多个,对应不同虚拟主机)
server {
//省略.....
}
}
下面解析每行配置的作用:
include mime.types; | 主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主配置文件的简洁 |
default_type application/octet-stream; | 默认文件类型,当文件类型未定义时候就使用这类设置的 |
#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent""$http_x_forwarded_for"'; #access_log logs/access.log main; | 指定nginx访问日志的格式,可根据自己需要进行配置日志格式 |
sendfile on; | 开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝 |
#tcp_nopush on; | 开启TCP_NOPUSH套接字(sendfile开启时有用) |
#keepalive_timeout 0; | 客户端连接超时时间 |
#gzip on; | 设置是否开启gzip模块 |
以上配置,通常只需要配置一次,无需修改,下面server部分才是我们经常需要修改的地方
7.3 server配置
server {
listen 80; 虚拟主机的服务端口
server_name localhost; 用来指定ip或者域名,多个域名用逗号分开
#charset koi8-r;
location / {
#地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理
root html; 虚拟主机的网页根目录
index index.html index.htm; 默认访问首页文件
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
一个server模块 对应一个虚拟主机,我们可以配置多个,下节我们会学习重点内容 location和rewrite