Nginx的配置
2017-09-26 19:42
260 查看
Nginx配置文件的结构
Nginx的配置文件一般位于Nginx安装目录下的conf目录下,文件以block组织起来。每一个block用一组“{}”来表示。block可以分为几个层次。最高层为main指令所在位置。main指令下面有Events、HTTP等层级;HTTP层又包含server层;server层中又包含localtion层,且一个server中可以有多个localtion。配置与调试Nginx
在Nginx的配置文件nginx.conf中,可以看到Nginx的配置文件主要分为4个部分:main:全局设置,将影响所有其他设置;
server:主机设置,主要用于指定主机和端口;
upstream:负载均衡服务器设置,主要用于设置一系列后端服务器;
localtion:URL匹配特定位置设置,用于匹配网页位址;
server继承main,localtion继承server,upstream既不继承其他设置也不被其他设置继承。
Nginx全局设置
下面是对Nginx的全局属性设置:user nobody nobody; worker_processes 4; error_log logs/error.log notice; pid logs/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65536; }
user:指定Nginx Worker进程运行的用户和组,默认是nobody;
worker_processes:指定开启的进程数。一般是指定与CPU数量相同的进程数;
error_log:指定全局错误日志文件。输出日志级别由高到低为:debug、info、notice、warn、error、crit;
pid:指定进程id存放文件;
worker_rlimit_nofile:绑定worker进程和CPU,内核2.4版本以上可用;
events:指定Nginx工作模式和连接上限。
use:指定工作模式,Nginx支持工作模式有:select、poll、kqueue、epoll、rtsig、/dev/poll。其中select、poll为标准工作模式,kqueue、epoll为高效工作模式,epoll用于Linux平台,kqueue用于BSD系统。一般Linux上epoll首选;
worker_connections:指定最大连接数,默认1024.最大客户端连接由worker_processes和worker_connections共同决定,为两者乘积。作为反向代理时为两者之积除以4。
需要注意的是,最大连接数受Linux进程最大打来文件限制,需要执行“ulimit -n 65535”后才生效。
HTTP服务器设置
下面对HTTP服务器相关属性进行设置http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$req 4000 uest" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio" '; log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; client_max_body_size 20m; client_header_buffer_size 32k; large_client_header_buffers 4 32k; tcp_nodelay on; sendfile on; tcp_nopush on; keepalive_timeout 60; client_header_timeout 10; client_body_timeout 10; send_timeout 10;
include:实现对配置文件所包含的文件的设定,减少主配置文件复杂度;
default_type:设定默认类型为二进制流,也就是文件类型未定义时使用这种方式。例如没有PHP环境时,Nginx不解析,此时浏览器访问PHP文件会出现下载窗口;
log_format:定义日志格式。main和download为日志输出格式名称;
client_max_body_size:设定允许客户端请求的最大单个文件字节数;
client_header_buffer_size:指定来自客户端请求头的headerbuffer大小。对于大多数请求1kb缓冲区足够;
large_client_header_buffers:指定客户端请求中较大的消息头的缓存最大数量和大小,,4为个数,128k为大小,最大缓存为4个128k;
sendfile:开启高效文件传输模式;将tcp_nodelay和tcp_nopush开启可以防止网络阻塞;
keepalive_timeout:设置客户端请求头读取超时时间,若超过这个时间客户端还未发送任何数据,Nginx将返回请求超时(408)错误;
client_body_timeout:设置客户端请求主体读取超时时间,默认值60.若超过这个时间,客户端还未发送任何数据,Nginx将返回请求超时(408)错误;
send_timeout:指定响应客户端的超时时间。此超时仅限于两个活动连接之间,若超过此时间客户端没有任何活动,Nginx将会关闭连接。
HttpGzip模块配置
依赖于–with-http_gzip_static_module,这个模块支持在线实时压缩输出数据流。可以使用下面的命令查看是否安装了这个模块:/usr/local/sbin/nginx -V
下面进行相关属性设置:
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;
gzip:用于控制gzip模块开启或关闭;
gzip_min_length:设置允许压缩的页面最小字节数,最小字节数从header头的Content-Length中获取,默认值0,表示都压缩,建议设置为大于1k,小于1k可能压缩后反而增大;
gzip_buffers:申请4个单位为16k的内存作为压缩解果流缓存,默认是申请与原始数据大小相同的内存空间来存储gzip压缩结果;
gzip_http_version:设置识别HTTP协议版本,默认1.1;
gzip_comp_level:指定压缩比,1压缩比最小,速度最快,9压缩比最大,速度最慢,也比较消耗CPU资源;
gzip_types:指定压缩类型,无论是否指定,text/html类型总会压缩;
gzip_vary:让前端的缓存服务器缓存经过gzip压缩的页面;
负载均衡设置
Nginx负载均衡主要维护一个负载均衡服务器列表,设置如下:upstream ixdba.net{ ip_hash; server 192.168.12.133:80; server 192.168.12.134:80 down; server 192.168.12.135:8009 max_fails=3 fail_timout=20s; server 192.168.12.135:8080; }
upstream:Nginx的HTTP Upstream模块,此模块通过算法实现调度客户端到服务器的负载均衡,他指定了一个负载均衡器的名称,这里是ixdba.net,在后面用到的地方调用即可。
ip_hash:负载均衡调度算法,Nginx支持5种调度算法:
轮询:默认算法,每个请求按时间顺序逐一分配到不同的后端服务器,并且会自动踢出宕机服务器;
Weight:按指定的权重分配请求,权重越大分配的请求越多;
ip_hash:每个请求按访问ip进行hash运算,这样同一ip会固定访问一台服务器,可以解决动态网页session共享问题,但是此时后端服务器的状态不能定义为weight和backup;
fair:第三方算法,根据页面大小和加载时间长短智能地进行负载均衡,也就是根据服务器响应时间来分配请求。要是用需要下载upstream_fair模块;
url_hash:第三方算法,根据url的hash结果进行分配,使每一个url定向到同一个后端服务器,进一步提高后端服务器缓存效率。要是用需要安装hash软件包;
server:指定后端服务器的ip和端口,同时也可以指定后端服务器在调度中的状态,常见4种状态:
down:不参与负载均衡;
backup:预留机器,当其他机器出现故障或者忙的时候,才请求backup机器,这个状态不能出现在ip_hash算法中;
max_fails:允许请求失败次数,默认为1,当超过定义的次数时,返回proxy_next_upstream模块定义的错误;
fail_timout:在经历max_fails次失败后,暂停服务时间;
server虚拟主机配置
一般将虚拟主机写入另一个文件,通过include包含进来,这样方便管理,具体配置如下:server{ listen 80; server_name 192.168.12.188 www.ixdba.net; index index.html index.htm index.jsp; root /web/wwwroot/www.ixdba.net charset gb2312; access_log logs/www.ixdba.net.access.log main; }
server:标识定义虚拟主机开始;
listen:定义虚拟主机的监听端口;
server_name:指定ip或域名,多个用空格隔开;
index:访问的默认首页地址;
root:指定虚拟主机网页根目录,可以是相对路径;
charset:设置网页编码格式;
access_log:指定虚拟主机访问日志的存放路径,main指定输出格式;
URL匹配配置
location支持正则表达式匹配,也支持条件判断匹配,通过location对Nginx网页进行过滤处理,下面是一些例子:location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { root /web/wwwroot/www.ixdba.net; expires 30d; }
将.gif、.jpg、.jpeg、.png、.bmp、.swf的静态文件交给Nginx处理,expires指定静态文件过期时间,这里为30天;
location ~ ^/(upload|html)/ { root /web/wwwroot/www.ixdba.net; expires 30d; }
将upload和html下所有文件都交给Nginx处理,upload和html目录都位于/web/wwwroot/www.ixdba.net下;
location ~ .*.jsp$ { index index.jsp; proxy_pass http://localhost:8080; }
将所有.jsp后缀的文件交给8080端口处理;
StubStatus模块配置
StubStatus模块能够获取Nginx自上次启动以来的工作状态,要是用需要在编译时指定–with-http_stub_status_module,下面是一些配置:location /NginxStatus { stub_status on; access_log logs/NginxStatus.log; auth_basic "NginxStatus"; auth_basic_user_file ../htpasswd; }
stub_status:控制StubStatus的工作状态;
access_log:指定StubStatus访问的日志文件;
auth_basic:Nginx的一种认证机制;
auth_basic_user_file:指定认证的密码文件;
注意的是,auth_basic需要采用Apache的htpasswd命令来生成密码文件,举例如下:
添加一个webadmin用户:
/usr/local/apache/bin/htpasswd -c /usr/local/nginx/conf/htpasswd webadmin
会提示输入密码,然后添加成功。
查看Nginx运行状态输入http://ip/NginxStatus,然后输入创建的用户名和密码即可,显示的主要信息如下:
Active connections:当前活跃的连接数;
三个连续的数字表示:处理的连接数、创建的握手次数、处理的请求数;
Reading:Nginx读取到客户端Header信息数;
Waiting:Nginx已处理完、等待下一次请求的驻留连接数;
Writing:Nginx返回给客户端的Header数;
设置错误页面
error_page 404 /404.html; eooro_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
默认情况下,Nginx会在html目录下查找指定的返回页面,需要注意的是,错误页面信息一定要大于512kb,否则会被IE替换为IE默认错误页面。
相关文章推荐
- FreeBSD下nginx并支持php配置详解
- nginx使用ssl模块配置HTTPS支持
- nginx中配置proxy_pass
- tomcat+nginx配置集群负载均衡
- Nginx 配置 HTTPS 服务器
- Nginx配置两份日志记录
- Linux-LNMP-Nginx的配置
- (总结)Nginx配置文件nginx.conf中文详解
- Nginx配置
- 记一次上传文件的nginx配置
- nginx 常用的配置
- 简单配置nginx+uWSGI+python3+bottle环境新手教程
- Nginx防止流量攻击的配置详解
- Nginx:配置指南(1)
- nginx源码分析之配置图解
- 如何在windows系统下使用Nginx配置负载均衡-1
- nginx-CodeIgniter配置
- nginx配置
- 妈蛋。一下午就在腾讯云弄Nginx的配置,垃圾ubuntu
- nginx 配置详解