Nginx从入门到精通(超级详细)(上)

简介: Nginx从入门到精通(超级详细)(上)

文章目录

一、什么是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


相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
7月前
|
缓存 负载均衡 应用服务中间件
Nginx从入门到精通(超级详细)(下)
Nginx从入门到精通(超级详细)(下)
|
负载均衡 前端开发 安全
Nginx从入门到精通
本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx。 examples 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快速看到演示效果。 ==================================== 文章作者: heshaohua 文章来源: Java技术栈 | 微服务架构 | 前端技术 文章链接: https://www.92yangyi.top/archives/39 版权声明: 内容遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
310 0
|
应用服务中间件 nginx
nginx开发从入门到精通 http://tengine.taobao.org/book/
nginx开发从入门到精通 http://tengine.taobao.org/book/
1727 0
|
应用服务中间件 nginx
Nginx开发从入门到精通
http://tengine.taobao.org/book/
1170 0
|
16天前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
49 0
|
16天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
24 0
|
1月前
|
安全 应用服务中间件 Linux
linux nginx的配置总结
linux nginx的配置总结
19 0
|
16天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
47 0
|
1天前
|
应用服务中间件 nginx
nginx配置集群轮训策略
nginx配置集群轮训策略
9 0
|
2天前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略