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;
        }
    }
}