nginx的常用配置与命令相关硬核干货

今天小晨跟大家分享Nginx常用配置与命令相关的硬核干货,可以说运维工作中基本都会用到这些,掌握它,你可以不用求人!

Nginx特点

  • 高并发、高性能;

  • 模块化架构使得它的扩展性非常好;

  • 异步非阻塞的事件驱动模型这点和 Node.js 相似;

  • 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;

  • 热部署、平滑升级;

  • 完全开源,生态繁荣;

Nginx作用

Nginx 的最重要的几个使用场景:

  1. 静态资源服务,通过本地文件系统提供服务;

  2. 反向代理服务,延伸出包括缓存、负载均衡等;

  3. API 服务, OpenResty ;

对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.js 并不冲突,都有自己擅长的领域。Nginx 擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js 更擅长上层具体业务逻辑的处理,两者可以完美组合。

用一张图表示:

Nginx常用命令

nginx -s reload  # 向主进程发送信号,重新加载配置文件,热重启nginx -s reopen   # 重启 Nginxnginx -s stop    # 快速关闭nginx -s quit    # 等待工作进程处理完成后关闭nginx -T         # 查看当前 Nginx 最终的配置nginx -t         # 检查配置是否有问题

Nginx核心配置

nginx.conf配置文件结构

Nginx 的典型配置示例:

# main段配置信息user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置worker_processes  auto;             # Nginx 进程数,一般设置为和 CPU 核数一样error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置
# events段配置信息events {    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)    worker_connections 1024;   # 每个进程允许最大并发数}
# http段配置信息# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置http {     # 设置日志模式    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;   # Nginx访问日志存放位置
    sendfile            on;   # 开启高效传输模式    tcp_nopush          on;   # 减少网络报文段的数量    tcp_nodelay         on;    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;      # 文件扩展名与类型映射表    default_type        application/octet-stream;   # 默认文件类型
    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
    # server段配置信息    server {      listen       80;       # 配置监听的端口      server_name  localhost;    # 配置的域名
      # location段配置信息      location / {        root   /usr/share/nginx/html;  # 网站根目录        index  index.html index.htm;   # 默认首页文件        deny 172.168.22.11;   # 禁止访问的ip地址,可以为all        allow 172.168.33.44;# 允许访问的ip地址,可以为all      }
      error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面      error_page 400 404 error.html;   # 同上    }}
  • main 全局配置,对全局生效;

  • events 配置影响 Nginx 服务器与用户的网络连接;

  • http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;

  • server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;

  • location 用于配置匹配的 uri ;

  • upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分;

用一张图清晰的展示它的层级结构:

图片

nginx.conf 配置文件的语法规则:

  1. 配置文件由指令与指令块构成

  2. 每条指令以 “;” 分号结尾,指令与参数间以空格符号分隔

  3. 指令块以 {} 大括号将多条指令组织在一起

  4. include 语句允许组合多个配置文件以提升可维护性

  5. 通过 # 符号添加注释,提高可读性

  6. 通过 $ 符号使用变量

  7. 部分指令的参数支持正则表达式,例如常用的 location 指令

配置文件 main 段核心参数

user

指定运行 Nginx 的 woker 子进程的属主和属组,其中组可以不指定。

#语法:user USERNAME [GROUP]
user nginx lion; # 用户是nginx;组是lion

pid

指定运行 Nginx master 主进程的 pid 文件存放路径。

pid /opt/nginx/logs/nginx.pid # master主进程的的pid存放在nginx.pid的文件

worker_rlimit_nofile_number

指定worker子进程可以打开的最大文件句柄数。

worker_rlimit_nofile 20480; # 可以理解成每个worker子进程的最大连接数量。

worker_rlimit_core

指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。

worker_rlimit_core 50M; # 存放大小限制working_directory /opt/nginx/tmp; # 存放目录

worker_processes_number

指定 Nginx 启动的 worker 子进程数量。

worker_processes 4; # 指定具体子进程数量worker_processes auto; # 与当前cpu物理核心数一致

worker_cpu_affinity

