1.Nginx的配置文件默认在Nginx程序安装目录的conf二级目录下,主配置文件为nginx.conf.假设您的Nginx安装

在/usr/local/webserver/nginx/目录下,那么默认的主配置文件则为/usr/local/webserver/nginx/nginx.conf.
2.Nginx配置参数:
(1)user www www 指定使用的用户和用户所在的组
(2)worker_processes 8 指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍,如两个四核CPU,则总核数为8)
(3)error_log /data1/logs/nginx_error.log crit;指定错误日志存放路径,错误日志记录级别[debug|info|notice|warn|

error|crit]
(4)pid  /usr/local/webserver/nginx/nginx.pid; 指定pid存放的路径
(5)events{use epoll;} 指定使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型.
(6)events{worker_connections 51200;}指定允许的连接数
(7)http{charset gb2312;}设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在HTML代码中通过

Meta标签设置
(8)http{client_max_body_size 8M;}设置客户端能够上传的文件大小.
(9)http{gzip on ;}开启gzip压缩
3.nginx.conf配置文件结构如下:
...
events
{
...
}
http
{
...
server{
...
}
server{
...
}
...
}
4.Nginx可以配置多种类型的虚拟主机:一是基于IP的虚拟主机,二是基于域名的,三是基于端口的
5.本地回环lo,被看作室永远不会宕掉得接口.它的主要作用是测试本机的网络配置,能ping通127.0.0.1说明本机的网卡和IP

协议安装都没有问题.
6.IP别名背后的概念很简单:可以在一块物理网卡上绑定多个IP地址.这样就能够在使用单一网卡的同一服务器上运行多个基

于IP的虚拟主机.如果要在eth0网卡设备上添加两个IP别名192.168.8.43和192.168.8.44可以通过以下ifconfig 和route命令

来进行:
/sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
/sbin/route add -host 192.168.8.43 dev eth0:1
/sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up
/sbin/route add -host 192.168.8.44 dev eth0:2
配置后如果能从另外一台服务器ping 192.168.8.43和192.168.8.44 ,如果能ping通,则证明配置无误.但是通过ifconfig 和

route配置的IP别名在服务器重启后会消失.不过可以将这两条命令添加到/etc/rc.local文件中,让系统开机时自动运行,
vi /etc/rc.local
在文件末尾增加以下内容,然后保存即可.
/sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
/sbin/route add -host 192.168.8.43 dev eth0:1
/sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up
/sbin/route add -host 192.168.8.44 dev eth0:2
无论是通过IP别名在一台服务器上配置多个IP地址,还是通过多块网卡在服务器上配置多个IP地址,在Nginx中都能将其配置

成为基于IP的虚拟主机.

7.在Nginx配置文件中,分别对192.168.8.43,192.168.8.44,192.168.8.45三个IP配置三个纯静态HTML支持的虚拟主机
http{
  #第一个虚拟主机
  server{
    #监听的IP和端口
    listen 192.168.8.43:80;
    #主机名称
    server_name 192.168.8.43;
    #访问日志文件存放路径
    access_log logs/sever1.access.log combined ;
    location /
    {
      #默认首页文件,顺序从左到右,如果找不到index.html,则找index.htm
      index index.html index.htm
      #HTML网页文件存放的目录
      root /data0/htdocs/server1;
    }
  }
  #第二个虚拟主机
  server{
    #监听的IP和端口
    listen 192.168.8.44:80;
    #主机名称
    server_name 192.168.8.44;
    #访问日志文件存放路径
    access_log logs/sever2.access.log combined ;
    location /
    {
      #默认首页文件,顺序从左到右,如果找不到index.html,则找index.htm
      index index.html index.htm
      #HTML网页文件存放的目录
      root /data0/htdocs/server2;
    }
  }
  #第三个虚拟主机
  server{
    #监听的IP和端口
    listen 192.168.8.45:80;
    #主机名称
    server_name 192.168.8.45;
    #访问日志文件存放路径
    access_log logs/sever3.access.log combined ;
    location /
    {
      #默认首页文件,顺序从左到右,如果找不到index.html,则找index.htm
      index index.html index.htm
      #HTML网页文件存放的目录
      root /data0/htdocs/server3;
    }
  }
}

从配置文件可以看出,一段server{...}就是一个虚拟主机,如果要配置多个虚拟主机,建立多段server{}配置即可,监听的IP和

