nginx学习 3: Nginx 核心配置详解

2023-05-16

一 . 结构说明

在这里插入图片描述

说明:

  1. main: 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  2. event: 配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3. http: 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
    3.1 server:配置虚拟主机的相关参数,一个http中可以有多个server。
    3.2 upstream:上有服务器设置,主要为方向代理,负载均衡相关配置
    3.3 location: 配置请求的路由,以及各种页面的处理情况。

二. 配置详解说明:

1. 全局配置说明

# 启动nginx工作进程的用户和组,默认为nobody
user nginx nginx; 

# 启动nginx工作进程的数量,默认为1
worker_processes auto; 

# 将Nginx⼯作进程绑定到指定的CPU核⼼,默认Nginx是不进⾏进程绑定的,
# 绑定并不是意味着当前nginx进程独占⼀核⼼CPU,但是可以保证此进程不会运⾏在其他核⼼上,这就极⼤减少了nginx的⼯作进程在不同的cpu核⼼上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,
# 因此可以有效的提升nginx服务器的性能,也可以设置为auto。
worker_cpu_affinity 0001 0010 0100 1000; 
# 可以执行以下命令观察工作进程是否一致运行在同一核CPU上
# [root@CentOS7-01 ~]#watch -n1 'ps axo pid,cmd,psr,user | grep nginx|grep -v grep'


#错误⽇志记录配置,语法:error_log file [debug | info | notice | warn | error | crit | alert | emerg]
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log   error;

# pid文件保存路径(很有用)
pid /run/nginx.pid;

# 工作进程nice值,-20~19 
worker_priority 0; 

#这个数字包括Nginx的所有连接(例如与代理服务器的连接等),⽽不仅仅是客户端的连接,另⼀个考虑因素是实际的并发连接数不能超过系统级别的最⼤打开⽂件数的限制
worker_rlimit_nofile 65536; 

 #前台运⾏Nginx服务⽤于测试、docker等环境。
daemon off;

#是否开启Nginx的master-woker⼯作模式,仅⽤于开发调试场景。
master_process off|on; 


2. even配置

#事件模型配置参数
events { 
	#设置单个⼯作进程的最⼤并发连接数
	worker_connections 65536; 
	
	#使⽤epoll事件驱动,Nginx⽀持众多的事件驱动,⽐如select、poll、epoll,只能设置在	events模块中设置。
	use epoll; 
	
	# 优化同⼀时刻只有⼀个请求⽽避免多个睡眠进程被唤醒的设置,
	# on为防⽌被同时唤醒,默认为off,全部唤醒的过程也成为"惊群",因此nginx刚安装完以后要进⾏适当的优化。
	accept_mutex on; 
	
	# Nginx服务器的每个⼯作进程可以同时接受多个新的⽹络连接,但是需要在配置⽂件中配置,
	# 此指令默认为关闭,即默认为⼀个⼯作进程只能⼀次接受⼀个新的⽹络连接,打开后即可同时接受多个。
	multi_accept on; 
}

3. http配置详情

