nginx基础学习(一):linux环境下nginx的安装和配置文件的初步认识

nginx目前在市场上使用是非常广泛的,作为一个开发人员,可以不会nginx的高级使用,但是基本的使用场景以及日常问题排查技能还是要有的。nginx使用的方向主要有三个,分别是路由功能、负载均衡功能以及静态资源服务功能。路由功能主要是用来将不同请求分发到不用的服务上,负载均衡是将请求分发到一个服务的集群中的不同虚拟机上,这两种有一点类似,但是存在本质的区别。再就是静态资源服务功能,以前的开发和现在的小公司服务,习惯将静态资源直接放在项目下,但是随着公司产品量和服务量的增多,静态资源自然也会增长,如果继续放在项目下,就会增加项目的压力。所以单独出来建立对应的静态资源服务器也是很常见的,这个时候就需要将静态资源的请求路由到对应静态资源服务器上。

nginx的三种使用场景

路由服务功能

对外提供服务不会直接将机器暴露给外界提供访问(安全问题),往往是提供统一的路由机器,由路由机器来将请求分发到内部提供真实服务的服务器上,处理请求后再通过路由机器响应给请求方。内部服务器很多,具体需要路由到那一台机器,这是就可以用到nginx的路由服务功能。实现思路如下:

在这里插入图片描述

负载均衡功能

负载均衡,一个服务集群部署,由多个机器组成,为了不让一台机器的压力过大而造成崩溃发现,就需要将所有的请求均衡的分配到每一台机器中,既能提高响应的速度也能降低单台机器的压力。nginx可以通过配置多台机器的负载实现。实现思路如下:

在这里插入图片描述

静态资源服务功能

这个其实和路由服务基本相同,只不过是将业务服务的路由改成静态资源服务的路由,另外加上一些静态资源的一些优化策略,让静态资源的响应速度更快,更有效(如静态资源的压缩,降低传输数据的量,提高传输速度)。实现思路可以参照路由服务功能。

linux环境下安装nginx

安装方式一

这种方式是推荐的,等说完第二种方式再做一个对比。安装步骤如下:

  • /usr/local/目录下使用wget下载nginx资源包

    wget http://nginx.org/download/nginx-1.9.0.tar.gz
    
  • 将下载的资源包使用tar命令解压,并进入到解压后的目录中

    tar -zxvf nginx-1.9.0.tar.gz
    cd nginx-1.9.0
    
  • 配置nginx的安装目录

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
    

    如果上面的shell脚本执行后没有执行成功,是因为缺少相关的依赖工具,需要提前安装依赖后再重新执行上面的命令,安装依赖命令如下:

    yum -y install pcre pcre-devel    
    yum -y install zlib zlib-devel
    yum install -y openssl openssl-devel
    
  • 编译&&安装nginx

    make && make install
    
  • 使用whereis命令去看看nginx的安装目录

    whereis nginx
    

    查询的结果:

    nginx: /usr/local/nginx
    

    这里看到nginx就是安装在上面configure配置的路径下面,在说第二种安装方式的时候会进行一个比较。

安装方式二

这种安装方式很简单,很省事。执行下面的命令即可。

yum -y install nginx

如果上面的命令执行报错,说明需要安装yum的epel-release扩展源。命令也很简单。如下:

yum -y install epel-release

到这里就安装结束了,看着比第一种方式要简单的很多,但是存在一个问题。执行一下whereis nginx命令,得到的输出结果如下:

nginx: /usr/sbin/nginx /etc/nginx /usr/lib64/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz

安装后的nginx被放到了不同的位置,分散开的,这个为后期的配置文件修改,日志查看提供了很大的不便,没有第一种方式好,统一放在一个指定的目录下。

nginx中的常用命令

nginx命令

启动命令:

/usr/local/nginx/sbin/nginx

重启命令:

/usr/local/nginx/sbin/nginx -s reload

停止命令:

/usr/local/nginx/sbin/nginx -s stop

检查配置文件是否正确(一般用于修改配置文件后重启之前,做配置文件正确性检查):

/usr/local/nginx/sbin/nginx -t

指定配置文件位置启动或重启:

/usr/local/nginx/sbin/nginx/ -c /usr/local/nginx.conf
或
/usr/local/nginx/sbin/nginx/ -c /usr/local/nginx.conf -s reload
nginx控制信号

