目录
-
1、nginx文件的结构如下
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。 location块:配置请求的路由,以及各种页面的处理情况。
2、nginx各个配置项说明
-
pid
执行nginx进程运行文件存放地址
-
user
语法:user username[groupname] 默认:user nobody nobody
- user用于设置master进程启动后,fork出的worker进程运行在那个用户和用户组下。当按照"user username;"设置时,用户组名与用户名相同。
- 若用户在configure命令执行时,使用了参数--user=usergroup 和 --group=groupname,此时nginx.conf将使用参数中指定的用户和用户组。
- Nginx worker进程运行的用户及用户组
-
worker_processes
#配置Nginx进程生成的worker process数,auto 表示Nginx进程自动检测生成数。
worker_processes 1;
每个worker进程都是单线程的进程,他们会调用各个模块以实现多种多样的功能。如果这些模块不会出现阻塞式的调用,那么,有多少CPU内核就应该配置多少个进程,反之,有可能出现阻塞式调用,那么,需要配置稍多一些的worker进程。
-
ssl_engine(ssl硬件加速)
ssl_engine device;
用户可以用OpneSSL提供的命令来查看是否有ssl硬件加速设备:openssl engine -t
-
error_log(日志位置和日志级别)
#只是配置日志位置
error_log /var/log/nginx/error.log;
#同时配置日志位置和日志级别
error_log /var/log/nginx/error.log crit;
-
worker_rlimit_nofile
指定此进程可以打开的最大文件描述符的值。
-
event模块儿
events {
#仅对指定的客户端输出debug级别的日志
#这个设置项实际上属于事件类配置,因此必须放在events{……}中才会生效。它的值可以是IP地址或者是CIRD地址。
debug_connection[IP|CIDR]
#这样,仅仅以上IP地址的请求才会输出debug级别的日志,其他请求仍然沿用error_log中配置的日志级别。
#注意:在使用debug_connection前,需确保在执行configure时已经加入了--with-debug参数,否则不会生效。
#debug_connection 10.224.66.14; #或是debug_connection 10.224.57.0/24
#最大连接数
worker_connections 1024;
#设置网路连接序列化,防止惊群现象发生,默认为on
accept_mutex on;
#设置一个进程是否同时接受多个网络连接,默认为off
multi_accept on;
#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
#use epoll;
}
-
3、http模块中各个配置项
http模块中:log_format参数详解 1.$remote_addr与$http_x_forwarded_for 用以记录客户端的ip地址 2.$remote_user:用来记录客户端用户名称; 3.$time_local:用来记录访问时间与时区; 4.$request:用来记录请求的url与http协议; 5.$status:用来记录请求状态;成功是200, 6.$body_bytes_s ent:记录发送给客户端文件主体内容大小; 7.$http_referer:用来记录从那个页面链接访问过来的; 8.$http_user_agent:记录客户端浏览器的相关信息;
http
{
#include指令将mime.types文件包含进来
#使用命令:cat mime.types查看一下文件内容,我们发现其就是一个types结构,里面包含了各种浏览器能够识别的MIME类型以及对应类型的文件后缀名字
include mime.types;
#MIME-Type指的是网络资源的媒体类型,也即前端请求的资源类型
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';
#charset gb2312;
#服务器名字的hash表的大小
server_names_hash_bucket_size 128;
#用于指定来自客户端请求头headerbuffer大小,对于大多数请求,1KB的缓冲区大小已经足够,如果自定义了消息头或有更大的cookie,可以增加缓冲区大小
client_header_buffer_size 32k;
#用来指定客户端请求中较大的消息头的缓存最大数量和大小,16为个数,256k为大小
large_client_header_buffers 4 32k;
#允许客户端请求的最大单文件字节数
client_max_body_size 8m;
#开启文件高效传输
sendfile on;
#激活linux上的tcp cork socket模块,可以减少网络报文段数量
tcp_nopush on;
#语法: keepalive_timeout timeout [header_timeout],默认值: keepalive_timeout 60s;使用字段: http, server, location
#参数1指定了客户端与服务器 keep-alive的超时时间,值为0将禁用 keep-alive功能。
#参数2(可选)在HTTP响应头”Keep-Alive: timeout=time” 字段中设置一个值。
keepalive_timeout 60;
#该参数最核心的功能,就是把小包组成成大包,提高带宽利用率也就是著名的nagle算法
tcp_nodelay on;
#指定同FastCGI服务器的连接超时时间
fastcgi_connect_timeout 300;
#指令为上游服务器设置等待一个FastCGI进程的传送数据时间,如果有一些直到它们运行完才有输出的长时间运行的FastCGI进程,那么可以修改这个值,如果你在上有服务器的error log里面发现一些超时错误,那么可以恰当的增加这个值
fastcgi_send_timeout 300;
#前端FastCGI服务器的响应超时时间,如果有一些直到它们运行完才有输出的长时间运行的FastCGI进程,或者在错误日志中出现前端服务器响应超时错误,可能需要调整这个值
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;
#设置被压缩的页面最小字节数, 0 表示不管页面大小直接压缩
gzip_min_length 1k;
#表示申请4个单位16k的内存作为压缩缓冲区
gzip_buffers 4 16k;
#默认1.1,支持1.0
gzip_http_version 1.0;
#表示压缩比,介于1和9之间,1压缩比例小,处理速度快,9压缩比例大,传输快,当前为2
gzip_comp_level 2;
#压缩的类型
gzip_types text/plain application/x-javascript text/css application/xml;
#不添加“Vary:Accept-Encding”响应头
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
#下面是server虚拟主机的配置
server
{
listen 80;#监听端口
server_name localhost;#域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html;#站点目录
#请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
location ~*^.+$ {
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://域名; #请求重定向到某处
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
#access_log off;
}
access_log off;
}
}