端口也可以不写IP地址,只写端口,把它配置成"listen 80",则表示监听该服务器上所有Ip的80端口,可以通过server_name区

分不同的虚拟主机.

8.基于域名的虚拟主机是最常见的虚拟主机,只需配置DNS服务器,将每个主机名映射到正确的IP地址,然后配置Nginx服务器,

令其识别不同的主机名即可.这种技术可以使很多虚拟主机共享同一个IP地址.

9.Nginx中配置基于域名的虚拟主机.主机1对aaa.domain.com的访问都由它来处理,主机2对bbb.otherdomain.com的访问都由

它来处理,主机3对域名www.domain.com,domain.com及aaa.domain.com之外的所有*.domain.com二级域名的访问都由它来处理

.每个虚拟主机的网页文件分别存放在了不同的目录中,每个虚拟主机使用了不同的日志文件来记录访问日志.配置情况如下:
http{
  #第一个虚拟主机
  server{
      #监听的端口
    listen 80 ;
    #主机名称
    server_name aaa.domain.com;
    #访问日志文件存放路径
    access_log logs/aaa.domain.com.access.log combined ;
    location /
    {
        index index.html index.htm;
        root /data0/htdocs/aaa.domain.com;
    }
  }
  #第二个虚拟主机
  server{
      listen 80;
    server_name bbb.otherdomain.com;
    access_log logs/bbb.otherdomain.com.access.log.combined ;
    location /
    {
        index index.html index.htm
        root /data0/htdocs/bbb.otherdomain.com;
    }
  }
  #第三个虚拟主机
  server{
    listen 80;
    server_name www.domain.com domain.com *.domain.com;
    access_log logs/bbb.domain.com.access.log bombined ;
    location /
    {
        index index.html index.htm ;
        root /data0/htdocs/domain.com;
    }
  }
}

10.Nginx的日志文件配置与切割
与Nginx日志相关的指令主要有两条,一条是log_format,用来设置日志的格式,另外一条是access_log,用来指定日志文件的

存放路径,格式和缓存大小.两条指令在Nginx配置文件中的位置可以在http{...}之间,也可以在虚拟主机之间,即server{...}

11.用log_format指令设置日志格式
设置格式为:
log_format name format [format ...]
name 表示定义的格式名称 , format 表示定义的格式样式. log_format有一个默认的,无须设置的combined日志格式设置.也

可以自定义一份日志记录格式,不过需要注意,log_format指令设置的name名称在Nginx配置文件中是不能重复的.
具体参数如下:
log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
            '"$http_referer" "$http_user_agent"';
注意:如果Nginx作为Web服务器,位于负载均衡设备,Squid,Nginx反向代理之后,就没法获得客户端的真实IP地址了.即

$reomte_addr变量拿到得不是客户端的IP地址,而是反向代理服务器的IP地址.但是反向代理服务器在转发请求的HTTP头信息

中,可以增加X-Forwarded-For信息,用来记录原有的客户端IP地址和原来客户端请求的服务器地址.这个时候可以自定义日志

格式.如下.
log_format mylogformat '$http_x_forwarded_for - $remote_user [$time_local]'
               '"$request" $status $body_bytes_sent'
               '"$http_referer" "$http_user_agent"';
在日志格式中,变量
$remote_addr 和$http_x_forwarded_for用于记录IP地址
$remote_user 用来记录远程客户端用户名称;
$time_local用于记录访问时间与时区;
$request用于记录请求URL与HTTP协议;
$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
$body_bytes_sent用于记录发送给客户端的文件主体内容大小
$http_referer用于记录是从哪个页面链接访问过来的;
$http_user_agent用于记录客户端浏览器的相关信息

日志信息如下:
123.42.4.194 - - [12/Mar/2009:02:18:23 +0800] "GET / HTTP/1.1" 200 36179 "-" "Mozilla/4.0 (compatible;MSIE

7.0;Windows NT 5.1;Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.1; SV1) ; CIBA; .NET CLR 2.0.50727)"
分别对应以上的变量

12.用access_log指令指定日志文件存放路径
access_log path [format [buffer=size | off]]
path表示日志文件的存放路径,format表示使用log_format指令设置的日志格式的名称,buffer=size 表示设置内存缓存区的

大小,例如可以设置buffer=32k
(1)不记录日志.可以用如下指令关闭记录.
access_log off ;
(2)使用默认的combined格式的日志记录,使用如下示例:
access_log /data1/logs/filename.log;