将每个 worker 子进程与我们的 cpu 物理核心绑定。

worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个worker子进程

将每个 worker 子进程与特定 CPU 物理核心绑定,优势在于,避免同一个 worker 子进程在不同的 CPU 核心上切换,缓存失效,降低性能。但其并不能真正的避免进程切换。

worker_priority

指定 worker 子进程的 nice 值,以调整运行 Nginx 的优先级,通常设定为负值,以优先调用 Nginx 。

worker_priority -10; # 120-10=110,110就是最终的优先级

Linux 默认进程的优先级值是120,值越小越优先;nice 值范围为 -20 到 +19 。

备注:应用的默认优先级值是120加上 nice 值等于它最终的值,这个值越小,优先级越高。

worker_shutdown_timeout

指定 worker 子进程优雅退出时的超时时间。

worker_shutdown_timeout 5s;

timer_resolution

worker 子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降。

timer_resolution 100ms;

在 Linux 系统中,用户需要获取计时器时需要向操作系统内核发送请求,有请求就必然会有开销,因此这个间隔越大开销就越小。

daemon

指定 Nginx 的运行方式,前台还是后台,前台用于调试,后台用于生产。

daemon off; # 默认是on,后台运行模式

配置文件 events 段核心参数

use

Nginx 使用何种事件驱动模型。

use method; # 不推荐配置它,让nginx自己选择

method 可选值为:select、poll、kqueue、epoll、/dev/poll、eventport

worker_connections

worker 子进程能够处理的最大并发连接数。

worker_connections 1024 # 每个子进程的最大连接数为1024

accept_mutex

是否打开负载均衡互斥锁。

accept_mutex on # 默认是off关闭的,这里推荐打开

server_name 指令

指定虚拟主机域名。

#语法:server_name name1 name2 name3# 示例:server_name www.nginx.com;

域名匹配的四种写法:

  • 精确匹配:server_name http://www.nginx.com ;

  • 左侧通配:server_name *.http://nginx.com ;

  • 右侧统配:server_name www.nginx.* ;

  • 正则匹配:server_name ~^www\.nginx\.*$ ;

匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配

server_name 配置实例:

1、配置本地 DNS 解析 hosts

# 添加如下内容,其中 121.42.11.34 是阿里云服务器IP地址
121.42.11.34 www.nginx-test.com121.42.11.34 mail.nginx-test.com121.42.11.34 www.nginx-test.org121.42.11.34 doc.nginx-test.com121.42.11.34 www.nginx-test.cn121.42.11.34 fe.nginx-test.club

注意:这里使用的是虚拟域名进行测试,因此需要配置本地 DNS 解析,如果使用阿里云上购买的域名,则需要在阿里云上设置好域名解析。

2、配置阿里云Nginx,vim /etc/nginx/nginx.conf

# 这里只列举了http端中的sever端配置

# 左匹配

server {  listen  80;  server_name  *.nginx-test.com;  root  /usr/share/nginx/html/nginx-test/left-match/;  location / {    index index.html;  }}

# 正则匹配

server {  listen  80;  server_name  ~^.*\.nginx-test\..*$;  root  /usr/share/nginx/html/nginx-test/reg-match/;  location / {    index index.html;  }}

# 右匹配

server {  listen  80;  server_name  www.nginx-test.*;  root  /usr/share/nginx/html/nginx-test/right-match/;  location / {    index index.html;  }}
# 完全匹配

server {  listen  80;  server_name  www.nginx-test.com;  root  /usr/share/nginx/html/nginx-test/all-match/;  location / {    index index.html;  }}

3、访问分析

  • 当访问 http://www.nginx-test.com 时,都可以被匹配上,因此选择优先级最高的“完全匹配”;

  • 当访问 http://mail.nginx-test.com 时,会进行“左匹配”;

  • 当访问 http://www.nginx-test.org 时,会进行“右匹配”;

  • 当访问 http://doc.nginx-test.com 时,会进行“左匹配”;

  • 当访问 http://www.nginx-test.cn 时,会进行“右匹配”;

  • 当访问 fe.nginx-test.club 时,会进行“正则匹配”;

