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

news2024/12/23 10:07:38

今天小晨跟大家分享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/ 路径下的文件展示出来。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

adb 启动app并查看启动时间

启动app adb shell am start -n 包名/界面名 获取app的启动时长 adb shell am start -W 包名/界面名 要启动一个app 就需要知道其包名与界面名,提前打开一个程序,然后执行以下程序 C:\Users\i5ba0>adb shell dumpsys window windows | findstr mFocusedAppm…

CentOS8搭载正反向解析dns服务器

1.介绍(是什么) DNS(Domain Name System),即域名系统,是一个将域名和 IP 地址相互映射的分布式数据库,它可以将用户输入的域名转换成对应的 IP 地址。DNS 由多个服务器组成,分为多个…

The Sandbox DAO:投票决定元宇宙的未来!

赋予用户治理权,打造由社群运营的开放式数码国度 随着The Sandbox DAO的启动,我们邀请全球社群——这个新数字国度的公民们——提出建议并参与治理,共同塑造开放元宇宙的未来。 介绍 在The Sandbox,我们正在建立一个开放的元宇宙…

LVM和配额管理

文章目录 一、LVM1.1 LVM概述1.2 LVM的管理命令1.3 创建LVM的过程第一步:先创建物理卷第二步:创建逻辑卷组 / 扩容第三步:创建逻辑卷 / 扩容对ext4文件系统的管理 1.4 删除LVM 二、磁盘配额2.1 磁盘配额概述2.2 磁盘配额命令2.3 磁盘配额设置…

UE5 使用外置摄像头进行拍照并保存到本地

连接外置摄像头功能:https://docs.unrealengine.com/4.27/zh-CN/WorkingWithMedia/IntegratingMedia/MediaFramework/HowTo/UsingWebCams/ 核心功能:UE4 相机拍照功能(图片保存)_ue 移动端保存图片-CSDN博客 思路是: …

亿道三防8寸安卓三防加固工业平板电脑M81T|加固手持终端pad

在现代信息化时代,随着科技的飞速发展,移动终端设备在各行各业中发挥着越来越重要的作用。为了应对复杂多变的使用环境和严苛的工作需求,亿道三防推出了一款加固型8寸安卓系统三防平板电脑M81T。这款设备不仅具备强大的硬件配置和先进的软件功…

如何使用 Monte Carlo 模拟作为项目管理工具

Monte Carlo 模拟是一种预测不确定事件可能结果的数学技术。我们之前曾撰写过有关其为研发专业人员带来的益处的文章,并主持过有关 Monte Carlo 模拟功能的网络讲座,以帮助产品满足预期规格、预测过程能力并确定最佳过程设置。然而,Monte …

手机里装上好用的实用工具,生活办公更轻松

手机里装上好用的实用工具,生活办公才更轻松!~ 1.一个木函 安卓手机里的“工具百宝箱”,应用集成了超过100种实用工具,包括单位和汇率换算、查询、OCR图片文字识别、自动文章摘要、图片表格识别和表情制作等等。它提供了全面的多…

LeetCode刷题之HOT100之盛最多水的容器

狂风大作,降温了。下午提前把题目做了,上午做的最长回文子串还不是很能理解,慢慢理解吧,且看题 1、题目描述 2、逻辑分析 题目要求很清晰,我的思路就是暴力解法:枚举全部可能的情况(两数不相等…

I.MX6ULL模仿 STM32 驱动开发格式实验

系列文章目录 I.MX6ULL模仿 STM32 驱动开发格式实验 I.MX6ULL模仿 STM32 驱动开发格式实验 系列文章目录一、前言二、模仿 STM32 寄存器定义2.1 STM32 寄存器定义简介2.2 I.MX6Ul 寄存器定义2.3硬件原理图2.4实验程序编写 三、编译下载验证 一、前言 使用 C 语言编写 LED 灯驱…

解决vue版本不一致导致不能正常编译

解决vue版本不一致导致不能正常编译 异常现象分析原因解决方案 异常现象 项目原本运行无异常,但安装了一个el-table-infinite-scroll的插件后,编译报错,截图如下 分析原因 vue版本与compile版本不一致,应该统一起来&#xff0…

crossover玩游戏缺少文件怎么办 为什么游戏打开说缺失文件 crossover支持的游戏列表 CrossOver 提示 X 11 缺失怎么办?

CrossOver是一款类虚拟机软件,可以实现在Mac电脑上运行exe程序。不少Mac用户为了玩游戏,选择使用CrossOver这款软件玩Windows平台的游戏。 一、CrossOver支持的软件多吗 CrossOver是一款基于Wine的兼容工具,它可以让你在Mac或Linux上运行许多…

深入分析C#中的“编写器”概念——代码修改、注解与重构

文章目录 1. 编写器(Writer)的概念2. 编写器的作用和工作原理3. 编写器的重要性4. 写入器常用方法5. 写入器示例6. 编写器示例——使用Fody进行代码注解和重构7. 总结 在软件开发过程中,代码的维护和更新是至关重要的。C#作为一种流行的编程语…

【问题解决】huggingface 离线模型下载

问题 因业务需要在本机测试embedding分词模型,使用 huggingface上的transformers 加载模型时,因为网络无法访问,不能从 huggingface 平台下载模型并加载出现如下错误。 下面提供几种模型下载办法 解决 有三种方式下载模型,一种是通…

分布式事务解决方案(最终一致性【可靠消息解决方案】)

可靠消息最终一致性解决方案 可靠消息最终一致性分布式事务解决方案指的是事务的发起方执行完本地事务之后,发出一条消息,事务的参与方,也就是消息的消费者一定能够接收到这条消息并且处理完成,这个方案强调的是只要事务发起方将消…

Mybatis入门——其他查询操作和数据库连接池(4)

目录 一、多表查询 二、#{} 和 ${} 1、#{} 和 ${} 的使用 (1)Integer类型的参数 #{} 的使用 ${} 的使用 (2)使用String类型的参数 #{} 的使用 ${} 的使用 小结: 2、#{} 和 ${} 的区别 (1&#…

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月28日预测第4弹

昨天的第二套方案已命中,第一套方案由于杀了对子,导致最终出错。 今天继续基于8883的大底,使用尽可能少的条件进行缩号,同时,同样准备两套方案,一套是我自己的条件进行缩号,另外一套是8883的大底…

MySQL数据表的“增删查改“

我们学习数据库, 最重要的就是要学会对数据表表进行"增删查改"(CRUD).(C -- create, R -- retrieve, U -- update, D -- delete) 目录 一. "增"(create) 1. 普通新增 2. 指定列新增 3. 一次插入多行 4. 用insert插入时间 5. 小结 二. "查"…

港口与航运3D三维虚拟仿真展区让更多人了解到海洋知识

在短短20天内,搭建起200多家线上3D展厅,听起来似乎是一项艰巨的任务。然而,对于我们的3d云展平台而言,这早已成为常态。连续三年,我们已成功为众多会展公司在短时间内构建出几百家甚至上千家的线上3D展会,见…

AD23中一些好用的功能

1.关闭在线DRC功能,可以避免布线时候一卡一卡的问题: 取消在线DRC的勾选: 2.AD的在线封装库,非常好用: 如何优雅地服用AD 21的在线元件库 – 吴川斌的博客 (mr-wu.cn) 3.如何恢复Altium Designer23默认窗口布局 打开…