nginx配置用户认证、域名跳转、日志记录、静态文件缓存、防盗链

nginx配置用户认证、域名跳转、日志记录、静态文件缓存、防盗链,第1张

nginx配置用户认证、域名跳转、日志记录、静态文件缓存、防盗链

一、nginx配置用户认证

需要先安装Apache,可以使用yuminstallhttpd安装;或者在另一台机器上创建一个.htpasswd文件,并将其复制到服务器上;

创建用户并生成密码文件:

/usr/local/Apache2/bin/htpasswd-c/usr/local/nginx/conf/。htpasswd测试

//添加测试用户,第一次添加需要添加-c参数,第二次添加不需要-c参数;


访问指定目录以配置用户身份验证:

添加到nginx的默认配置文件中,红色部分是指定在哪个目录下设置用户认证。

位置/a/{

Auth_basic“Auth”;

auth_basic_user_file/usr/local/nginx/conf/。htpasswd

}


实验,用curl分析/a/目录下的index.html为401未认证;用-u用户名和密码登录后200OK

[root@localhost vhosts]# curl -x127.0.0.1:80 192.168.20.30/a/index.html -I HTTP/1.1 401 Unauthorized Server: nginx/1.6.2 Date: Thu, 14 May 2015 09:48:18 GMT Content-Type: text/html Content-Length: 194 Connection: keep-alive WWW-Authenticate: Basic realm="Auth" [root@localhost vhosts]# curl -utest:1234 -x127.0.0.1:80 192.168.20.30/a/index.html -I HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 14 May 2015 09:48:26 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Thu, 14 May 2015 09:27:34 GMT Connection: keep-alive ETag: "55546a86-264" Accept-Ranges: bytes


访问admin.php后台,设置用户认证;认证的代码要写在匹配的php前面,解析php的代码也要加上;

[root@localhost vhosts]# cat default.conf  server {     listen 80 default;     server_name localhost;     index index.html index.htm index.php;     root /usr/local/nginx/html;          location ~ admin\.php {         auth_basic              "Auth";         auth_basic_user_file   /usr/local/nginx/conf/.htpasswd;         include fastcgi_params;         fastcgi_pass unix:/tmp/php-fcgi.sock;         fastcgi_index index.php;         fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;     }     location ~ \.php$ {         include fastcgi_params;         fastcgi_pass unix:/tmp/php-fcgi.sock;         fastcgi_index index.php;         fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;     } }


网页测试登录admin.php页面会d出认证对话框,只有输入用户名和密码才能访问。


如果不指定根目录直接使用认证,打开首页d出的对话框进行认证;

