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

一 . 结构说明

在这里插入图片描述

说明:

  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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值