NGINX 配置简介

小TOT 创建于 2017-02-07

配置概述

nginx的配置系统由一个主配置文件和其他一些辅助的配置文件构成。这些配置文件均是纯文本文件,全部位于nginx安装目录下的conf目录下。nginx配置中的注释使用“#”开头,自#到行尾都视为注释内容,nginx会忽略这些内容。

在nginx.conf中,包含若干配置项。每个配置项由配置指令指令参数2个部分构成。指令参数也就是配置指令对应的配置值,指令使用;作为结尾。

配置指令是一个字符串,可以用单引号或者双引号括起来,也可以不括。但是如果配置指令包含空格,一定要引起来。指令的参数使用一个或者多个空格或者TAB字符与指令分开。

配置文件的结构

Nginx的核心模块为Main和Events,此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块,HTTP模块用于控制Nginx的HTTP进程。 Nginx的主配置文件由几个段组成,这个段通常也被称为nginx的上下文,每个段的定义格式如下所示。需要注意的是,其每一个指令都必须使用分号(;)结束,否则为语法错误。

<section> { # 段或者叫上下文
 <directive> <parameters> #指令 + 参数
}

主要结构(所有配置以分号结尾)如下:

##Main段,定义全局属性
events {
  ##定义不同IO模型下的工作机制;
}
http { 
##定义作为web服务器的相关属性(还可以反向代理mail)
server { 
##定义一个虚拟主机的属性,所有web服务必须定义成一个虚拟主机,与httpd不同
location [option] uri { 
##定义一个URI的特性
##location中可以嵌套location的
location [option] uri { 
#嵌套location
}
   if (condition) {
##定义URL重写
}
}
}
upstream  <Name> {
##将多个server结合在一起,实现负载均衡
}
}

常见的配置指令

由上我们了解到,nginx的配置由指令已经参数构成,下面我们就来介绍下nginx常用指令的使用。

main上下文指令

user 定义Nginx运行的用户和用户组用user指令

user www-data;

定义nginx进程数,用worker_processes指令,建议设置为等于CPU总核心数。

worker_processes 2;

全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]用error_log指令。另外日志还可以定义在http、server及location上下文中,语法格式一样。全局日志会被http,server等具体的日志配置所覆盖。这一定与html中样式的作用域类似。

error_log /var/log/nginx/error.log info;

定义进程文件用pid指令

pid /var/run/nginx.pid;

event上下文指令

参考事件模型指令:use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 其中,epoll是linx 2.6版本内核中高性能I/O模型。nginx的并非量和采用的时间模型息息相关。真是因为apache 使用了select模型,而nginx默认使用的epoll模型,导致同等条件下,nginx的性能优于apache的性能10倍左右。后面会有专门的文章做详细介绍。 例如

use epoll;

http上下文指令

设定mime类型,类型由mime.type文件定义 用include指令.

include   /etc/nginx/mime.types;## include指令可以将其他文件的指令引入进来
default_type  application/octet-stream;

开启gzip压缩指令

gzip on;

负载均衡服务器列表指令upstream

upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80  weight=1;
server 192.168.8.3:80  weight=6;
}

server (虚拟主机)上下文指令

server上下文指令,主要设置了端口的舰艇,主机名称,路径路由,虚拟主机日志等

server {
    #侦听80端口
    listen       80;
    #定义使用www.xx.com访问
    server_name  www.xx.com;
    #设定本虚拟主机的访问日志
    access_log  logs/www.xx.com.access.log  main;
    #默认请求
    location / {
          root   /root;      #定义服务器的默认网站根目录位置
          index index.php index.html index.htm;   #定义首页索引文件的名称
          fastcgi_pass  www.xx.com;
          fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
          include /etc/nginx/fastcgi_params;
     }

    location /proxy {
          proxy_pass http://otherserver.com; #请求转发指令
     }

    # 定义错误提示页面
    error_page   500 502 503 504 /50x.html; 
    location = /50x.html {
    root   /root;
    }
}