access_log /data1/logs/filename.log combined ;
(3)如果使用自定义格式的日志记录,就需要两条命令了.mylogformat是日志格式名称
log_format mylogformat '$remote_addr - $remote_user [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" $http_x_forwarded_for' ;
access_log /data1/logs/access.log mylogformat buffer=32k
(4)在Nginx0.7.4之后的版本中,access_log指令中的日志文件路径可以包含变量.如:
access_log /data1/logs/$server_name.log combined
如果sever_name指令设置的虚拟主机名称为test.domain.com.那么access_log指令将把访问日志记录在
/data1/logs/test.domain.com.log文件中

13.日志文件中含有变量的限制
(1)Nginx进程设置的用户和组必须有对该路径创建文件的权限.假设Nginx的user指令设置的用户名和用户组都是www,

而/data1/logs/目录的用户名和用户组为root.日志文件/data1/logs/test.domain.com.log将无法被Nginx创建.
(2)缓冲将不会被使用.(这个没看明白)
(3)每一条日志记录,日志文件都将先打开文件,再写人日志记录,然后马上关闭,这个比较耗性能,为了提高包含变量的日志文

件存放路径的性能,须要使用open_log_file_cache指令设置经常被使用的日志文件描述符缓存.

语法:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off

例如:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m ;

max:设置缓存中的最大文件描述符数量
inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符,默认是10秒
min_uses:在参数inactive指定的时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符记入缓存,默认次数

为1.
valid:设置检查时间,看变量指定的日志文件路径与文件名是否仍然存在,默认时间为60秒.

open_log_file_cache off 禁止使用缓存.

14.日志文件的切割
生产环境中的服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率.同时为了方便对日志进行分析计算

,须要对日志进行定时切割.定时切割的方式有按月切割,按天切割,按小时切割.最常用的是按天切割.

切割命令如下:
mv /data1/logs/access.log /data1/logs/20090318.log
kill -USR1 Nginx主进程号

或者(如果在配置文件中使用了 pid /usr/local/webserver/nginx/nginx.pid指令)

mv /data1/logs/access.log /data1/logs/20090318.log
kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid' 这样的话就不用ps查找Nginx主进程号了.

如果要让它每天定时切割日志,可以编写shell脚本.并且利用crontab来每天定时运行.
shell 脚本代码:

#!/bin/bash
#定义Nginx日志文件的存放路径
logs_path = "/data1/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday"+"%m")/
access_$(date -d "yesterday" + "%Y%m%d").log
kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'

再配置crontab,输入crontab -e
输入:
00 00 * * * /bin/bash /usr/loca/webserver/nginx/sbin/cut_nginx_log.sh

shell脚本和crontab配置主要实现的功能是:假设今天的日期为2009年5月19日,Nginx当前的日志文件

为/data1/logs/access.log,2009年5月20日00:00会执行cut_nginx_log.sh脚本,cut_nginx_log.sh脚本首先创建一个目录
/data1/logs/2009/05/,然后将/data1/logs/access.log文件移动并重命名为/data1/logs/2009/05/access_20090519.log,

再发送kill -USR1信号给Nginx主进程,告诉Nginx重新生成一个/data1/logs/access.log文件,2009年5月20日的日志记录在这

个新生成的日志文件中.而/data1/logs/2009/05/access_20090519.log文件,就是2009年5月19日的日志文件.

15.Nginx的压缩输出配置.

经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样用户浏览页面的时候速度会快很多.服务器压缩,浏览器解压

缩.IE,Firefox,Opera,Chrome都支持gzip解压缩.
压缩输出的相关指令位于http{...}两个大括号之间:
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 ;

16.Nginx的自动列目录配置.
感觉没什么用,就不写了,用到再查.

17.Nginx的浏览器本地缓存设置.
浏览器在用户磁盘上对最近请求过的文档进程存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就

可以加速页面的阅历.
通过expires指令输出Header头来实现缓存.控制HTTP应答中的"Expires"和"Cache-Control"的Header头信息.
语法: expires [ time | epoch | max | off]
默认值为: expires expires off
作用域: http , server , location
time可以为正数或负数,Expires头标的值将通过当前系统时间加上您设定的time值来获得.
    "Cache-Control"头标的值由指定的时间来决定.
    负数:Cache-Control:no-cache
    正数或零:Cache-Control:max-age=您指定的时间的秒数,-1表示永远过期.

