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`
上一篇:DaoImpl中实现查询分页-使用HibernateCallback来做更加方便


下一篇:SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)