Nginx配置(全)

安装

* windows下:直接到官网下载windows下的稳定版本,解压到任意位置即可
* Linux下:一种方式是yum或者sudo apt-get install 另一种是源码编译安装,先安装pcre、zlib库文件在./configure、make、make install

启动

* 正常启动:安装路径/sbin/nginx
* 开机启动:centos5.x/6.x下可以自定义nginx启动脚本放在/etc/init.d/下,再chmod 755 /etc/init.d/nginx,chkconfig nginx on 即可

虚拟主机配置

基于IP、域名、PORT。链接:http://www.cnblogs.com/weblm/p/5537749.html

域名跳转

有时候我们有多个域名,希望通过一个域名跳转到另外一个,这个在nginx里是一个常用的设置,
  server_name  test.com  www.test.com;

    if ($host != 'www.test.com' ) {
        rewrite  ^/(.*)$  http:/www.test.com/$1  permanent;
    }

屏蔽恶意USER_AGENT

编辑conf/vhosts/test.conf文件,添加:
#禁止Scrapy等工具的抓取,注意已经取消curl抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
     return 403;
}
#禁止恶意user_agent访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
     return 403;             
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
}

用户认证

用户认证需要用到Apache的htpasswd工具,没有安装Apache的话可直接yum install -y httpd
生成密码文件,创建用户
    htpasswd -c /usr/local/nginx/conf/.htpasswd  test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数

在nginx的配置文件中添加
    location  / {#可以指定目录
                      root /data/www/;
                      auth_basic              "Auth";
                      auth_basic_user_file   /usr/local/nginx/conf/.htpasswd;
            }

访问控制

限制只让某个ip访问 
```
allow          219.232.244.234;
deny           all;
```
禁止某个IP或者IP段访问站点的设置方法

首先建立下面的配置文件放在nginx的conf目录下面,命名为deny.ip   
cat  deny.ip
```
deny 192.168.1.11;
deny 192.168.1.123;
deny 10.0.1.0/24;
```
在nginx的配置文件nginx.conf中加入:
include deny.ip; 
检测配置是否正确:/usr/local/nginx/sbin/nginx -t 
重启一下nginx的服务:/usr/local/nginx/sbin/nginx  reload 就可以生效了。 
deny.ip 的格式中也可以用deny all; 
如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
那需要你在deny.ip 中这样写
```
allow 1.1.1.1; 
allow 1.1.1.2;
deny all;
```
有时候会根据目录来限制php解析:
    location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*.php$ 
    {
        deny all;
    }

防盗链

在 nginx.conf中的server部分中添加如下代码
    location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {   
                valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
                if ($invalid_referer) {
                    # return 403;
                        rewrite ^/ http://www.example.com/nophoto.gif;
                        }
                }

说明:如果前面配置中已经加了:

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
                         {
                                 expires      30d;
                                 access_log off;
                         }

那么会和这一部分重复,这时候上面的生效,所以,我们需要把两者合在一起。如下:

    location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$  {
         expires 30d;  
         valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
         if ($invalid_referer) {
          #return 403;
             rewrite ^/ http://www.example.com/nophoto.gif;
          }
          access_log off;
}

配置静态文件缓存

 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
                expires      30d;
                access_log off;
        }

        location ~ .*.(js|css)$
        {
                expires      12h;
                access_log off;
        }

伪静态

if ($host ~* www.(.*)) {  
      set $host_without_www $1;  
      rewrite ^(.*)$ http://$host_without_www$1 permanent;  
}  

自定义访问/错误日志

日志格式

log_format main '$remote_addr - $remote_user [$time_local] $request '
                    '"$status" $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] ' 
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent"';  //此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP。

错误日志error_log日志级别
error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit, 该级别在日志名后边定义格式如下:
error_log /your/path/error.log crit;
crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。

日志切割

编写脚本:
vim /usr/local/sbin/logqiege.sh //加入

#!/bin/bash
datedirs=`date +%Y%m%d`
/bin/mkdir  /home/logs/$datedirs >/dev/null 2>&1
/bin/mv /home/logs/*.log /home/logs/$datedirs
/bin/kill -HUP `cat /var/run/nginx.pid`

原文地址:https://www.cnblogs.com/weblm/p/6107344.html