【教程】nginx快速学习
备注
2023/3/1 星期三
由于之前的自己的博客用了可视化的后台管理系统,所以一直没有系统的学习过nginx,准备最近抽时间把nginx好好学习一下
一、基础概念
1.nginx概念
nginx是一个由俄罗斯人用c语言编写的开源的高性能的服务器引擎(web server),有些人也将服务器引擎称为中间件,同时也是一个支持多种协议的代理服务器,我们最常用到的功能除了他的引擎功能外还有反向代理和负载均衡。nginx还具有低内存、高并发、高可靠、高扩展的特点。
2.反向代理和负载均衡
正向代理的客户端通过中间代理访问服务器不同,反向代理是指当客户端将请求发送给中间代理的时候,中间代理会将请求选择性的交给不同的服务器。这样做的好处有很多,负载均衡也是基于这个技术实现的。
负载均衡是当客户端有大量请求时,nginx按照预设好的规则将不同的请求发送到不同服务器以减轻各服务器的压力的功能。
二、安装和部署
1.安装
nginx的安装主要有两种,使用包管理工具一键安装和下载源码编译安装,我们一般选择直接使用包管理工具
centos系列使用:
sudo yum install nginx
debain系列使用:
sudo apt install nginx
源码编译安装方式比较复杂,需要到官网下载源码,在系统上安装c语言编译环境和nginx所使用的库,再在运行./configure时指定需要配置的参数,官网有对应的教程这里就不再做过多赘述了
2.命令
nginx有以下命令
nginx -v
显示版本信息nginx -V
显示详细版本信息nginx -t
测试ngixn.conf文件是否有语法错误nginx -T
测试ngixn.conf文件是否有语法错误,并显示文件内容nginx -c [文件]
指定启动时的配置文件nginx -g [文件]
修改配置文件的补充文件nginx -s [参数]
参数 | 作用 |
---|---|
stop | 直接停止nginx服务 |
quit | 安全退出nginx服务 |
relaod | 重新加载nginx配置文件 |
reopen | 不中断服务的重启nginx |
三、配置文件结构
nginx中最核心最常用的文件就是nginx.conf了,我们先来学习一下nginx.conf文的文件结构。默认的nginx.conf文件会在/usr/nginx/conf/
目录下面。在nginx.conf文件一般可以分为三部分:被http包裹的http块、被events包裹的events块、http和event外的全局块。
1.全局块
全局块具有以下命令:
user [用户名] [所属组]
user用于配置worker进程的用户和用户组,所使用的用户须要在Linux中存在master_process [on/off]
master_process用于开启或关闭worker进程,只能设置为on和off,默认为onworker_process [数字/auto]
woker_process用于控制worker进程的数量一般建议调整为与主机cpu数相同即可daemon [on/off]
daemon用于控制nginx是否以守护进程的方式启动,默认为onpid [路径]
pid用于指定nginx的pid文件存放位置,如果不指定默认是/usr/local/nginx/logs/nginx.pidinclude [文件]
include用于包含其他配置文件,与c语言中的include效果类似
2.events块
accept_mutex [on/off]
accept_mutex用于设定当worker进程在休眠时如果收到请求是否要唤醒全部worker进程(对请求处理更加高效但是唤醒过多可能影响nginx性能)multi_accept [on/off]
multi_accept用于设置是否允许一个worker进程同时接受多个连接worker_connections [数字]
worker_connections用于指定一个worker进程的最大连接数,最大值为512use [方法]
use用于指定nginx使用的事件驱动,方法有selet、poll、epoll、kqueue
3.http块
default_type [mimetype]
default_type用于指定文件的默认解析类型,使用的格式是mimetype,如果不指定默认为text/plain也就是纯文本文件,default_type也可以写在其他块中,最常见的位置是http块里(后面的一些其他命令同理)access_log [路径] [格式名]
access_log用于指定nginx的日志信息的输出位置和使用的格式log_format [名称] [格式]
log_format用于指定日志的具体格式可以被access_log使用send_file [on/off]
send_file用于指定nginx是否使用Linux的sendfile()函数来传输文件,开启可以提升静态文件的传输速度,默认是关闭状态keepalive_timeout [时间]
keepalive_timeout用于指定长连接的超时时间,默认是75skeepalive_request [次数]
keepalive_request用于指定一次长连接最多请求的次数,默认是100次
4.server块
server块是http块中最重要的部分,有很多非常重要的指令
listen [端口号]
listen用于指定当前server块所监听的端口server_name [域名/ip]
server_name用于指定当前server块会处理的域名或者iperror_page [状态码] [页面文件]
error_page用于指定当访问发生错误时不同状态码返回的页面location [位置]{ location块中的命令 }
location是server块中子块,用于指定不同url所执行的不同命令,位置可以使用正则表达式进行匹配。location块中最基本的指令是root [目录]
和index [页面文件]
,root用于指定当前location块访问的资源所在的目录,index用于指定访问位置的默认页面文件