热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginx配置浅谈

nginx配置浅谈

nginx配置浅谈

  • nginx配置
    • 全局块
    • event块
    • http块
    • location块

nginx配置

跑题了……废话不多说,上货
在这里插入图片描述

全局块

1.0 全局块,即不在任何其他语句块中配置的全局配置块,影响nginx全局的配置指令
1.1 常用全局块指令:(每条指令以分号结束)
1.user xxx; 配置常用用户或组,是进程文件的属主和属组属性,默认为nobody nobody
2.worker_processes 1; 允许生成的进程数,定义nginx的工作进程的数量,默认为1,应该与cpu核数相同,高并发场合可提升至核数*2
3.pid xxx/xxx/xxx.pid; 指定nginx进程运行文件存放地址
4.error_log xxx/error.log error; 日志路径和日志级别,默认为error(debug|info|notice|warn|error|crit|alert|emerg)
5.worker_cpu_affinity #将Nginx⼯作进程绑定到指定的CPU核⼼,默认Nginx是不进⾏进程绑定的,
绑定并不是意味着当前nginx进程独占以⼀核⼼CPU,但是可以保证此进程不会运⾏在其他核⼼上,
这就极⼤减少了nginx的⼯作进程在不同的cpu核⼼上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,
因此可以有效的提升nginx服务器的性能。四核可以进行如下绑定,worker_cpu_affinity 0001 0010 0100 1000

event块

2.0 event块,nginx服务器与用户网络连接的配置指令区域块
2.1 常用events块指令:
1.work_connnections 512; 最大连接数,指nginx进程工作时能打开副本文件的最大数量,默认为512,数值越大,并发性越高
work_connnections 受限于系统的最大连接数,可通过ulimit -n 命令查询,最大连接数=worker_processes * worker_connections/4
nginx提供了worker_rlimit_nofile 40960 指令,该指令与用户设置ulimit值效果相同,该命令调整后需重启nginx才可生效
2.use epoll;事件驱动配置指令,默认为epoll,支持select|poll|kqueue|epoll|resig|/dev/poll|eventport
Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll: 使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题,有必要安装安全补丁。
3.accept_mutex on;接收互斥指令配置,开启效果为同⼀时刻⼀个请求只能唤醒一个进程,防止大批量进程同时被唤醒(惊群现象)默认为off
4.multi_accept on; 网络连接指令配置,Nginx服务器的每个⼯作进程可以同时接受多个新的⽹络连接,默认关闭(off)
当关闭时,多个worker以串行的方式接收请求,一个请求进来只会有一个请求被唤醒处理请求,
开启时,worker以并行的方式排列,一个请求进来会唤醒所有请求,开启会对负载有一定的降低,当服务量吞吐很大时,可以适当关闭。

http块

3.0 http块,定义http和第三方配置指令区域块,例如缓存,代理,日志服务,连接超时,单链接请求数等
3.1 常用http块指令:
1.server_tokens off; 控制 http response header 内的 web 服务版本信息的显示,以及错误信息中 Web 服务版本信息的显示。默认on
在生产环境中,需要隐藏nginx版本号,使其他人员不能针对版本进行不当操作,一定程度上增强安全功能。还可修改nginx源码文件隐藏。
2.more_set_headers 'xxxxx.com'; 服务器响应头的配置指令,用于添加、修改、清除 响应头
more_set_input_headers 'xxx.com'; 请求头配置指令,用于添加、修改、清除请求头 (无论隐藏什么都是为了安全)
3.send_timeout 10s :后端服务器数据回传时间_就是服务端向客户端传输数据的超时时间,单位秒,默认60s
4.keepalive 客户端行为操控指令配置。
keepalive_request 1000;一个TCP连接上最多执行多少个HTTP请求.默认100个
keepalive_timeout 100s[header_timeout 60s];用户一个HTTP请求连接完成以后,最多经过100s时间,
如果还是没有新的请求,就会关闭连接,默认75s.链接至少保留60s。
keepalive_disadle none; 对某些浏览器不再使用keepalive,默认msie6---》ie6浏览器,ie到底是有多烦人
5.client_body_buffer_size 128k; Nginx分配给请求数据(post,get)的Buffer大小,如果请求的数据小于该设定值直接将数据先在内存中存储。
如果请求的值大于client_body_buffer_size,就会将数据先存储到client_body_temp 指定路径下的临时文件,默认该路径值是/tmp/。
client_max_body_size 256M; 客户端请求服务器最大数据量指令配置,默认1M,
如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。
6. limit_conn_zone $server_addr zOne=perserver:10m; 限制单个IP的请求数配置指令
limit_conn 同一时间连接数,即并发限制 limit_zone 单位时间内的请求数,即速率限制,采用的漏桶算法
$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。
zOne=perserver:10m表示生成一个大小为10M,名字为perserver的内存区域,用来存储访问的频次信息。
limit_req_conn/zone 限制IP的连接/并发
limit_req_zone $binary_remote_addr zOne=one:10m rate=1r/s;
rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。
limit_req zOne=one burst=5 nodelay;
burst=5,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。
7. upstream xxx{} 负载均衡代理配置指令块,查询方式默认为轮询方式,例子:
upstream backend {
server baidu.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
server address [parameters];---》server baidu.com weight=5;
地址可以是域名或者IP地址,端口是可选的,或者是指定unix:,weight=number设定服务器的权重,默认是1
max_fails=number设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,
如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。
失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。
ip-hash 将目标ip或源ip根据hash散列算法将不同的请求发送到不同的服务器中,不支持nginx的负载均衡
分为目标地址散列调度和源地址散列调度,区别就是请求对象是目的ip或源ip地址 (源ip地址是发起请求方的ip地址)

location块

5.0 location块:配置请求的路由,以及各种页面的处理情况。经常出现在server块中
5.1 常用指令
1. #root path; 根目录
2. #index vv.txt; 设置默认页
3. deny 127.0.0.1; #拒绝的ip
4. allow 172.18.5.54; #允许的ip

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!
在这里插入图片描述


推荐阅读
  • 本文详细介绍了MySQL故障排除工具及其使用方法,帮助开发者和数据库管理员高效地定位和解决数据库性能问题。 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • Linux中tput命令怎么用
    这篇文章主要介绍Linux中tput命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux常用命令tput命令将通过ter ... [详细]
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是 ... [详细]
  • Linux环境下MySQL的安装与配置
    本文详细介绍了在Linux系统上安装和配置MySQL的步骤,包括安装前的准备工作、下载和解压安装包、初始化数据库、配置文件编辑、启动服务以及设置开机自启动等。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • 编写SharePoint的EventReceiver需要用到ListTemplateID来进行绑定,下面的列表对于编程和排查错误都是个很好的索引.Listtem ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
author-avatar
君与龙_501
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有