共计 4173 个字符,预计需要花费 11 分钟才能阅读完成。
Nginx 配置记录
防盗链
location ~* \.(gif|jpg|png)$ {
# 只允许 192.168.0.1 请求资源
valid_referers none blocked 192.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; #保存 15 天
break;
}
# curl -x127.0.0.1:80 http://www.test.com/static/image/common/logo.png -I #测试图片的 max-age
静态资源访问
http {
# 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,# 建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。open_file_cache max=204800 inactive=20s;
# open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,# 如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个
# 文件在 inactive 时间内一次没被使用,它将被移除。open_file_cache_min_uses 1;
# 这个是指多长时间检查一次缓存的有效信息
open_file_cache_valid 30s;
# 默认情况下,Nginx 的 gzip 压缩是关闭的,gzip 压缩功能就是可以让你节省不
# 少带宽,但是会增加服务器 CPU 的开销哦,Nginx 默认只对 text/html 进行压缩,# 如果要对 html 之外的内容进行压缩传输,我们需要手动来设置。gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
server {
listen 80;
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;
# error_log /dev/null; # 真正的关闭错误日志
http {# ...}
日志切割
# 和 apache 不同的是,nginx 没有 apache 一样的工具做切割,需要编写脚本实现。# 在 /usr/local/sbin 下写脚本
#!/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_tokens off;
## 配置反向代理的参数
server {
listen 8080;
## 1. 用户访问 http://ip:port,则反向代理到 https://github.com
location / {
proxy_pass https://github.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
## 2. 用户访问 http://ip:port/README.md,则反向代理到
## https://github.com/zibinli/blog/blob/master/README.md
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') #禁止 useragent 为 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 访问控制
# 可以设置一些配置禁止一些 ip 的访问
deny 127.0.0.1; #全局定义限制,location 里的是局部定义的。如果两者冲突,以 location 这种精确地优先,location ~ .*admin\.php$ {
#auth_basic "cct auth";
#auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
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;}
}
}
开启 SSL
listen 443 ssl http2;
#SSL-START SSL 相关配置,请勿删除或修改下一行带注释的 404 规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/www.ahwgs.cn/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/www.ahwgs.cn/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
#HTTP_TO_HTTPS_START
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
流量限制
server{
limit_conn perserver 300; # 并发限制
limit_conn perip 25; # 单 IP 限制
limit_rate 512k; # 流量限制
}
错误页配置
server{
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
#ERROR-PAGE-END
}
正文完