http {
	# 导入支持的文件类型
    include       mime.types; 
	
	# 设置默认的类型,会提示下载不匹配的类型文件
    default_type  application/octet-stream; 

	# 日志配置部分,-->单独看日志模块的配置
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
	
	# 后面的main标识日志的格式, 需要放开上面的log_format的注释. 支持定义多个日志
    #access_log  logs/access.log  main;

	# 自定义优化参数
	#实现文件零拷贝
    sendfile        on; 
    #在开启了sendfile的情况下,合并请求后统一发送给客户端
    #tcp_nopush     on;
    # 在开启了keepalived模式下的连接是否启⽤TCP_NODELAY选项,
    # 当为off时,延迟0.2s发送,默认为on,不延迟发送,⽴即发送用户响应报⽂。      
    #tcp_nodelay off; 
    
    #keepalive_timeout  0;
    # 设置会话保持时间
    keepalive_timeout  65; 
	# 开启文件压缩
    #gzip  on; 

    server {
    	# 设置监听地址和端口
        listen       80; 
        #设置server name,可以以空格隔开写多个并支持正则表达式
        server_name  localhost; 

		# 设置编码格式,默认是俄语格式,可以改为utf-8
        #charset koi8-r; 

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html; #定义错误页面
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
		     # 以http的⽅式转发php请求到指定web服务器
        #    proxy_pass   http://127.0.0.1; 
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000; #以fastcgi的⽅式转发php请求到php处理
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht { #拒绝web形式访问指定⽂件,如很多的⽹站都是通过.htaccess⽂件来改变⾃⼰的重定向等功能。
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server { #⾃定义虚拟server
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm; #指定默认⽹⻚⽂件,此指令由ngx_http_index_module模块提供
    #    }
    #}

    # HTTPS server
    #
    #server { #https服务器配置
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

4. 日志格式的说明

通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;
通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。

参数说明
$remote_addr客户端的ip地址(代理服务器,显示代理服务ip)
$remote_user用于记录远程客户端的用户名称(一般为“-”)
$time_local用于记录访问时间和时区
$request用于记录请求的url以及请求方法
$status响应状态码,例如:200成功、404页面找不到等。
$body_bytes_sent给客户端发送的文件主体内容字节数
$http_user_agent用户所使用的代理(一般为浏览器)
$http_x_forwarded_for可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer可以记录用户是从哪个链接访问过来的

5. 日志的企配置以及切割

  1. 编写自动分割Nginx日志的脚本
#!/bin/bash
#设置日志文件存放目录
LOGS_PATH=/usr/local/nginx/logs
#备分文件名称
YESTERDAY=$(date -d "yesterday" +%Y%m%d%H%M)
#重命名日志文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
  1. 设置Linux的定时任务`cron
0 0 * * * root /usr/local/nginx/logs/nginxLogRotate.sh
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx学习 3: Nginx 核心配置详解 的相关文章

随机推荐

  • 平衡二叉树

    满二叉树一定是一颗平衡二叉树 平衡二叉树 xff1a 对于任意一个节点 xff0c 左子树和右子树的高度差不能超过1 平衡二叉树的高度和节点数量之间的关系也是O xff08 logn xff09 的 节点的高度等于左右子树中最高的节点的高度
  • centos / redhat 版本防火墙配置之firewall-cmd配置

    检查服务器版本 cat etc redhat release 是centos 7 redhat 7 或以上版本的可以配置firewall 是centos 6 redhat 6 及一下版本的需要配置iptables 检查firewall状态是
  • 运行x程序出现:Can't open display 原因及其解决方法

    因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上 如果需要别的用户的图形显示在当前屏幕上 则应以当前登陆的用户 也就是切换身份前的用户执行如下命令 xhost 43 xhost 43 的作用 xhost 是用来控制
  • ORACLE数据库管理员的职责

    ORACLE数据库管理员的职责 一 xff0e 概述 ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控 xff1a 1 每天对ORACLE数据库的运行状态 xff0c 日志文件 xff0c 备份情况 xff0c 数据库
  • 实用webpack插件之ProvidePlugin

    现代化前端的全局引入是一个很有趣的东西 先来看下以下几个场景 xff1a 在webpack中 xff0c 我们可以在resolve的alias中定义一个层级较高的目录为一个自定义变量 例如resolve alias 64 path join
  • Conda&&Pip 使用

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 一 conda 配置环境 1 查看conda版本 2 升级conda版本 3 修改conda下载源渠道 4 conda删除追加的下载
  • IDEA2022.1创建maven项目,规避idea2022新建maven项目卡死,无反应问题

    idea 2022的新建项目和旧的不一样 选择maven archetype 输入 name xff08 项目名称 xff09 location xff08 项目文件路径 xff09 jdk 1 8 catalog xff1a 目录 xff
  • tightvnc绿色版,细数4款超好用的tightvnc绿色版

    在使用tightvnc软件时 xff0c 通常都希望能找到绿色版软件 xff0c 那大家知道有哪些tightvnc绿色版软件吗 xff1f 你所使用过的tightvnc绿色版软件又有哪些呢 xff1f 接下来让我们一起来看看那些超好用的ti
  • 修改 FTP 文件夹 权限 Linux

    cd 到根目录 1 例如FTP服务器根目录是aliRoot cd aliRoot 2 指定一个文件夹修改权限 xff1b 命令 xff1a chmod R 777 goodlist 现在 aliRoot goodlist 文件夹下就可以上传
  • Linux命令大全: mkdir命令 - 创建目录

    1 详解 mkdir命令是 make directories 的缩写 xff0c 用来创建目录 注意 xff1a 默认状态下 xff0c 如果要创建的目录已经存在 xff0c 则提示已存在 xff0c 而不会继续创建目录 所以在创建目录时
  • shell基础教程25: Shell字符串截取(最详细的教程,看完这篇可以弄懂整个原理)

    Shell 截取字符串通常有两种方式 xff1a 从指定位置开始截取和从指定字符 xff08 子字符串 xff09 开始截取 一 从指定位置开始截取 这种方式需要两个参数 xff1a 除了指定起始位置 xff0c 还需要截取长度 xff0c
  • Linux命令大全: nohup命令 – 后端运行程序

    nohup命令的全称为 no hang up xff0c 该命令可以将程序以忽略挂起信号的方式运行起来 xff0c 被运行的程序的输出信息将不会显示到终端 无论是否将 nohup 命令的输出重定向到终端 xff0c 输出都将附加到当前目录的
  • Linux命令大全: cat命令 – 在终端设备上显示文件内容

    1 详情 Linux系统中有很多个用于查看文件内容的命令 xff0c 每个命令又都有自己的特点 xff0c 比如这个cat命令就是用于查看内容较少的纯文本文件的 cat这个命令也很好记 xff0c 因为cat在英语中是 猫 的意思 xff0
  • Nginx安装报错:./configure: error: the HTTP gzip module requires the zlib library.

    错误信息 span class token punctuation span span class token operator span configure error the HTTP gzip module requires the
  • Nginx安装时:安装zlib1g-dev时提示“E: 无法定位软件包 zliblg-dev“的原因

    起因 安装zlig1g dev 依赖包时 xff1a sudo apt get install zliblg dev安装失败 发现 zlig1g dev中的第5个字母不是l xff0c 而是阿拉伯数字1 解决 输入sudo apt get
  • Nginx在Linux下常用的命令

    一 命令说明 选项说明 h帮助命令 v查看版本号 V查看版本号和配置选项 可用类查看已安装的所有模块 t测试配置文件是否正确 T测试nginx conf文件是否存在语法错误 q优雅停止nginx xff0c 有连接时会等连接请求完成再杀死w
  • ubuntu安装nginx与卸载

    一 安装nginx 1 前言 安装nginx 主要有2种方式 1 直接使用 sudo apt get install nginx 2 使用源码的形式安装 本次主要记录的是使用源码安装 2 下载nginx源码 a nginx官网下载地址 gt
  • ping不通Linux服务器怎么办?

    问题描述 xff1a ping是最常见的网络命令 xff0c 用来测试和远程机器是否连通的方法 我们常常会遇到一个问题 xff1a 无法ping一台远程主机 原因分析 xff1a ping不通远程机器 xff0c 最常见的原因有 xff1a
  • Nginx 学习 2: nginx进程模型

    一 概述 nginx有两类进程 xff0c 一类称为master进程 相当于管理进程 xff0c 另一类称为worker进程 xff08 实际工作进程 xff09 启动方式有两种 xff1a 单进程启动 xff1a 此时系统中仅有一个进程
  • nginx学习 3: Nginx 核心配置详解

    一 结构说明 说明 main 配置影响nginx全局的指令 一般有运行nginx服务器的用户组 xff0c nginx进程pid存放路径 xff0c 日志存放路径 xff0c 配置文件引入 xff0c 允许生成worker process数