位置/{

Auth_basic“Auth”;

auth_basic_user_file/usr/local/nginx/conf/。htpasswd



二。配置域名重定向

将以下代码添加到nginx的默认虚拟主机配置中:

服务器名11.com·22.com·www.111.com;


if($host!='www.111.com'){
重写^/(.*)$http://www.111.com/永久;

}

永久永久重定向301;


测试:如果你访问11.com22.com,你将跳转到位置:www.111.com;

[root@localhost vhosts]# curl -x127.0.0.1:80 11.com -I HTTP/1.1 301 Moved Permanently Server: nginx/1.6.2 Date: Thu, 14 May 2015 22:15:16 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://www.111.com/ [root@localhost vhosts]# curl -x127.0.0.1:80 22.com -I HTTP/1.1 301 Moved Permanently Server: nginx/1.6.2 Date: Thu, 14 May 2015 22:15:21 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: http://www.111.com/


三。配置日志记录

日志格式,main是定义的日志格式名称;日志格式要添加到nginx.conf主配置文件的http部分;

log_formatmain'$remote_addr-$remote_user[$time_local]$request'

"$status"$body_bytes_sent"$http_referer""

“$http_user_agent”“$http_x_forwarded_for”;

log_formatmain1'$proxy_add_x_forwarded_for-$remote_user[$time_local]'

"$request"$status$body_bytes_sent"

“$http_referer”“$http_user_agent”;

//这个日志的格式是ip不仅记录了代理的ip,还记录了远程客户端的真实IP。


添加访问日志的格式,写入default.conf的最后一行;

server {     listen 80 default;     server_name localhost;     index index.html index.htm index.php;     root /usr/local/nginx/html;          location ~ \.php$ {     include fastcgi_params;     fastcgi_pass unix:/tmp/php-fcgi.sock;     fastcgi_index index.php;     fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;     }     access_log /home/logs/xxx.log combined_realip; }

Combined_realip为nginx.conf定义的日志格式的名称


使用卷曲测试后,一个新的日志;已生成;

[root@localhost vhosts]# curl -x127.0.0.1:80 192.168.20.30/index.html -I [root@localhost vhosts]# cat /home/logs/xxx.log  127.0.0.1 - [15/May/2015:15:13:49 +0800]192.168.20.30 "/index.html" 200"-" "curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

错误日志error_log日志级别:

Error_log级别分为debug、info、notice、warn、Error,crit默认为crit。此级别在日志名称后以以下格式定义:error_log/your/path/error.logcrit;

Crit日志最少,debug日志最多。如果你遇到nginx的一些问题,比如502频繁出现,但是看默认的error_log没有看到有意义的信息,那么你可以调整错误日志的级别。当你调整到错误级别时,错误日志的内容会更加丰富。



四。静态文件(图片、flash、js、css)不记录日志,配置缓存;

位置~。*\.(gif|jpg|jpeg|png|bmp|swf)$

{

过期30d

access_logoff

}

位置~。*\.(js|css)?$

{

到期12小时;

access_logoff

}

Expires定义缓存时间;

Access_logoff不记录;

测试:触摸1.jpg2.js文件,用curl测试cache-control作为缓存时间;

[root@localhost vhosts]# touch /usr/local/nginx/html/1.jpg [root@localhost vhosts]# curl -x127.0.0.1:80 www.111.com/1.jpg -I HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 14 May 2015 22:11:45 GMT Content-Type: p_w_picpath/jpeg Content-Length: 0 Last-Modified: Thu, 14 May 2015 22:11:41 GMT Connection: keep-alive ETag: "55551d9d-0" Expires: Sat, 13 Jun 2015 22:11:45 GMT Cache-Control: max-age=2592000 Accept-Ranges: bytes [root@localhost vhosts]# touch /usr/local/nginx/html/2.js [root@localhost vhosts]# curl -x127.0.0.1:80 www.111.com/2.js -I HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 14 May 2015 22:11:00 GMT Content-Type: application/javascript Content-Length: 0 Last-Modified: Thu, 14 May 2015 22:10:53 GMT Connection: keep-alive ETag: "55551d6d-0" Expires: Fri, 15 May 2015 10:11:00 GMT Cache-Control: max-age=43200 Accept-Ranges: bytes


五、防盗链

将以下代码添加到nginx默认主机的default.conf中的server部分:

//不要从淘宝、百度、谷歌、搜搜等有域名的网站上盗取外链。如果不是指定的域名,则返回403错误;或者跳转到自定义图片;

地点~*^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|JPEG|BMP|xls)${

valid_referersnoneblockedserver_names*.Taobao.com*.Baidu.com*.Google.com*.Google.cn*.soso.com;

if($invalid_referer){

返回403;

#重写http://www.example.com/nophoto.gif;^/

}

}


~*表示不区分大小写的匹配;


如果一个配置文件中有~个匹配项,则只匹配最上面的一个;把图片文件的缓存和不记录日志的代码放入~match,两者都生效;

地点~*^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|JPEG|BMP|xls)${
expires10d;
valid_referersnoneblockedserver_names*.1.com*.a.com*.b.com*.Baidu.com\
*.Google.com*.Google.cn*.soso.com;
if($invalid_referer){
return403;
#重写http://www.example.com/nophoto.gif;^/
}
access_logoff;
}


使用curl-e测试,需要添加http://用qq.com访问图片显示403错误;用1.com是200OK防盗链验证成功;

[root@localhost vhosts]# curl -x127.0.0.1:80 -e "http://www.qq.com"  192.168.20.30/1.jpg -I HTTP/1.1 403 Forbidden Server: nginx/1.6.2 Date: Fri, 15 May 2015 08:28:07 GMT Content-Type: text/html Content-Length: 168 Connection: keep-alive [ root@localhost vhosts]# curl -x127.0.0.1:80 -e "http://www.1.com"  192.168.20.30/1.jpg -I HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Fri, 15 May 2015 08:28:16 GMT Content-Type: p_w_picpath/jpeg Content-Length: 0 Last-Modified: Fri, 15 May 2015 07:55:55 GMT Connection: keep-alive ETag: "5555a68b-0" Accept-Ranges: bytes



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/782475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存