LNMP-Nginx高级配置(三)


一、用户认证

    用户认证功能是利用Apache的工具htpasswd生成的密钥,所以需要安装Apache的这个工具即可,我们用yum来安装就可以。

[root@ZLNMP ~]# yum install -y httpd-tools
[root@ZLNMP ~]# htpasswd -cm /usr/local/nginx/conf/.htpasswd mydiscuz
New password:
Re-type new password:
Adding password for user mydiscuz
[root@ZLNMP ~]# cat /usr/local/nginx/conf/.htpasswd
mydiscuz:$apr1$ejPLa15T$kuyykf8at2I77oogZ0kUz1

    修改配置,主要是修改server模块

location / {
    auth_basic "Closed";
    auth_basic_user_file .htpasswd; <== 这里要注意加密文件的路径
}

二、静态文件缓存

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

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


三、防盗链


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;
                        }
                }


四、域名重定向

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


五 、日志切割

     因为Nginx没有自动切割日志功能,所以需要手动编辑脚本

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

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


六、设置日志记录的内容

    日志格式化
    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。

七、访问控制

    限制只让某个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;

重启一下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;
}


八、使用 user_agent 控制客户端访问
location /
{
    if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315'){
            return 403;
    }
}

九、Nginx代理

    server {
            listen 80;
            server_name aaa.com;

            location / {
                proxy_pass      http://2.2.2.2/;
                proxy_set_header Host   $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
#            access_log  /home/logs/aaa_access.log combined;
        }

你可能感兴趣的:(linux,server,用户,local,认证)