Nginx配置文件nginx.conf详解

最近折腾Ubuntu比较多,也基本原理了Windows和IIS了,论一个软狗的堕落史。既然换到Ubuntu系统上来,勉强算个web开发人员的我当然用的最多的就是Web服务器喽,谈到Linux上的Web服务,Tomcat是啥?我不做j2ee,所以不懂;Apache?那不是直升机吗?嗯嗯,Nginx大法好,战斗名族无所畏惧!

闲话少扯,Nginx的配置没有IIS那么简洁明了,图形化界面,插件直接安装,恩,稳还是微软老哥稳,我软大法好!Nginx的配置文件,nginx.conf里都有哪些内容,以及是和意思,简单记录一下。 以下的nginx.conf文件来自ubuntu通过apt安装的Nginx 1.10.0(Ubuntu)

注意:部分#内容为在网上查找资料后添加或本身就是#注释的内容可以省略

#定义Nginx运行的用户和用户组
user www-data;
#进程文件
pid /run/nginx.pid;

上述默认一般不做更改

#nginx进程数,建议设置为等于CPU总核心数。
worker_processes auto;  #auto则自动检测

#worker进程的最大打开文件数限制
#worker_rlimit_nofile 100000;

如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。

#Events模块
events {
	#单个进程最大连接数(最大连接数=连接数*进程数)
	worker_connections 768;
	# multi_accept on;
}

worker_connections设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,可以将这个值设得很高。

记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。multi_accept告诉nginx收到一个新连接通知后接受尽可能多的连接。

http {
	##
	# Basic Settings
	##
	
	#显示服务器版本
    #server_tokens off;
	##开启高效文件传输模式
    sendfile on;
	#防止网络阻塞
    tcp_nopush on; 
    tcp_nodelay on;

	#长连接超时时间,单位是秒
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	#服务器名字的hash表大小
	# server_names_hash_bucket_size 64;
#重定向服务器名称
	# server_name_in_redirect off;

	#文件扩展名与文件类型映射表
	include /etc/nginx/mime.types;
	#默认文件类型
	default_type application/octet-stream;
#默认编码
	#charset utf-8; 
	……
}

HTTP模块控制着nginx http处理的所有核心特性。因为这里只有很少的配置,所以我们只节选配置的一小部分。所有这些设置都应该在http模块中,甚至你不会特别的注意到这段设置。

server_tokens并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。

sendfile可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()write()以及打开关闭丢弃缓冲更加有效

tcp_nopush告诉nginx在一个数据包里发送所有头文件,而不是一个接一个的发送

tcp_nodelay告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

include只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型。

default_type设置文件使用的默认的MIME-type

charset设置我们的头文件中的默认的字符集

下面列述一些我在网上查阅到,但是我的Ubuntu上的Nginx默认没有的部分:

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

这里主要提及到的就是基础设置和http部分,mail转发在此不提及,日后用到另发一篇。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

nodejs概要

nodejs是由Ryan Dahl写的。他做nodejs的初衷是为了做一个高性能是web服务器。 为了实现高性能服务器,实现要点是:

653
来自专栏AndroidTv

讲讲断点续传那点儿事提问理论基础代码示例

这次想来讲讲断点续传,以前没相关需求,所以一直没去接触,近阶段了解了之后,其实并不复杂,那么也便来写一篇记录一下,分享给大伙,也方便自己后续查阅。

572
来自专栏曾倩倩的专栏

su命令cannot set groups: Operation not permitted的解决方法

问题场景: user_00@hadoop-10-125-224-102:> su root Password: su: cannot set groups:...

3338
来自专栏编程

rbd是否支持注入

引子 很多 OpenStack 与 Ceph 部署集成的文档都会告诉你,libivrt 的文件和密码注入是在 Ceph 上面是不支持的。需要使用下面的配置文件关...

1876
来自专栏tiane12

CentOS修改系统时间

1473
来自专栏惨绿少年

nginx服务部署 说明

第1章 常用的软件 1.1 常用来提供静态服务的软件 Apache :这是中小型Web服务的主流,Web服务器中的老大哥, Nginx :大型网站Web服务...

2950
来自专栏xingoo, 一个梦想做发明家的程序员

Tomcat 6 —— Realm域管理

本篇来源于官方文档,但不仅仅是翻译,其中不乏网上搜索的资料与自己的理解。 如有错误,请予指正。 ? 什么是Realm   首先说一下什么是Realm,可...

1826
来自专栏吴柯的运维笔记

Linux系统日志管理常用的工具和指令

前言 日志对于安全来说,非常重要,它记录了系统每天发生的各种各样的事情,你可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。 日志主要的功能有:...

42111
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作

redis简介 ? Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis与其他key-value缓存产品有以下...

2736
来自专栏蔡鹏的专栏

【腾讯云的1001种玩法】自建SQL Server迁移云SQL Server过程小记

使用云SQL Server实例的好处可能大家都知道 ,数据的安全性会得到保障,云有迁移工具,但貌似需要同版本迁移才可以,我的生成环境是SQL Server 20...

9000

扫描关注云+社区