1、nginx用户认证

对某一个目录进行匹配验证,如对/uc_server/目录访问时的用户认证。当目录下有php文件时,需要增加对php解析的配置。
生成密码文件:

htpasswd -c -m /usr/local/nginx/conf/htpasswd test

这样就添加了test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数,在nginx的虚拟主机配置文件(/usr/local/nginx/conf/vhosts/*.conf)中添加如下配置:
.

location /uc_server/ {
                                  auth_basic            "Auth";
                                  auth_basic_user_file    /usr/lcoal/nginx/conf/htpasswd;
                                  include fastcgi_params;
                                  fastcgi_pass unix:/tmp/php-fcgi.sock;
                                  fastcgi_index index.php;
                                  fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
                                }

这样就会把请求/uc_server/的访问给限制了,只有输入用户名和密码才可以继续访问,基本上和apache的配置类似。

htpasswd工具需要安装http,直接使用yum install httpd
以下是针对用户管理后台进行用户认证配置:
Nginx基础模块使用_第1张图片

2、nginx域名跳转

在虚拟主机配置文件(/usr/local/nginx/conf/vhosts/*.conf)进行域名跳转配置:

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

Nginx基础模块使用_第2张图片

3、 nginx不记录指定文件类型日志、配置静态文件过期时间

在nginx.conf的日志相关配置
①日志的格式
在nginx.conf中定义日志的格式。配置如下:
log_format main '$remote_addr - $remote_user [$time_local] $request'
                           '"$status" $body_bytes_sent "$http_referer"'
                           '"$http_user_agent" "$http_x_forwarded_for"';

下面的日志格式,会记录代理的ip和真实客户端真实ip,建议可以使用如下配置:
log_format main '$proxy_add_x_forwarded_for - $remote_user [time_local]'
                           '"$request" $status $body_bytes_sent'
                           '"$http_referer" "$http_user_agent"';

②错误日志error_log日志级别
error_log级别分为:debug,info,notice,warn,error,crit
默认为crit,该级别在日志名后边定义格式如下:
error_log /your/path/error.log crit;

③某些类型的文件不记录日志
这个就比Apache要简单得多,配置如下:
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;       //配置图片缓存时间
access_log off;    //表示不记录gif|jpg等类型文件
}

location ~ .*\.(js|css)$
{
     expires 12h;     //配置图片缓存时间
     access_log off;
}

★★★过期时间指的是图片会在浏览器存储指定时间,超过这个时间就会重新刷新,配置缓存的目的是为了
让网站的访问速度更加快,节省带宽。

4、nginx配置防盗链

location ~.*\.(gif|jpg|jpeg|png|bmp|swf|flv|rar|zip|gz|bz2)$
{
               expires 30d;       //配置图片缓存时间
               access_log off;    //表示不记录gif|jpg等类型文件
               valid_referers none blocked servernames *.taobao.com *.baidu.com *.google.com;
               if ($invalid_referer )
               {
                        return 403;
                        rewirte ^/http://www.example.com/nophoto.gif;
               }
}

valid_referers是可用的来源链,none bolocked server_names是不进行防盗的主机域名,加起来是对于这些可用的链接不进行拦截而是加入白名单。
$invalid_referer,这里用$作为一个变量,变量名是不可用的来源链,和可用的正好相反
盗用我们图片的人访问这些图片时会跳转到http://www.example.com/nophoto.gif,也可以直接显示403,这样更节省资源。

5、nginx访问控制

限制只让某个ip访问,加如下配置:
allow        192.168.1.101;
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;
在对应的虚拟主机配置文件中加入:
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|attachements|forumdata|attachment|image)/.*\.php$
{
        deny all;
}

--------------------------------------------------------------------------------------------------------
视频内容:
针对admin.php进行访问控制设置,只允许本机进行访问,需要用location匹配规则进行设置,如下:

Nginx基础模块使用_第3张图片

对于整个网站的全局配置,只需要在虚拟主机配置文件中增加规则即可,如下:

Nginx基础模块使用_第4张图片

针对整个网段进行访问控制配置:

Nginx基础模块使用_第5张图片

6、生成SSL密钥加密网站

SSL加密网站的核心技术是非对称生成密钥
--公钥、私钥、证书
# openssl genrsa -out cert.key 2048     //生成私钥
# openssl req -new -x509 -key cert.key -out cert.pem     //生成证书
# cp {cert.key,cert.pem} /usr/local/nginx/conf/       //拷贝证书

SSL加密网站
server {                                                                   //定义虚拟主机
            listen    443;
            server_name  www.test.com;
            ssl on;                                                         //开启SSL
            ssl_certificate    cert.pem;                          //指定证书文件
            ssl_certficate     cert.key;                           //指定私钥文件
            ssl_session_timeout 5m;
            ssl_protocols SSLv2 SSLv3 TLSv1;
            ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_perfer_server_ciphers on;
            location / {
            root html;
            index index.html index.htm;
            }
}