nginx启动后,对应的pid是存在nginx目录下的nginx.pid文件中。可以通过cat命令读取文件获取pid。也可以通过ps -ef | grep nginx命令来获取pid。

主进程可处理信号:

  • TERMINT:表示快速关闭
  • QUIT:从容的关闭
  • HUP:重载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程
  • USR1:重新打开日志文件
  • USR2:平滑升级可执行程序
  • WINCH:从容关闭工作进程

发送控制信号的方式:

kill -TERM pid
#或者(/usr/local/nginx/是nginx的安装目录)
kill -TERM cat /usr/local/nginx/nginx.pid

nginx配置文件的初认识

nginx配置文件整体布局

nginx配置文件中主要分三个模块,分别是主全局配置、工作模型及连接上限配置、http服务相关属性。

  • 全局配置:里面包含的信息由当前用户信息、工作进程数(worker_processes 数量默认是机器的核心数,可以手动设置,一般推荐设置为核心数的两倍)、全局日志以及日志的级别设置、nginx进程的pid信息等。
  • 工作模型和连接上限:工作模型默认是epoll,连接上限(worker_connections)默认是1024。
  • http服务相关属性:其中包含http服务的全局设置,以及对应Server配置。每个Server路由到不同服务,可以使用upStream配置负载均衡,以及根据Location配置URL匹配的位置等。

在这里插入图片描述

nginx配置参数说明
  • worker_processes:工作进程数,默认是当前机器的核心数。
  • pid:当前nginx的进程编号,默认存储在logs/nginx.pid文件中。
  • worker_connections:连接上限,默认设值是1024。
  • max_clients:最大客户端连接数,这个是不会手动的设置,而是通过worker_processes和worker_connections相乘计算得到,如果是反向代理,需要除以4。
  • log_format:日志格式,可以定义多个,然后在定义具体日志的时候采用不同的格式。(根据指定格式生成日志,可以给大数据分析提供数据源)
  • keepalive_timeout:连接超时时间,表示浏览器发送请求,nginx转发到对应的服务器并等待服务器响应,如果超过这个连接时间,就不会再继续等待。
  • listen:表示监听的端口,此配置是放在http的server下。(http请求一般监听都是80端口,而https请求监听的是443端口)
  • server_name:监听的服务名称,如上面图中提到的www.itcrud.comorder.itcrud.com等。
  • location:指定URL匹配特定服务的位置和相关配置信息。
  • error_page:指定对应的响应码,当服务出现对应的错误时,给出相应的错误页面信息展示。
常用全局变量

这里的日志和应用的日志是类似的,使用不同的占位符来表示不同的信息,然后打印日志的时候,使用全局变量进行填充,形成一条具体的日志信息。当然这些全局变量不仅仅可以用于日志输出的方式,还可以用于一些请求参数的设值等。

  • $remote_addr:客户端的IP地址(代理服务器,显示代理服务器IP)
  • $remote_user:用于记录远程客户端的用户名称(一般是“-”)
  • $time_local:用于记录访问时间和时区
  • $request:响应状态码
  • $body_bytes_send:给客户端发送的文件主体内容字节数
  • $http_user_agent:用户使用的代理(一般为浏览器)
  • $http_x_forwarded_for:可以记录客户端IP,通过代理服务器来记录客户端的IP地址
  • $http_referer:可以记录用户是从哪个连接访问过来的
  • $args:请求行中的参数
  • $content_length:请求头中Content-length字段
  • $content_type:请求头中的Content-type字段
  • $document_root:当前请求的root指令中指定的值
  • $remote_port:客户端端口
  • $request_filename:当前请求的文件路径,由root或者alias指令与URI请求生成
  • $limit_rate:这个变量可以限制连接速率
  • $host:请求主机头字段,否则为服务器名称
  • $http_cookie:客户端cookie信息
  • $http_user_agent:客户端agent信息
  • $scheme:HTTP方法(如:http,https)
  • $uri:不带请求参数的当前URI,不包含主机名,和$document_uri相同
  • $request_uri:包含请求参数的原始URI,不包含主机名
  • $server_protocol:请求使用的协议,通常是HTTP/1.0或HTTP/1.1
  • $server_addr:服务器机制,在完成一次调用后可以确定此值
  • $server_name:服务器名称
  • $server_port:请求到达服务器的端口号
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值