Nginx优化篇——配置优化

user www-data; #运行的用户
pid /var/run/nginx.pid;
worker_processes auto; #定义了nginx对外提供web服务时的worder进程数,CPU核的数量、存储数据的硬盘数量及负载模式
worker_rlimit_nofile 100000; #更改worker进程的最大打开文件数限制,比’ulimit -a’多。解决”too many open files”
events {
worker_connections 2048; #worker进程同时打开的最大连接数
multi_accept on; #当收到一个新连接通知后接受尽可能多的连接
use epoll; #设置用于复用客户端线程的轮询方法,epoll需要linux2.6+
}
http {
server_tokens off; #关闭nginx版本号
sendfile on; #sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)
tcp_nopush on; #在一个数据包里发送所有头文件,而不一个接一个的发送
tcp_nodelay on; #nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
access_log off; #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
error_log /var/log/nginx/error.log crit; #告诉nginx只能记录严重的错误
keepalive_timeout 10; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接
client_header_timeout 10; #设置请求头超时时间,建议低
client_body_timeout 10; #请求体(各自)的超时时间
reset_timedout_connection on; #关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间
send_timeout 10; #指定客户端的响应超时时间
limit_conn_zone $binary_remote_addr zone=addr:5m; #设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。
limit_conn addr 100; #给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。
include /etc/nginx/mime.types; #只是一个在当前文件中包含另一个文件内容的指令。
default_type text/html; #设置文件默认MIME-type
charset UTF-8; #头默认的字符集
gzip on; #开启gzip压缩
gzip_disable “msie6”; #低版本兼容
gzip_proxied any; #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求
gzip_static on; #告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源
gzip_min_length 1000; #设置对数据启用压缩的最少字节数
gzip_comp_level 6; #压缩级别,1-10越高越消耗CPU,但是压缩越好
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; #设置需要压缩的数据格式
open_file_cache max=100000 inactive=20s; #打开缓存的同时也指定了缓存最大数目,以及缓存的时间
open_file_cache_valid 30s; #在open_file_cache中指定检测正确信息的间隔时间
open_file_cache_min_uses 2; #定义了open_file_cache中指令参数不活动时间期间里最小的文件数
open_file_cache_errors on; #指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

网站目录权限设置–小结

网站目录文件权限的设置对网站的安全至关重要,在安全原则中应遵循网站目录文件最小权限设置。

第一个原则:有写入权限的目录,不给动态脚本的执行权限。
第二个原则:有执行权限的目录,不给写入权限。
还有一个原则,php-fpm/nginx 进程所使用的用户,不能是网站文件所有者。 凡是违背这个原则,则不符合最小权限原则。

示例:

1、nginx和php-fpm运行用户为www
2、假设web目录所属着为web_owner
3、将web目录的用户和用户组设置为web_owner和www,如下命令:
chown -R web_owner:www /usr/local/nginx/html
4、设置网站目录权限为750,750是web_owner用户对目录拥有读写执行的权限,这样web_owner用户可以在任何目录下创建文件,用户组有有读执行权限,这样才能进入目录,其它用户没有任何权限。
find -type d -exec chmod 750 {}
5、设置网站文件权限为640,640指只有web_owner用户对网站文件有更改的权限,web服务器只有读取文件的权限,无法更改文件,其它用户无任何权限。
find -not -type d -exec chmod 640 {}
6、针对个别目录设置可写权限。比如网站的一些缓存目录就需要给web服务有写入权限。例如cache目录就必须要写入权限。
find -name ‘cache’ -type d -exec chmod 770 {}

转自:
作者:简公介
链接:https://www.jianshu.com/p/44fe3ec5b704