【Nginx】系列之 一 入门安装

目录

一、Nginx概述

二、yum安装

三、nginx.conf配置文件详解

3.1 全局块

3.2 events 块

3.3 HTTP 块

四、Nginx 常用命令

五、Nginx代理

4.1 正向代理

4.2 反向代理

六、Nginx的Master-Worker模式

6.1 Master进程的作用是?

6.2 Worker进程的作用是?

6.3 Nginx如何做到热部署?


一、Nginx概述


Nginx系列之 一 反向代理_开着拖拉机回家的博客-CSDN博客

Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,在互联网项目中广泛应用。

Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数。

上图基本上说明了当下流行的技术架构,其中Nginx有点入口网关的味道。


二、yum安装


添加nginx到yum源

sudo rpm -Uvh  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm


[root@hdp105 ~]# cat  /etc/yum.repos.d/nginx.repo 
# nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

repo 源地址添加成功

安装nginx

# 安装
sudo yum install -y nginx

# 启动
sudo systemctl start nginx

# 开机自启动
sudo systemctl enable nginx

# 查看启动状态
sudo systemctl status  nginx
# 查看日志
tail  -100f    /var/log/nginx/error.log

启动状态为active

成功访问


三、nginx.conf配置文件详解


如下是使用yum安装后默认的配置文件

cat  /etc/nginx/nginx.conf 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

3.1 全局块


从配置文件开始到 events 块之间,主要是设置一些影响 Nginx 服务器整体运行的配置指令。

并发处理服务的配置,值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。

  • user :指定Nginx Worker进程运行用户以及用户组,默认由nginx账号运行。
  • worker_processes: 指定了Nginx要开启的子进程数。每个Nginx进程平均耗费10M~12M内存。这里默认为 auto, 自动参数可以自动检测 cpu cores 并设置 worker_processes 参数 ,如下图。
  • error_log:用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  • pid: 指定进程id的存储文件位置。

3.2 events 块


影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 workprocess 下的网络连接进行序列化,是否允许同时接收多个网络连接等等。

支持的最大连接数:

worker_connections : 定义Nginx每个进程的最大连接数,即接收前端的最大请求数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_clients=worker_processes*worker_connections,如:8*1024=8092。在作为反向代理时,Max_clients变为:Max_clients = worker_processes * worker_connections/4(官方建议)。 进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效。

3.3 HTTP 块


诸如反向代理和负载均衡都在此配置。

http      # http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • location块:配置请求的路由,以及各种页面的处理情况。
location[ = | ~ | ~* | ^~] url{

}

location 指令说明,该语法用来匹配 url,语法如上:

  • =:用于不含正则表达式的 url 前,要求字符串与 url 严格匹配,匹配成功就停止向下搜索并处理请求。
  • ~:用于表示 url 包含正则表达式,并且区分大小写。
  • ~*:用于表示 url 包含正则表达式,并且不区分大小写。
  • ^~:用于不含正则表达式的 url 前,要求 Nginx 服务器找到表示 url 和字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再匹配。
  • 如果有 url 包含正则表达式,不需要有 ~ 开头标识。


四、Nginx 常用命令


输入nginx -help 可以查看参数基本使用

[root@hdp105 conf]# nginx -help
nginx version: nginx/1.24.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /etc/nginx/)
  -e filename   : set error log file (default: /var/log/nginx/error.log)
  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

使用

# 查看版本
nginx -v

# 重新加载 Nginx 配置
nginx -s reload


五、Nginx代理


5.1 正向代理


由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助VPN来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。

4.2 反向代理


反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。


六、Nginx的Master-Worker模式


启动Nginx后,其实就是在80端口启动了Socket服务进行监听,如图所示,Nginx涉及Master进程和Worker进程。

Master-Worker模式

6.1 Master进程的作用是?


读取并验证配置文件nginx.conf;管理worker进程;

6.2 Worker进程的作用是?


每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

6.3 Nginx如何做到热部署?


所谓热部署,就是配置文件nginx.conf修改后,不需要stop Nginx,不需要中断请求,就能让配置文件生效!(nginx -s reload 重新加载 ; nginx -t 检查配置)

通过上文我们已经知道worker进程负责处理具体的请求,那么如果想达到热部署的效果,可以想象:

方案一:

修改配置文件nginx.conf后,主进程master负责推送给woker进程更新配置信息,woker进程收到信息后,更新进程内部的线程信息。(有点valatile的味道)

方案二:

修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。

Nginx采用的就是方案二来达到热部署的!


参考文章:

nginx配置详解_nginx 配置详解_yshir-phper的博客-CSDN博客

https://www.cnblogs.com/ysocean/p/9392908.html

8分钟带你深入浅出搞懂Nginx - 知乎

神器 Nginx 的学习手册 ( 建议收藏 )

猜你喜欢

转载自blog.csdn.net/qq_35995514/article/details/131668024