文章目录
一、什么是Nginx
1、正向代理
2、反向代理
3、负载均衡
4、动静分离
二、centos7环境安装Nginx
1、安装依赖
2、下载安装包
3、安装
4、启动
5、停止
三、Nginx核心基础知识
1、nginx核心目录
2、常用命令
3、默认配置文件讲解
4、Nginx虚拟主机-搭建前端静态服务器
5、使用nignx搭建图片-文件服务器
(1)root和alias的区别
四、挖掘accessLog日志
1、nginx访问日志的用处
2、Nginx统计站点访问量、高频url统计
3、自定义日志格式,统计接口响应耗时
五、nginx负载均衡
1、常见负载均衡策略
(1)节点轮询(默认)
(2)weight 权重配置
(3)ip_hash(固定分发)
2、节点状态配置
六、Nginx探测后端节点可用性
一、什么是Nginx
- Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。使用C语言开发。
- Nginx专为性能优化而开发,性能是其重要的考量,实现上非常注重效率,能经受高负载的考验,能支持高达50000个并发连接数
1、正向代理
正向代理:代理的是客户端,隐藏的客户端。例如:VPN
- 客户端和目标服务器之间的服务器,客户端向代理发送一个请求指定目标服务器,然后代理向目标服务器请求并获得内容,并返回给客户端,平时说的代理服务器一般是正向代理服务器
- 核心:用户知道自己访问的目标服务器
- 场景:跳板机、访问原来无法访问的网站, 比如国外的一些站点
2、反向代理
反向代理:代理的是服务端,隐藏的是服务端。例如:Nginx
- 客户端和目标服务器之间的服务器,客户端向代理发送一个请求,然后代理向目标服务器请求并获得内容,并返回给客户端。反向代理隐藏了真实的服务器
- 核心:客户端不知道要访问的目标服务器是哪台服务器,代理会根据一定的策略选择一个真实的服务器进行请求
- 场景:访问淘宝,知道访问的域名是taobao.com, 但是后面提供数据的具体是什么域名或ip我们是不知道的
3、负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
4、动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
二、centos7环境安装Nginx
1、安装依赖
nginx是使用C语言开发的,在安装Nginx前需要安装一些依赖。这些依赖可以给nginx增加很多应用。
这些依赖可以一个个分开安装,也可以一个命令全部搞定。如下:
$ sudo yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2、下载安装包
从官网上下载安装包,上传到服务器。或者结果通过wget命令下载到服务器。
我把它下载到了linux的 /usr/local/src/server目录下
$ sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
然后解压
$ sudo tar -zxvf nginx-1.18.0.tar.gz
3、安装
进入解压目录,检测、编译、安装
$ cd nginx-1.18.0 $ ./configure # 检测 $ make # 编译 $ make install # 安装
此次安装使用的是默认的配置安装。
默认安装路径:/usr/local/nginx
4、启动
进入sbin目录,启动
$ ./nginx
查看nginx进程
$ ps -ef | grep "nginx"
或者通过80端口就可以访问了。
5、停止
$ ./nginx -s stop
三、Nginx核心基础知识
1、nginx核心目录
conf #所有配置文件目录 nginx.conf #默认的主要的配置文件 nginx.conf.default #默认模板 html # 这是编译安装时Nginx的默认站点目录 50x.html #错误页面 index.html #默认首页 logs # nginx默认的日志路径,包括错误日志及访问日志 error.log #错误日志 nginx.pid #nginx启动后的进程id access.log #nginx访问日志 sbin #nginx命令的目录 nginx #启动命令
2、常用命令
$ ./nginx #默认配置文件启动 $ ./nginx -s reload #重启,加载默认配置文件 $ ./nginx -c /usr/local/nginx/conf/nginx.conf #启动指定某个配置文件 $ ./nginx -s stop #停止 #关闭进程,nginx有master process 和worker process,关闭master即可 $ ps -ef | grep "nginx" # 查看进程 $ kill -9 PID # 杀死进程
3、默认配置文件讲解
# 每个配置项由配置指令和指令参数 2 个部分构成 #user nobody; # 指定Nginx Worker进程运行以及用户组 worker_processes 1; # #error_log logs/error.log; # 错误日志的存放路径 和错误日志 #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; # 进程PID存放路径 # 事件模块指令,用来指定Nginx的IO模型,Nginx支持的有select、poll、kqueue、epoll 等。不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选 events { use epoll; # 定义Nginx每个进程的最大连接数, 作为服务器来说: worker_connections * worker_processes, # 作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2。因为反向代理服务器,每个 并发会建立与客户端的连接和与后端服务的连接,会占用两个连接 worker_connections 1024; } 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; # 是否开启高效传输模式 on开启 off关闭 sendfile on; #减少网络报文段的数量 #tcp_nopush on; #keepalive_timeout 0; # 客户端连接保持活动的超时时间,超过这个时间之后,服务器会关闭该连接 keepalive_timeout 65; #gzip on; # 虚拟主机的配置 server { listen 80; # 虚拟主机的服务端口 server_name localhost; #用来指定IP地址或域名,多个域名之间用空格分开 #charset koi8-r; #access_log logs/host.access.log main; #URL地址匹配 location / { 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; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm # } #} }
4、Nginx虚拟主机-搭建前端静态服务器
什么是虚拟主机?
- 指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一个虚拟主机,每台虚拟主机都可以对外提供Web服务,并且互不干扰,就类似虚拟机
- 利用虚拟主机把多个不同域名的网站部署在同一台服务器上,节省了服务器硬件成本和相关的维护费用
- 虚拟主机的配置如下:
server { listen 80; server_name aabbcc.com; location / { # aabbcc.com会访问服务器的路径 aabbcc.com:80/t9101.html root /usr/local/src/nginx/html; index youyou.html; } } server { listen 80; server_name aabbccdd.com; location / { # aabbccdd.com会访问nginx的 root html; index youyou.html index.htm; } }
这里需要在本机配置host域名:aabbcc.com和aabbccdd.com
我们开发的前端项目(例如:vue)就可以部署到这里。
5、使用nignx搭建图片-文件服务器
现在的项目中,是很少在javaweb项目中存放图片和文件。
公司一般会提供图片服务器(fastdfs)或者云厂商的CDN(阿里云的oss存储)
(1)root和alias的区别
Nginx指定文件路径有两种方式root和alias,这两者的用法区别在于对URI的处理方法不同。
区别:
- alias是一个目录别名的定义,root则是最上层目录的定义。
- 还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。而root则可有可无
# alias location /i/{ alias /usr/local/nginx/html/admin/; } #若按照上述配置的话,则访问/i/目录里面的文件时,nginx会自动去/usr/local/nginx/html/admin目录找文件。 # root location /i/ { root /usr/local/nginx/html/admin; } #若按照这种配置的话,则访问/i/目录下的文件时,nginx会去/usr/local/nginx/html/admin/i下找文件。
图片服务器配置:
server { listen 80; server_name aabbccdd.com; location /app/img { alias /usr/local/software/img/; } }
图片的访问地址如下:http://aabbccdd.com:80/app/img/a.jpg
同一个请求地址,会有如下两种访问地址:
alias : /usr/local/software/img/a.jpg
root : /usr/local/software/img/app/img/a.jpg