概要
- 防盗链
- 根据文件类型设置过期时间
- 静态资源访问
- 日志配置
- 日志字段说明
- access_log 访问日志
- error_log 日志
- 日志切割
- 反向代理
- 禁止指定user_agent
- nginx访问控制
- 负载均衡
防盗链
location~* \.(gif|jpg|png)$
{
valid_referersnoneblocked192.168.0.1;
if ($invalid_referer
) {
rewrite ^/ http://$host/logo.png;
}
}复制代码
根据文件类型设置过期时间
location ~.*\.css$ {
expires 1d;
break;
}
location ~.*\.js$ {
expires 1d;
break;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 15d;
break;
}
复制代码
静态资源访问
http
{
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses1;
open_file_cache_valid30s;
gzipon;
gzip_min_length1k;
gzip_buffers416k;
gzip_http_version1.0;
gzip_comp_level2;
gzip_types
text/plain application/x-javascript text/css application/xml;
server
{
listen80
;
server_name
www.test.com;
charset utf-8
;
root
/data/www.test.com;
index
index.html index.htm;
}
}复制代码
日志配置
日志字段说明
字段 |
说明 |
|
remote_addr 和 http_x_forwarded_for |
客户端 IP 地址 |
remote_user |
客户端用户名称 |
request |
请求的 URI 和 HTTP 协议 |
status |
请求状态 |
body_bytes_sent |
返回给客户端的字节数,不包括响应头的大小 |
bytes_sent |
返回给客户端总字节数 |
connection |
连接的序列号 |
connection_requests |
当前同一个 TCP 连接的的请求数量 |
msec |
日志写入时间。单位为秒,精度是毫秒 |
pipe |
如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.” |
http_referer |
记录从哪个页面链接访问过来的 |
http_user_agent |
记录客户端浏览器相关信息 |
request_length |
请求的长度(包括请求行,请求头和请求正文) |
time_iso8601 |
ISO8601标准格式下的本地时间 |
time_local |
记录访问时间与时区 |
access_log 访问日志
http
{
log_format access '$remote_addr - $remote_user [$time_local] $host "$request" '
'$status$body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$clientip"'; access_log
/srv/log/nginx/talk-fun.access.log access;
}复制代码
error_log 日志
error_log /srv/log/nginx/nginx_error.log error;
http
{
}复制代码
日志切割
# 和apache不同的是,nginx没有apache一样的工具做切割,需要编写脚本实现。
#!/bin/bash
dd=$(date -d '-1 day' +%F)[ -d /tmp/nginx_log ]
|| mkdir /tmp/nginx_log
mv /tmp/nginx_access.log /tmp/nginx_log/$dd.log
/etc/init.d/nginx reload > /dev/null复制代码
反向代理
http
{
include
mime.types;
server_tokensoff;
server
{
listen8080;
location /
{
proxy_pass
https://github.com;
proxy_redirectoff
;
proxy_set_header Host $host
;
proxy_set_header X-Real-IP $remote_addr
;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location
/README.md {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass
https://github.com/zibinli/blog/blob/master/README.md;
}
}
}复制代码
禁止指定user_agent
if ($http_user_agent ~* 'baidu|360|sohu')
{
return
403;
}
location / 和 location ~ / 优先级是不一样的。
结合这个文章研究一下吧 http://blog.itpub.net/27181165/viewspace-777202/
curl -A "baidu"
-x127.0.0.1:80 www.test.com/forum.php -I 该命令指定百度为user_agent,返回403
复制代码
nginx访问控制
deny 127.0.0.1;
location ~ .*admin\.php$ {
allow 127.0.0.1; 只允许127.0.0.1的访问,其他均拒绝
deny all;
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
复制代码
负载均衡
http {
upstream test.net {
ip_hash;
server 192.168.10.13:80;
server 192.168.10.14:80 down;
server 192.168.10.15:8009 max_fails=3 fail_timeout=20s;
server 192.168.10.16:8080;
}
server {
location / {
proxy_pass http://test.net;
}
}
}