Nginx的命令和配置文件
Nginx的优点
Nginx的优点
-
跨平台
: Nginx可以在大多数操作系统中运行,而且也有Windows的移植版本 -
配置简单
: 配置风格跟程序开发一样 -
非阻塞、高并发
: 数据复制时磁盘I/O的第一阶段是非阻塞的,在实际生产环境中跑到2-3万并发连接数(这得益于Nginx使用了最新的epoll模型) -
事件驱动
: 由于通信机制采用epoll模式所以支持更大的并发连接数 -
内存消耗小
: 处理大并发的请求内存消耗非常小,如在3万并发连接下开启的10个Nginx进程才消耗150M内存 -
成本低廉
: Nginx作为开源软件可以免费试用,而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币 -
内置健康检查功能
: 即使Nginx Proxy后端的某台Web服务器宕机了也不会影响前端访问 -
节省带宽
: 支持GZIP压缩并且可以添加浏览器本地缓存的Header头 -
稳定性高
: 使用反向代理的方式宕机的概率微乎其微
Nginx常用命令
Nginx的命令需要在sbin目录
下才能执行,也可以将Nginx的二进制文件配置到环境变量中这样就可以在任何目录下都能执行
# 编辑配置文件并使其生效:vim /etc/profile和source /etc/profile
ecport PATH=$JAVA_HOME/bin:$PATH
PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH
命令 | 功能 |
./nginx -v | 查看nginx的版本 |
./nginx -t | 检查配置文件正确性(如果有错误会报错并且会记录日志) |
./nginx | 启动nginx,启动服务后浏览器输入本机的ip地址就可以访问Nginx的默认页面(需要设置防火墙对80端口放行) |
./nginx -s stop | 停止nginx |
./nginx -s reload | 当修改Nginx配置文件后需要重新加载才能生效 |
# 查看nginx的版本
[root@localhost sbin]./nginx -v
nginx version: nginx/1.22.1
# 检查配置文件正确性
[root@localhost sbin] ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# 启动nginx服务(出现master与worker进程)
[root@localhost sbin]./nginx
[root@localhost sbin]ps -ef | grep nginx
root 89623 1 0 22:08 ? 00:00:00 nginx: master process ./nginx
nobody 89624 89623 0 22:08 ? 00:00:00 nginx: worker process
root 89921 1696 0 22:08 pts/0 00:00:00 grep --color=auto nginx
# 停止Nginx服务
[root@localhost sbin]./nginx -s stop
[root@localhost sbin]ps -ef | grep nginx
root 93772 1696 0 22:11 pts/0 00:00:00 grep --color=auto nginx # grep命令的进程
Nginx配置文件
Nginx配置文件(conf/nginx.conf)整体分为全局块,events块,http块三部分,其中http块又分为http全局块和多个server块,server块分为server全局块和多个locaton块
-
全局块
: 从配置文件开始到events块之间的内容,设置一些影响nginx服务器整体运行的全局配置指令 -
events块
: Nginx服务器与用户的网络连接的配置 -
http块
: 代理,缓存,日志记录,虚拟主机配置,第三方模块的配置等 -
http全局块
: 配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等 -
server块
: 每个server块就相当于一个虚拟主机 -
server全局块
: 配置本虚拟机主机的监听配置和本虚拟主机的名称或IP -
locaton块
:基于Nginx服务器接收到的请求字符串(uri)匹配对应location块处理请求或地址定向等,此外还有数据缓存和应答控制等功能
属性名 | 功能 |
worker_processes | 设置Nginx服务器支持的并发处理量 |
worker_connections | 设置每个work_process支持的最大连接数 |
listen | 设置监听的虚拟机端口号 |
server_name | 设置监听的虚拟机IP地址 |
root | 指定静态资源的根目录,默认当前目录是配置文件所在的目录(配置文件和html目录同级) |
index | 设置监听端口的首页(可以有多个,中间用空格隔开),默认当前目录是使用root指令指定的根目录 |
proxy_pass | 设置反向代理的服务器ip地址和端口号或者一组服务器 |
location [=|~|~*|^~] uri
指令根据请求是否包含指定的uri匹配对应location块处理请求,uri前缀就是server_name:listen如localhost:80
- 如果uri包含正则表达式,则必须要有
~ 或者 ~ *
标识,=和^~
都是用于不含正则表达式的uri前 -
=
: 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功就停止继续向下搜索并立即处理该请求 -
~
: 用于表示包含正则表达式的uri,并且区分大小写 -
~*
: 用于表示包含正则表达式的uri,但是不区分大小写 -
^~
: 要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
location块对于匹配的url如何处理进行转发
- 对于没有使用正则表达式的请求路径如
/api
则直接将/api
及后面的路径拼接到代理的服务器后(找处理请求的方法)或静态资源的根目录后(找对应的静态文件) - 如果使用了正则表示式的请求路径如
~ /api/
会将/api/
以及后面的路径拼接到代理的服务器(找处理请求的方法)或静态资源的根目录(找对应的静态文件)
#全局快主要包括配置运行Nginx服务器的用户(组),允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等
#Nginx服务器支持的并发处理量,值越大可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
worker_processes 1; <-- 全局块(events块之前的配置都是全局块)
#events块常用的设置包括是否开启对多work process下的网络连接进行序列化
#是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word_process可以同时支持的最大连接数等
events { <-- events块
# 每个work_process支持的最大连接数,这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置
worker_connections 1024;
}
# http块是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
http { <-- http块
# http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等
include mime.types; <-- http全局块(server块之前的配置都是全局块)
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机
server { <-- Server块
# server全局块: 配置本虚拟机主机的监听配置和本虚拟主机的名称或IP
listen 80; <-- Server全局块(location块之外 的配置都是全局块)
server_name localhost;
# location块用来匹配客户端请求的url,匹配到后去根目录找对应的文件
location / { <-- location块
# 指定静态资源的根目录,默认当前目录是配置文件所在的目录(配置文件和html目录同级)
root html;
# 指定首页,默认当前目录是使用root指令指定的根目录
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}