root

指定静态资源目录位置,它可以写在 http 、 server 、 location 等配置中。

#root path
#例如:
location /image {  root /opt/nginx/static;}
#当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png

注意:root 会将定义路径与 URI 叠加, alias 则只取定义路径。

alias

它也是指定静态资源目录位置,它只能写在 location 中。​​​​​​​

location /image {  alias /opt/nginx/static/image/;}
#当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png

注意:使用 alias 末尾一定要添加 / ,并且它只能位于 location 中。

location

配置路径。

location [ = | ~ | ~* | ^~ ] uri {  ...}

匹配规则:

  • = 精确匹配;

  • ~ 正则匹配,区分大小写;

  • ~* 正则匹配,不区分大小写;

  • ^~ 匹配到即停止搜索;

匹配优先级:=  > ^~  > ~  > ~*  > 不带任何字符。

实例:

server {  listen  80;  server_name  www.nginx-test.com;
  # 只有当访问 www.nginx-test.com/match_all/ 时才会匹配到/usr/share/nginx/html/match_all/index.html  location = /match_all/ {      root  /usr/share/nginx/html      index index.html  }
  # 当访问 www.nginx-test.com/1.jpg 等路径时会去 /usr/share/nginx/images/1.jpg 找对应的资源  location ~ \.(jpeg|jpg|png|svg)$ {    root /usr/share/nginx/images;  }
  # 当访问 www.nginx-test.com/bbs/ 时会匹配上 /usr/share/nginx/html/bbs/index.html  location ^~ /bbs/ {    root /usr/share/nginx/html;    index index.html index.htm;  }}

location 中的反斜线

location /test {  ...}
location /test/ {  ...}
  • 不带 / 当访问 http://www.nginx-test.com/test 时, Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html ;如果没有 test 目录, nginx  则会找是否有 test 文件。

  • 带 / 当访问 http://www.nginx-test.com/test 时, Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html ,如果没有它也不会去找是否存在 test 文件。

return

停止处理请求,直接返回响应码或重定向到其他 URL ;执行 return 指令后, location 中后续指令将不会被执行。

#return code [text];#return code URL;#return URL;
#例如:
location / {  return 404; # 直接返回状态码}
location / {  return 404 "pages not found"; # 返回状态码 + 一段文本}
location / {  return 302 /bbs ; # 返回状态码 + 重定向地址}
location / {  return https://www.baidu.com ; # 返回重定向地址}

rewrite

根据指定正则表达式匹配规则,重写 URL 。

#语法:rewrite 正则表达式 要替换的内容 [flag];#上下文(标签):server、location、if
#示例:rewirte /images/(.*\.jpg)$ /pic/$1; # $1是前面括号(.*\.jpg)的反向引用

flag 可选值的含义:

  • last 重写后的 URL 发起新请求,再次进入 server 段,重试 location 的中的匹配;

  • break 直接使用重写后的 URL ,不再匹配其它 location 中语句;

  • redirect 返回302临时重定向;

  • permanent 返回301永久重定向;

server{  listen 80;  server_name fe.lion.club; # 要在本地hosts文件进行配置  root html;  location /search {    rewrite ^/(.*) https://www.baidu.com redirect;  }
  location /images {    rewrite /images/(.*) /pics/$1;  }
  location /pics {    rewrite /pics/(.*) /photos/$1;  }
  location /photos {
  }}

按照这个配置我们来分析:

  • 当访问 fe.lion.club/search 时,会自动帮我们重定向到 https://www.baidu.com。

  • 当访问 fe.lion.club/images/1.jpg 时,第一步重写 URL 为 fe.lion.club/pics/1.jpg ,找到 pics 的 location ,继续重写 URL 为 fe.lion.club/photos/1.jpg ,找到 /photos 的 location 后,去 html/photos 目录下寻找 1.jpg 静态资源。

if 指令

#语法:if (condition) {...}
#上下文:server、location
#示例:
if($http_user_agent ~ Chrome){  rewrite /(.*)/browser/$1 break;}

condition 判断条件:

  • $variable 仅为变量时,值为空或以0开头字符串都会被当做 false 处理;

  • = 或 != 相等或不等;

  • ~ 正则匹配;

  • ! ~ 非正则匹配;

  • ~* 正则匹配,不区分大小写;

  • -f 或 ! -f 检测文件存在或不存在;

  • -d 或 ! -d 检测目录存在或不存在;

  • -e 或 ! -e 检测文件、目录、符号链接等存在或不存在;

  • -x 或 ! -x 检测文件可以执行或不可执行;

实例:

server {  listen 8080;  server_name localhost;  root html;
  location / {    if ( $uri = "/images/" ){      rewrite (.*) /pics/ break;    }  }}

当访问 localhost:8080/images/ 时,会进入 if 判断里面执行 rewrite 命令。

autoindex

用户请求以 / 结尾时,列出目录结构,可以用于快速搭建静态资源下载网站。

autoindex.conf 配置信息:

server {  listen 80;  server_name fe.lion-test.club;
  location /download/ {    root /opt/source;
    autoindex on; # 打开 autoindex,,可选参数有 on | off    autoindex_exact_size on; # 修改为off,以KB、MB、GB显示文件大小,默认为on,以bytes显示出⽂件的确切⼤⼩    autoindex_format html; # 以html的方式进行格式化,可选参数有 html | json | xml    autoindex_localtime off; # 显示的⽂件时间为⽂件的服务器时间。默认为off,显示的⽂件时间为GMT时间  }}

当访问 http://fe.xxx.com/download/ 时,会把服务器 /opt/source/download/ 路径下的文件展示出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用java设计出一款可以玩的数独游戏!

要用Java设计一个数独游戏,你可以按照以下步骤进行: 创建一个9x9的二维数组来表示数独的棋盘。生成一个有效的数独解作为游戏的答案。随机地从答案中移除一些数字,以创建游戏的难度等级。创建一个图形用户界面(GUI)来显示棋盘和与用户的交互。检测用户输入的数字是否正确,…

流水账(CPU设计实战)——lab3

Lab3 Rewrite V1.0 版本控制 版本描述V0V1.0相对V0变化: 修改了文件名,各阶段以_stage结尾(因为if是关键词,所以module名不能叫if,遂改为if_stage,为了统一命名,将所有module后缀加上_stage&a…

设计模式 22 访问者模式 Visitor Pattern

设计模式 22 访问者模式 Visitor Pattern 1.定义 访问者模式是一种行为型设计模式,它允许你在不改变已有类结构的情况下,为一组对象添加新的操作。它将算法与对象结构分离,使你能够在不修改现有类的情况下,为这些类添加新的操作。…

Autosar Dcm配置-特定NRC实现方式-基于ETAS软件

文章目录 前言工具配置代码编写总结 前言 项目开发过程中,诊断服务一般客户需求或系统需求都会有特定NRC(一般为NRC22-条件不满足),也就会有特定的条件,需要手动加代码实现。本文介绍ETAS工具中配置的接口及简单实现。 工具配置 对于每一个…

【高阶数据结构】 B树 -- 详解

一、常见的搜索结构 适合做内查找: 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有 100G 数据,无法一次放进内存中,那就只能放在磁盘上了。 如果…

坦克飞机大战项目详解:从包结构到测试发布

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、项目初始化与包结构构建 代码案例: 二、资源文件与配置文件管理 代码案例…

关于NLTK

一、NLTK简介 下图来自NLTK官网:https://www.nltk.org/index.html NLTK,全称为Natural Language Toolkit,是一个用于处理和分析自然语言文本的Python库。它提供了一系列丰富的工具和资源,包括词汇资源(如WordNet&am…

【接口自动化_05课_Pytest接口自动化简单封装与Logging应用】

一、关键字驱动--设计框架的常用的思路 封装的作用:在编程中,封装一个方法(函数)主要有以下几个作用:1. **代码重用**:通过封装重复使用的代码到一个方法中,你可以在多个地方调用这个方法而不是…

【进程空间】通过页表寻址的过程

文章目录 前言介绍页表、页框、页目录的概念页框页表页目录页表和页目录的分配 一级页表和二级页表一级页表寻址过程 二级页表寻址过程 一级页表和二级页表的对比 前言 我们知道每个进程都有属于自己的虚拟地址空间,且每个进程的虚拟地址都是统一的。要想通过虚拟地…

JS逆向之企名科技

文章目录 初步分析定位js编写完整代码参考文献初步分析 目标网址:企名科技 抓包分析,发现是post请求 请求代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import requestsheaders = {Connection:

【主流分布式算法总结】

文章目录 分布式常见的问题常见的分布式算法Raft算法概念Raft的实现 ZAB算法Paxos算法 分布式常见的问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):…

玄机平台应急响应—webshell查杀

1、前言 这篇文章说一下应急响应的内容,webshell查杀呢是应急响应的一部分。那么什么是应急响应呢,所谓的应急响应指的是,当网站突然出现异常情况或者漏洞时,能够马上根据实际问题进行分析,然后及时解决问题。 2、应…

内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机

目录 内网安全-隧道搭建&穿透上线内网穿透-nps-自定义-上线NPS工具介绍搭建过程 nps原理介绍MSF上线CS上线 内网渗透-Linux上线-cs上线Linux主机1.下载插件2.导入插件模块3.配置监听器4.服务端配置5.配置C2监听器并生成木马6.执行木马 内网安全-隧道搭建&穿透上线 内网…

做抖店如何避免被同行内卷?这5点建议,可以解决这个问题

我是王路飞。 都说2024年的抖店不赚钱了,商家太多了,太内卷了,一点都不好做~ 那为什么依然有很多商家在坚持做呢?为什么依然有很多新手入局呢? 无非是抖店确实能带来可观的利润回报罢了。 那如何避免被同行内卷呢&…

idea中git检出失败

之前clone好好的,今天突然就拉取不下来了。很多时候是用户凭证的信息没更新的问题。由于window对同一个地址都存储了会话。如果是新的会话,必须要更新window下的凭证。 然后根据你的仓库找到你对应的账户,更新信息即可。

【前端】从手动部署到自动部署:前端项目进化之路

从手动部署到自动部署:前端项目进化之路 在前端开发的领域内,部署是一个不可忽视的环节。随着项目复杂度的增加和线上更新频率的提升,手动部署逐渐暴露出它的弊端。本文将带你从手动部署过渡到自动部署,完成前端项目进化的重要一…

Round-Robin 调度逻辑算法

Round-Robin 调度逻辑算法 1 Intro1.1 固定优先级1.2 Round-Robin算法 之前上学还是工作,都接触过调度算法:Round-Robin和weight-Round Robin算法,但只知道它的功能和目的是什么,没有具体了解如何实现的; 现在是工作上…

移动云服务器选购指南(图文教程详解)

目录 一、前言 二、基本概念 2.1 定义 2.2 部署形式 2.3 用处 三、主流平台 四、主流产品推荐 4.1 云电脑 4.2 云主机ECS 4.3 弹性公网 IP 五、选购指南 5.1 明确场景 5.2 明确需求 5.3 明确身份 新用户 老用户 5.4 明确时间 5.5 明确教程 六、总结 一、前言…

【多态】(超级详细!)

【多态】(超级详细!) 前言一、 多态的概念二、重写1. 方法重写的规则2. 重写和重载的区别 三、多态实现的条件四、 向上转型五、动态绑定 前言 面向对象的三大特征:封装性、继承性、多态性。 extends继承或者implements实现&…

短视频商城全套源码:开启电商新纪元

随着数字媒体的快速发展,短视频平台已经成为人们获取信息、娱乐和社交的重要渠道。在这样一个大背景下,短视频商城的兴起,无疑为电商行业带来了新的机遇和挑战。本文将探讨短视频商城全套源码的重要性,以及它如何助力商家和开发者…