epoch指定Expires的值为1 january,1970,00:00:01 GMT

max指定"Expires”的值为31December 2037 23:59:59 GMT , "Cache-Control"的值为10年

off表示不修改"Expires"和"Cache-Control"的值.

18网站一般缓存设置.不常被修改的javascript,图片, Flash ,css可以通过expires设置浏览器缓存.
配置代码如下:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires 30d ;
}
location ~ .*\.(js|css)?$
{
    expires 1h ;
}
对图片和flash缓存30天,对css 和js 缓存1个小时.

Nginx学习笔记二基本配置的更多相关文章

  1. nginx学习笔记二

    一,nginx架构在Linux系统中以daemon(守护进程)的方式在后台运行,后台进程包含一个master进程和多个worker进程(多进程的工作方式) master进程 | 信号 | | ---- ...

  2. php-resque学习笔记二(配置)

    1:前提 系统:CentOS PHP版本:PHP7     安装目录:/usr/local/php php-resque          安装目录:/home/software/php-resque ...

  3. nginx学习笔记(二)

    nginx变量 Nginx 变量值容器的生命期是与当前正在处理的请求绑定的,而与 location 无关. 通过 set 指令隐式创建的 Nginx 变量.这些变量我们一般称为"用户自定义变 ...

  4. 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config

    本例重新创建项目,构建一个空的mavan工程. 一.Config Server 从本地读取配置文件 新建一个moudle config_server ,pom添加依赖   <dependency ...

  5. PyCharm学习笔记(二) 调试配置

    选择PyCharm编译器 注意工程默认使用的解释器可能是Pycharm自带的,而不是单独安装的.

  6. CentOS 7 学习(二) 配置Nginx反向代理

    CentOS 7 学习(二) 配置Nginx反向代理 Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行. 不过对于Nginx来说,其反向代理 ...

  7. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  8. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  9. 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法

    @RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...

随机推荐

  1. 观点:哪些人适合做FPGA开发?(转)

    原文:http://xilinx.eetrend.com/blog/561 FPGA目前非常火,各个高校也开了FPGA的课程,但是FPGA并不是每个人都适合,FPGA讲究的是一个入道,入什么道,入电子 ...

  2. QTableView使用HTML显示富文本

    对于QTableView中的显示,我们前面介绍过很多种,其中包括:文本.进度条.复选框等,今天我们介绍一下关于富文本的显示. 可能绝大多数小伙伴会通过QAbstractTableModel中的data ...

  3. Android中退出多个Activity的两个经典方法

    这里介绍两种方法:一种把每个activity记住,然后逐一干掉:另一种思路是使用广播. 方法一.用list保存activity实例,然后逐一干掉 上代码: import java.util.Linke ...

  4. 《深入了解 Linq to SQL》之对象的标识 —— 麦叔叔呕心呖血之作

    序言 很多朋友都向我提过,希望我写一下关于Linq to SQL 或者 VS 插件方面的文章.尽管市面上有很多 Linq to SQL 的书籍,但是都是介绍怎么用,缺乏深度.关于 VS 插件方面的书籍 ...

  5. Merge Two Sorted Lists 解答

    Question Merge two sorted linked lists and return it as a new list. The new list should be made by s ...

  6. 安全运维之:Linux系统账户和登录安全

    一.合理使用Shell历史命令记录功能 在Linux下可通过history命令查看用户所有的历史操作记录,同时shell命令操作记录默认保存在用户目录下 的.bash_history文件中,通过这个文 ...

  7. hdu 5610 Baby Ming and Weight lifting

    Problem Description Baby Ming is fond of weight lifting. He has a barbell pole(the weight of which c ...

  8. CSS3初步

    一.CSS与CSS3的区别 非常简单,CSS代表"Casading Style Sheets",就是样式表,是一种替代并为网站添加样式的标记性语言.现在所使用的CSS基本是在199 ...

  9. Calculation(dfs+状压dp)

    Problem 1608 - Calculation Time Limit: 500MS   Memory Limit: 65536KB    Total Submit: 311  Accepted: ...

  10. CHARINDEX (Transact-SQL)

    SQL Server 2014 其他版本 2(共 3)对本文的评价是有帮助 - 评价此主题 在一个表达式中搜索另一个表达式并返回其起始位置(如果找到). Transact-SQL 语法约定 语法   ...