什么是nginx?
nginx是一个Http服务器(或者叫web服务器)、反向代理服务器、邮件代理服务器、和通用TCP/UDP代理服务器,具有占有内存少,启动速度快,并发能力强的特点。
为什么使用nginx?
-
正向代理——“科学上网”,访问一些网站
-
反向代理——进行内网转发,访问真实服务器
-
动静分离——实现前后端分离,加快静态文件的处理及访问速度
-
负载均衡——请求分发,提高服务器使用效率
nginx的安装配置(以centos系统为例)
1.官网下载安装包(http://nginx.org/en/download.html)或者直接使用wget命令
2.准备安装环境(已有环境可跳过此步)
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
3.上传安装包到服务器,使用tar命令解压
4.进入解压后的文件夹,使用以下命令配置(在默认配置基础上加上了https支持,也可以自行添加其它配置项)
./configure --prefix=/usr/local/nginx --with-http_ssl_module
5.使用以下命令进行编译和安装
make
make install
6.进入 /usr/local/nginx/sbin 目录,输入./nginx即可启动nginx,查看版本号和运行状态,如下图
7.安装成功
nginx常用命令
-
启动:./nginx
-
停止:./nginx -s quit 或者 ./nginx -s stop 或者kill进程号
-
测试配置:./nginx -t
-
重启:./nginx -s reload
-
查看进程:ps aux|grep nginx
-
显示版本:nginx -v 或者 nginx -V
-
开机启动:在/etc/rc.local文件底部添加一行/usr/local/nginx/sbin/nginx
配置文件(nginx.conf)
1.常用变量
1.$remote_addr 与 $http_x_forwarded_for 记录客户端的ip地址;
2.$remote_user :记录客户端用户名称;
3.$time_local :记录访问时间与时区;
4.$request :记录请求的url与http协议;
5.$status :记录请求状态;成功是200;
6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
7.$http_referer :记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
2.配置文件主要结构
-
main(全局配置)
-
http(服务器配置)
-
upstream(负载均衡配置)
-
server(主机配置)
-
location(url匹配配置)
3.全局配置
user nobody;#指定nginx worker进程运行用户以及用户组 默认为nobody
worker_processes 1;#指定开启进程数 默认1,建议与cpu数量一致
error_log logs/error.log notice;#定义全局错误日志文件 路径及输出级别,debug>info>notice>warn>error>crit
pid logs/nginx.pid;#指定进程pid的文件名及路径
worker_rlimit_nofile 65535;#用于绑定 worker 进程和 CPU,Linux 内核 2.4 以上可用。
events {
worker_connections 1024;#用于定义 nginx 每个进程的最大连接数,默认1024。
}
4.http配置
http{
#对包含文件的设定
include mime.types;
#核心模块指令,默认类型为二进制流,未能解析时会下载文件
default_type application/octet-stream;
#指定 nginx 日志的输出格式 main为名称
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#允许客户端请求的最大的单个文件字节数
client_max_body_size 20m;
#客户端请求头的 headerbuffer 大小
client_header_buffer_size 32K;
#客户端请求中较大的消息头的缓存最大数量和大小,4 为个数,128K 为大小
large_client_header_buffers 4 32k;
#参数用于开启高效文件传输模式 将 tcp_nopush 和 tcp_nodelay 两个指令设置为 no 用于防止网络阻塞
Sendfile on;
tcp_nopush on;
tcp_nodelay on;
#客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接
keepalive_timeout 60;
#客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,nginx 将返回 Request time out (408) 错误
client_header_timeout 10;
#客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,nginx 将返回 Request time out (408) 错误
client_body_timeout 10;
#响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx 将会关闭连接。
send_timeout 10;
}
5.upstream配置
调度算法
-
轮询(默认)——每个请求按时间顺序逐一分配到后端服务器
-
weight——权重分配,weight值越大,分配到访问的几率越高,可以理解为加权轮询
-
ip_hash——按访问ip分配,每个ip的请求固定访问一台后端服务器,可以解决session保持的问题
-
fair——根据页面加载时间和后台响应时间来对请求进行更加智能的分配
-
url_hash——每个请求url分配到同一台后端服务器
-
least_conn——根据后端服务器的连接情况分配客户请求,连接少的服务器会被优先分配请求
(主要用到前三种调度方式)
#uptest 负载均衡器名称 可在后面引用
upstream uptest{
weight;#调度算法
server 172.0.0.1:80 weight=1;
server 172.0.0.2:8081 weight=2;
server 172.0.0.3:80 weight=1 backup;
}
server参数
-
down——表示该server暂时不参与负载
-
weight——权重,默认为1,weight值越大,分配到访问的几率越高
-
max_fails——允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
-
fail_timeout——max_fails次失败后,暂停的时间
-
backup——只有其它所有的非backup机器down或者忙的时候,请求backup机器
(当调度算法为 ip_hash 时,server参数状态不能是 weight 和 backup)
6.server主机配置
server{
listen 80;#监听端口
server_name localhost;#ip或域名 多个用空格分开
charset koi8-r;#网页默认编码格式
access_log logs/host.access.log main;#输出日志路径及输出格式
#location 匹配请求url
location / {
root html;#指定根目录
index index.html index.htm;#默认首页地址
}
}
7.location配置
支持正则表达式和条件判断匹配,可以灵活过滤和配置请求url,此处不展开讲了,有兴趣可以网上搜索
#后缀匹配静态图片资源
location ~ .*\.(png|jpg|jpeg|gif|bmp|swf)$ {
root /mnt/upload;#根目录
expires 15d;#过期时间 15天
}
#后端服务请求转发
location /prod-api/ {
proxy_pass http://localhost:8081;#proxy_pass 转发地址
}
总结
以上就是nginx简单的学习入门了,想要深入学习可以参考nginx中文文档和一些优秀的博客文章,主要是请求地址的匹配规则、转发和负载均衡的应用等知识点,这里就不再多言了。